Es geht um den EA im Anhang. Ich vermute, dass er wegen IsTradeContextBusy() sleep irgendwie falsch zählt.
Scheint im Backtest und im Demo-Konto das selbe Problem zu sein, dass meine eigenen Zähler in den for-Schleifen völlig falsch gezählt werden.
Vermute dass es an irgendwelchen Schleifen liegt. Vielleicht an IsTradeContextBusy() sleep(). Oder liegt es vielleicht an irgendwelchen Ask- und Bid-Abfragen und Berechnungen?
if(IsTradeAllowed())TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,Orange); while(IsTradeContextBusy())Sleep(slMS); Opened_Sel++; ... if(IsTradeAllowed())TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,White); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++; ... //Wenn nach OC2 noch kein NextBuy offen ist... if( neLO==false ){// ? // ...OOP für NextSel-by-FirstBuy berechnen: if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Sel_FiBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits); if( Bid <= OOP_Sel_FiBuy ){// ? Need_Sel = Opened_Buy * OrdersNeed_Multi; for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ? if(IsTradeAllowed())TI_NeSel = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Sel++; ... //...Wenn nach OC2 doch NextBuy offen ist... if( neLO==true ){ // ...OOP für NextSel-by-NextBuy berechnen: if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Sel_NeBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits); if( Bid <= OOP_Sel_NeBuy ){ if( OOP_Sel_NeBuy > SL_FiSel ){ Need_Sel = Opened_Buy * OrdersNeed_Multi; for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ? if(IsTradeAllowed())TI_NeSel = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Sel++; ... //Wenn nach OC2 noch kein NextSel offen ist... if( neSH==false ){ // ...OOP für NextBuy-by-FirstSel berechnen: if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Buy_FiSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits); if( Ask >= OOP_Buy_FiSel ){ Need_Buy = Opened_Sel * OrdersNeed_Multi; for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ? if(IsTradeAllowed())TI_NeBuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++; ... // Wenn nach OC2 doch NextSel offen ist... if( neSH==true ){ // ...OOP für NextBuy-by-NextSel berechnen: if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Buy_NeSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits); if( Bid >= OOP_Buy_NeSel ){ if( OOP_Buy_NeSel < SL_FiSel ){ Need_Buy = Opened_Sel * OrdersNeed_Multi; for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ? if(IsTradeAllowed())TI_NeBuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++;
Oh Mann!
1. Wo endet denn zB. die Schleife?
for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ? if(IsTradeAllowed())TI_NeBuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++;
2. Wo ikst die Prüfung, ob OrderSend erfolgreich war?
3. Als Anfänger warum fängst Du mit MT4 an? Hier der Vergleich:
4. Hier ein bisschen Literatur für Anfänger:
https://www.mql5.com/de/articles/648 Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
https://www.mql5.com/de/articles/650 Das MQL5-Kochbuch: Entwicklung eines mehrwährungsfähigen Expert Advisors mit unbegrenzter Anzahl von Parametern
https://www.mql5.com/de/articles/651 Das MQL5-Kochbuch: Schreiben der Historie von Abschlüssen in eine Datei und Erstellen von Bilanzdiagrammen für jedes Symbol in Excel
https://www.mql5.com/de/articles/496 // Quickstart for newbies
https://www.mql5.com/de/articles/211: Orders, Positions und Abschlüsse in MetaTrader 5
5. Weißt Du wie viele Grid und Martingale EAs es bereits gibt, die Du einfach kopieren kannst: https://www.mql5.com/de/search#!keyword=grid (1372 Seiten mit je 10 Einträgen).
Wähle links CodeBase oder Artikel.
Sorry, hatte vergessen, die Schluss-Klammern auch einzufügen.
Irgendwie werden die Zähler Opened_Sel und Opened_Buy viel öfter hoch gezählt mit ++ als irgendwie nachvollziehbar ist.
Entsprechende Print-Sachen gibts im Quell-Code im Anhang.
for( j=OrdersNeed_Multi ; j>0 ; j-- ){// ? if(IsTradeAllowed())TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,Orange); while(IsTradeContextBusy())Sleep(slMS); Opened_Sel++; if(IsTradeAllowed())TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,White); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++; } } }// Nach OC1 gar keine Orders offen. //============================================================================================================= // ( O C 2 ) O R D E R M O D I F Y F I R S T S E L / F I R S T B U Y //============================================================================================================= // Wenn nach OC2 FirstSel und FirstBuy offen sind... if( fiSH==true && fiLO==true ){// ? //-----------------------------------------------------------------------------------------------------------*/ //...FirstSel- -SL und -TP genau mit OOP berechnen: for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MN_FiSel){ SL_FiSel = NormalizeDouble( OrderOpenPrice() + SL *Point,Digits); TP_FiSel = NormalizeDouble( OrderOpenPrice() - TP *Point,Digits); if(OrderStopLoss()!=SL_FiSel||OrderTakeProfit()!=TP_FiSel){ if(IsTradeAllowed())OM_Sel=OrderModify(OrderTicket(),OrderOpenPrice(),SL_FiSel,TP_FiSel,Green); while(IsTradeContextBusy())Sleep(slMS); } }// Nach OC2 FirstSel modifiziert. //...FirstBuy- -SL und -TP genau mit OOP berechnen: if(OrderMagicNumber()==MN_FiBuy){ SL_FiBuy = NormalizeDouble( OrderOpenPrice() - SL *Point,Digits); TP_FiBuy = NormalizeDouble( OrderOpenPrice() + TP *Point,Digits); if(OrderStopLoss()!=SL_FiBuy||OrderTakeProfit()!=TP_FiBuy){ if(IsTradeAllowed())OM_Buy=OrderModify(OrderTicket(),OrderOpenPrice(),SL_FiBuy,TP_FiBuy,White); while(IsTradeContextBusy())Sleep(slMS); } } } } }// Nach OC2 FirstSel / FirstBuy modifiy. //============================================================================================================= // ( O C 2 ) O P E N N E X T S E L //============================================================================================================= //Wenn nach OC2 noch kein NextBuy offen ist... if( neLO==false ){// ? // ...OOP für NextSel-by-FirstBuy berechnen: if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Sel_FiBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits); if( Bid <= OOP_Sel_FiBuy ){// ? Need_Sel = Opened_Buy * OrdersNeed_Multi; for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ? if(IsTradeAllowed())TI_NeSel = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Sel++; } } } } }// Nach OC2 noch kein NextBuy offen. //-----------------------------------------------------------------------------------------------------------*/ //...Wenn nach OC2 doch NextBuy offen ist... if( neLO==true ){ // ...OOP für NextSel-by-NextBuy berechnen: if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Sel_NeBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits); if( Bid <= OOP_Sel_NeBuy ){ if( OOP_Sel_NeBuy > SL_FiSel ){ Need_Sel = Opened_Buy * OrdersNeed_Multi; for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ? if(IsTradeAllowed())TI_NeSel = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Sel++; } } } } } }// Nach OC2 doch NextBuy offen. //============================================================================================================= // ( O C 2 ) O P E N N E X T B U Y //============================================================================================================= //Wenn nach OC2 noch kein NextSel offen ist... if( neSH==false ){ // ...OOP für NextBuy-by-FirstSel berechnen: if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Buy_FiSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits); if( Ask >= OOP_Buy_FiSel ){ Need_Buy = Opened_Sel * OrdersNeed_Multi; for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ? if(IsTradeAllowed())TI_NeBuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++; } } } } }// Nach OC2 kein NextSel offen. //-----------------------------------------------------------------------------------------------------------*/ // Wenn nach OC2 doch NextSel offen ist... if( neSH==true ){ // ...OOP für NextBuy-by-NextSel berechnen: if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){ if(OrderSymbol()==Symbol()){ OOP_Buy_NeSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits); if( Bid >= OOP_Buy_NeSel ){ if( OOP_Buy_NeSel < SL_FiSel ){ Need_Buy = Opened_Sel * OrdersNeed_Multi; for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ? if(IsTradeAllowed())TI_NeBuy = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,Blue); while(IsTradeContextBusy())Sleep(slMS); Opened_Buy++; } } } } } }// Nach OC2 doch NextSel offen. //============================================================================================================= // N A C H O C 1 F I R S T S E L & F I R S T B U Y O F F E N //============================================================================================================ }// OC1 //============================================================================================================ // E A F U N K T I O N E N B E E N D E N //============================================================================================================= }// void OnTick()
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo.
Was gibts für Möglichkeiten, wenn es heißt IsTradeContextBusy() ?
Wenn er solange sleep() machen soll, sollte es dann heißen
In meinem EA soll ein Zähler mitzählen, wie viele Buy/Sell-Orders geöffnet wurden.
Sollte der nur mit zählen, wenn das Ticket>0 oder so ist?