mmsknecht Posted March 20, 2010 Report Posted March 20, 2010 (edited) 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 Edited March 20, 2010 by ronner Titel angepasst
lutzs Posted March 20, 2010 Report Posted March 20, 2010 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
mmsknecht Posted March 20, 2010 Author Report Posted March 20, 2010 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
lutzs Posted March 20, 2010 Report Posted March 20, 2010 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
mmsknecht Posted March 20, 2010 Author Report Posted March 20, 2010 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
Quickbeam2k1 Posted March 20, 2010 Report Posted March 20, 2010 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
Mythos Posted March 20, 2010 Report Posted March 20, 2010 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
lutzs Posted March 21, 2010 Report Posted March 21, 2010 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
Mythos Posted March 21, 2010 Report Posted March 21, 2010 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);
mmsknecht Posted March 21, 2010 Author Report Posted March 21, 2010 (edited) 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? Edited March 21, 2010 by Mythos Code tags eingefügt. Bitte Sourcecode immer in Codetags einbetten
mmsknecht Posted March 21, 2010 Author Report Posted March 21, 2010 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?
Vola Posted March 21, 2010 Report Posted March 21, 2010 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.
lutzs Posted March 21, 2010 Report Posted March 21, 2010 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
mmsknecht Posted March 21, 2010 Author Report Posted March 21, 2010 hab ich gemacht, im Journal steht: - There were 1 passes done during optimization, 1 results have been discarded as insignificant- optimization stopped
Mythos Posted March 21, 2010 Report Posted March 21, 2010 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")
mmsknecht Posted March 21, 2010 Author Report Posted March 21, 2010 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); }
Mythos Posted March 21, 2010 Report Posted March 21, 2010 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);
lutzs Posted March 21, 2010 Report Posted March 21, 2010 Danke an alle, es klappt jetzt:) Wann werden denn die Gewinne ausgeschüttet? ;-) Lutz
Vola Posted March 21, 2010 Report Posted March 21, 2010 Als überwiegend Silent Reader reichen mir für meine Klicktätigkeiten 5 % auf 10 Jahre.Nur die Gewinne, ist wohl klar
mmsknecht Posted March 23, 2010 Author Report Posted March 23, 2010 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?
Mythos Posted March 23, 2010 Report Posted March 23, 2010 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.
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now