Geschrieben 20. März 201016 Jr. comment_96047 Hallo Zusammen, seit ein paar Tagen beschäftige ich mich mit dem Metatrader und will ein Script für den automatischen Handel schreiben. Leider ist die einzige Programmiersprache die ich beherrsche „AmigaBasic“, Vielleicht kennt´s noch jemand!:) Wenn ich einen bestimmten Intervall erzeugen möchte, wie muss das Script aussehen? Das Script soll jede Stunde, unabhängig vom Kurs usw. einen Trade mit einer bestimmten lot Anzahl „Short“ kaufen. z.B. alle 60 Minuten, 1lot short auf dem DowJones. Das wars schon vielen Dank im Voraus Bearbeitet 20. März 201016 Jr. von ronner Titel angepasst Melden
Geschrieben 20. März 201016 Jr. comment_96048 Wenn ich einen bestimmten Intervall erzeugen möchte, wie muss das Script aussehen? Das Script soll jede Stunde, unabhängig vom Kurs usw. einen Trade mit einer bestimmten lot Anzahl „Short“ kaufen. z.B. alle 60 Minuten, 1lot short auf dem DowJones. Du startest es dann einfach auf dem Timeframe den du möchtest (in dem Fall H1). Dann nimmst du so ein Gerüst: static int prevtime = 0; int init() { return(0); } int deinit() { return(0); } int start() { if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun return(0); // hier kommt dein Code rein, der einmal pro Bar ausgeführt wird prevtime = Time[0]; return(0); } Die Variable mit static wird über die einzelnen Aufrufe bei jedem Tick gemerkt, deshalb funktioniert das. HTH Lutz Melden
Geschrieben 20. März 201016 Jr. Autor comment_96049 Hallo Lutz, danke für die Prompte Hilfe. Wie sieht der Code aus der einmal pro Bar ausgeführt wird, wenn die Order z.B. wie folgt ist: Instrument: DowJonesEinheiten: 1lotRichtung: shortLimit: 50Stop: 50 Melden
Geschrieben 20. März 201016 Jr. comment_96050 Wie sieht der Code aus der einmal pro Bar ausgeführt wird, wenn die Order z.B. wie folgt ist: ... Das geht mit dem Befehl OrderSend, Details musst du dir raussuchen. Hilfe kommt über F1 wenn der Cursor auf OrderSend steht. Lutz Melden
Geschrieben 20. März 201016 Jr. Autor comment_96051 aja danke. Ich habe mich mal dran versucht: if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun return(0); OrderSend(string symbol, OP_SELL cmd, 1 volume, Ask price, int slippage, 50 stoploss, 50 takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red) prevtime = Time[0]; return(0); Bekomme beim Kompilieren jede Menge fehlermedlungen wie variable not defined, variable expected Melden
Geschrieben 20. März 201016 Jr. comment_96073 Hast du schonmal http://book.mql4.com/ angeschaut?Was soll string symbol sein?Da müsste dan vermutlich Symbol() oder "EURUSD" rein.Die anderen Sachen müssen auch verändert werden Melden
Geschrieben 20. März 201016 Jr. comment_96078 sollte wohl eher so aussehen ;) if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun return(0); OrderSend(Symbol(), OP_SELL, 1, Ask, 3, 50 , 50 ); prevtime = Time[0]; return(0); hth Melden
Geschrieben 21. März 201016 Jr. comment_96082 OrderSend(Symbol(), OP_SELL, 1, Ask, 3, 50 , 50 ); Ich glaube bei SL und TP müssen direkt die Preise rein. also in dem Fall von OP_SELL Ask+0.002 und Ask-0.005 Lutz Melden
Geschrieben 21. März 201016 Jr. comment_96122 Ich glaube bei SL und TP müssen direkt die Preise rein. also in dem Fall von OP_SELL Ask+0.002 und Ask-0.005 Natürlich, mein Fehler (kommt davon wenn man nur die eigenen Funktionen verwendet wo das automatisch umgerechnet wird ) EDIT: zusätzlich wird ja nicht am Ask verkauft... geändert auf Bid also wirklich korrekt wäre: if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun return(0); OrderSend(Symbol(), OP_SELL, 1, Bid, 3, Bid+50*Point , Bid-50*Point); prevtime = Time[0]; return(0); Melden
Geschrieben 21. März 201016 Jr. Autor comment_96148 Hallo Zusammen und vielen Dank für eure Hilfe. Der Code sieht im Moment folgendermaßen aus: static int prevtime = 0; int init() { return(0); } int deinit() { return(0); } int start() { if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun return(0); OrderSend(Symbol(), OP_SELL, 1, Bid, 3, Bid+50*Point , Bid-50*Point); prevtime = Time[0]; return(0); } Wenn ich das jetzt im backtest (XTB-Trader(Periode "Daily", Modell "Jedes Ticksignal")) laufen lasse, erhalte ich kein Ergebnis?Sollte er jetzt nicht jede Stunde einen Trade platzieren? Bearbeitet 21. März 201016 Jr. von Mythos Code tags eingefügt. Bitte Sourcecode immer in Codetags einbetten Melden
Geschrieben 21. März 201016 Jr. Autor comment_96150 ja, habe schon öfters backtests gemacht. Lasse es auf dem EURUSD laufen, die Daten sind alle gedownloaded. Was mir an dem pdf aufgefallen ist, verschiedene Menüs wie "imput" im Experten Eigenschaften und "Bericht" im backtestprogramm fehlen bei mir, naja ob das jetzt relevant ist!? Habs nochmal durchlaufen lassen, er macht den test, dauert ca. 16 Sekunden, im Ergebnis hat er keinen Trade gesetzt? Melden
Geschrieben 21. März 201016 Jr. comment_96151 Da werden dir andere bessere Antworten geben können, MQL ist nicht mein Ding,hatte dir das PDF nur verlinkt weil die Frage heute schon mal in einem anderen Thread aufgekommen ist. Melden
Geschrieben 21. März 201016 Jr. comment_96152 Habs nochmal durchlaufen lassen, er macht den test, dauert ca. 16 Sekunden, im Ergebnis hat er keinen Trade gesetzt? Ich vermute das Volumen ist mit 1 Lot zu gross, setze mal 0.1 oder 0.01 ein. Fehlermeldungen zum BT stehen auch im Journal. Lutz Melden
Geschrieben 21. März 201016 Jr. Autor comment_96154 hab ich gemacht, im Journal steht: - There were 1 passes done during optimization, 1 results have been discarded as insignificant- optimization stopped Melden
Geschrieben 21. März 201016 Jr. comment_96155 hab ich gemacht, im Journal steht: - There were 1 passes done during optimization, 1 results have been discarded as insignificant- optimization stopped Du hast Optimierung angehackt. Dann rechnet er eine Optimierung und zeigt dir standardmäßig nur ergebnisse die positiv sind.Mögliche Lösungen: 1. Optimierung nicht mehr anhacken2. im Reiter "Ergebnisse der Optimierung" : Rechte Maustaste und "Nutzlose Resultate überspringen" nicht anhacken. PS sourcecode bitte in tags einbetten für die lesbarkeit. (Button über dem Texteditor "In Code Tag einbetten") Melden
Geschrieben 21. März 201016 Jr. Autor comment_96157 jawohl, dass hat geklappt. Er stetzt zwar immernoch keine Trades, bringt aber jetzt andere Fehlermeldungen: - OrderSend error 131- OrderSend error 4107- invalid price 1,36765000 for OrderSend function und das ca. 50mal Ich füge den kompletten Code nochmal bei!:) static int prevtime = 0; int init() { return(0); } int deinit() { return(0); } int start() { if(Time[0] == prevtime) //aktueller Bar schon erledigt, nichts tun return(0); OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, Bid+50*Point , Bid-50*Point); prevtime = Time[0]; return(0); } Melden
Geschrieben 21. März 201016 Jr. comment_96159 Die MQL Hilfe hilft:ERR_INVALID_TRADE_VOLUME 131 Invalid trade volume.Vermutlich sind MicroLots nicht erlaubt, versuchs mal mit 0.1 ERR_INVALID_PRICE_PARAM 4107 Invalid price. Du verwendest vermutlich die Datenhistory von MetaQuotes, die ist 5 stellig, dein Broker kann vermutlich aber nur 4 stellig jammert also wenn du diese Daten direkt verwendest. Nimm am besten statt dem Bid sowas:double myBid= NormalizeDouble(Bid,Digits); OrderSend(Symbol(), OP_SELL, 0.1, myBid, 3, myBid+50*Point , myBid-50*Point); Melden
Geschrieben 21. März 201016 Jr. comment_96195 Danke an alle, es klappt jetzt:) Wann werden denn die Gewinne ausgeschüttet? ;-) Lutz Melden
Geschrieben 21. März 201016 Jr. comment_96201 Als überwiegend Silent Reader reichen mir für meine Klicktätigkeiten 5 % auf 10 Jahre.Nur die Gewinne, ist wohl klar Melden
Geschrieben 23. März 201016 Jr. Autor comment_96392 wenn ich einen backtest hinbekomme, der 20 Jahre übersteht!:) Ich dachte, wenn ich das Script jetzt long anwenden will, muss ich nur aus „OP_SELL“ - „OP_BUY“ machen? Melden
Geschrieben 23. März 201016 Jr. comment_96405 Ich dachte, wenn ich das Script jetzt long anwenden will, muss ich nur aus „OP_SELL“ - „OP_BUY“ machen? würde stimmen, wenn bei einer Kauforder der Stoploss über dem Kurs und der TP unter dem Kurs stehen würde ;)Diese Werte musst du auch anpassen. Und natürlich Bid/Ask wieder tauschen. Melden
Hallo Zusammen,
seit ein paar Tagen beschäftige ich mich mit dem Metatrader und will ein Script für den automatischen Handel schreiben.
Leider ist die einzige Programmiersprache die ich beherrsche „AmigaBasic“, Vielleicht kennt´s noch jemand!:)
Wenn ich einen bestimmten Intervall erzeugen möchte, wie muss das Script aussehen?
Das Script soll jede Stunde, unabhängig vom Kurs usw. einen Trade mit einer bestimmten lot Anzahl „Short“ kaufen.
z.B. alle 60 Minuten, 1lot short auf dem DowJones.
Das wars schon
vielen Dank im Voraus
Bearbeitet von ronner
Titel angepasst