|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Hallo Zusammen,
nun habe ich mal den EA so abgeändert. Komischerweise wird keine Order platziert . Allerdings erhalte ich im Journal auch keinen HInweis auf Fehler. Kann es sein, dass da evtl noch was fehlt? //+------------------------------------------------------------------+ //| 10 Pips a Day.mq4 | //| Marc | //| ... | //+------------------------------------------------------------------+ #property copyright "Marc" #property link "..." extern int BTP=100; extern int BSL=200; extern int STP=100; extern int SSL=200; int OBS=10; int OSS=-10; int TradeSignal=0; extern double Lots=0.02; extern int slippage=20; int iOrderOpenStatus; extern int MaxTrades=1; int TotalTrades; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //----Kauflogik if (Open[-1] < Close[-1]) TradeSignal=OBS; TotalTrades=OrdersTotal(); if ((TradeSignal == OBS) && (TotalTrades < MaxTrades)) { double BSL=High[1]-(BSL*Point); double BTP=High[1]+(BTP*Point); iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, High[1], slippage, BSL, BTP, "Kauf",0,Green); } //----Verkaufslogik if (Close[-1] < Open[-1]) TradeSignal=OSS; TotalTrades=OrdersTotal(); if ((TradeSignal == OSS) && (TotalTrades < MaxTrades)) { double SSL=Low[1]+(SSL*Point); double STP=Low[1]-(STP*Point); iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, Low[1], slippage, BSL, BTP, "Kauf",0,Green); } return(0); } //+------------------------------------------------------------------+ Was ich noch ergänzen muss ist die Orderdauer...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Hallo, dein Fehler sollte hier liegen:
if (Open[-1] < Close[-1]) und if (Close[-1] < Open[-1]) Du vergleichst hier ob 0 < 0 ist und das wird wohl nie der Fall sein. s.l. Racki |
|
|||
Zitat:
eigentlich wollte ich herausfinden, ob das Opening der letzten Kerze niedriger ist, als das Closing der gleichen Kerze...Im anderen Fall wollte ich herausfinden ob das Closing niedriger ist als das Opening. Also ob ich eine Kerze habe die im Minus geschlossen hat oder im Plus. Kann es sein, dass ich ggf gar nicht "[-1]" einsetzen darf, sondern nur "[1]"? Bei den Einstiegsstopps wurde mir auch gepostet, dass ich "Low[1]" und "High[1]" eingeben muss. Übrigens bekomme ich immer ein Errorhinweis 130...eigentlich handelt mein Broker mit 5 Stellen nach dem Komma und bei anderen EA's hat es auch geklappt^^ kannst Du mir bei diesen 2 oder 3 Fragen noch helfen? Vielen Dnak Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Hallo,
Du bemerkst es bereits richtig: if (Close[-1] < Open[-1]) geht nicht, da zukünftige Kurse gaänzlich unbekannt sind. Das maximale ist das jetzt, und das wäre 0. if (Close[1] < Open[1]) bool fallendeTendenz=true; if (Close[1] > Open[1]) fallendeTendenz=false; [1] vorherige Kerze [2] Kerze vor vorheriger Kerze. Fehler 130 = ERR_INVALID_STOPS Vermutlich bist Du zu nah am Kurs mit dem Stoploss. Abstand mindestends 2 x Spread, dann könnte es klappen. Gruß Joe |
|
|||
Zitat:
Ich habe gestern abend den SL noch auf 1000 Punkte bzw. Brokerbedingt 100 Pips geändert. Sowohl beim long als auch short Trade kam der gleiche Fehlerhinweis...Der Spread lag gestern Abend um die 2 Pips. Ergo wäre es ja dann eine Entfernung von 4. Mein Broker gibt 50 Punkte bzw. 5 Pips als SL vor. Da müsste ich eigentlich drin gewesen sein ... Vll mache ich doch was mehr falsch?
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Also,
soweit ich in deinem proggi sehen kann möchtest Du für verkauf(SELL) folgendes benutzen : iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,Lots, Low[1], slippage, BSL, BTP, "Kauf",0,Green); Da wird nichts draus weil, SELL braucht in dem Fall "OP_SELLSTOP" Achte darauf, das beim Sellstop der kurs min. 2 x pips höher ist als Bid. Und das Target tiefer als Bid -2 x spread und sl höher als Ask + 2 x spread. Und noch ein Tipp: Mache ein SELLSTOP oder BUYSTOP erstmal ohne Target und ohne Stoploss. Wird die Order so angenommen, dann modifiziere die Order mit Modify. Das hilft auch sehr bei ECN-Konten. Ich machs so, weil am wenigsten Probleme. Siehe im Editor die Methoden mit Beispiel, das hilft fast immer (rechte seite, da wo die Files stehen, da gibts unterhalb rechts den Reiter "Dictionary" wo die Methoden gruppiert sind. Gruß Joe |
|
|||
Ich habe mir erlaubt Deinen EA zu fixen :)
//Hier fehlt z.B. noch das Löschen veralteter Trades und eine Magicnumber, etc...
//+------------------------------------------------------------------+ //| 10 Pips a Day.mq4 | //| Marc | //| ... | //+------------------------------------------------------------------+ #property copyright "Marc" #property link "..." extern int _BTP=100; extern int _BSL=200; extern int _STP=100; extern int _SSL=200; extern double Lots=0.02; extern int slippage=20; extern int MaxTrades=1; int OBS=10; int OSS=-10; int TradeSignal=0; int iTicket; int TotalTrades; int spread; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //----Kauflogik if (Open[1] < Close[1]) TradeSignal=OBS; TotalTrades=OrdersTotal(); spread=(Ask-Bid)/Point; if ((TradeSignal == OBS) && (TotalTrades < MaxTrades)) { double BSL=High[1]-_BSL*Point; double BTP=High[1]+_BTP*Point; if(High[1]>=Ask+2*spread*Point) { Print("DoLong price=",High[1]," BSL=",BSL," BTP=",BTP); iTicket=OrderSend(Symbol(), OP_BUYSTOP, Lots, High[1], slippage, NormalizeDouble(BSL,Digits), 0, "Kauf",0,0,Blue); if(OrderSelect(iTicket,SELECT_BY_TICKET)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderSt opLoss(),NormalizeDouble(BTP,Digits),0,Blue); } } //----Verkaufslogik if (Close[1] < Open[1]) TradeSignal=OSS; TotalTrades=OrdersTotal(); if ((TradeSignal == OSS) && (TotalTrades < MaxTrades)) { double SSL=Low[1]+_SSL*Point; double STP=Low[1]-_STP*Point; if(Low[1]<=Bid-2*spread*Point) { Print("DoShort price=",Low[1]," SSL=",SSL," STP=",STP); iTicket=OrderSend (Symbol(), OP_SELLSTOP, Lots, Low[1], slippage, NormalizeDouble(SSL,Digits), 0, "Verkauf",0,0,Red); if(OrderSelect(iTicket,SELECT_BY_TICKET)) OrderModify(OrderTicket(),OrderOpenPrice(),OrderSt opLoss(),NormalizeDouble(STP,Digits),0,Red); } } return(0); } //+------------------------------------------------------------------+ |
|
|||
Zitat:
ich hatte beim kopieren wohl vergessen aus dem OP_BUYSTOP ein OP_SELLSTOP zu machen. Das Dictionary werde ich mir im Laufe der Woche mal anschauen. Vielen Dank schon mal fürs fixen Habe das Programm natürlich schon getestet und festestellt, dass es nicht so toll läuft wie ich erhofft hatte...Zudem wurden in 3 Jahren gerade mal 40 oder 50 Trades ausgeführt...das stimmt mich bedenklich...Werde erst mal an der Sache festhalten udn schauen was ich optimieren kann...Das nächste Zel ist die fortführung des MA vs Candle
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Hallo,
es ist nicht wichtig, wieviele Trades ein EA macht. Wichtig ist, das er möglichst nur Plus-Trades produziert, bei kleinstem Drawdown Dann kann man nämlich mit dem Risiko kompensieren. Hast Du zumindest festgestellt, wo der Unterschied zu Deinem Code ist? Gruß Joe |
|
|||
Ich werde mich heute Abend mal ein wenig in deinen gefixten Code einlesen. Zumindest kann ich erkennen, dass hier die Spread mit einem Faktor von 2 berücksichtigt wurde. Was zum Beispiel das Thema des Orderverfalls angeht, sollte ein "D" im Ordersend reichen, aber bei mir hat das Prog das nicht angenommen...weder "D" oder "D, 23:59:59" etc. Das sollte eigentlich nicht schwer sein oder?
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
Lesezeichen |
Stichworte |
metatrader programmierung, programmierung mql |
|
|