Lösungen für IsTradeContextBusy() ?

 

Hallo.


Was gibts für Möglichkeiten, wenn es heißt IsTradeContextBusy() ?


Wenn er solange sleep() machen soll, sollte es dann heißen

if( IsTradeContextBusy() )sleep(slMS)

oder

while( IsTradeContextBusy() )sleep(slMS)

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?

 
Was willst du machen?
 

Jetzt ist Wochenende - alles ist zu und die Server akzeptieren keine neuen Aufträge - kann das sein?

Die Forexsession ist von So. 17:00 NY-Zeit bis Fr. 17:00 NY-Zeit. Schau mal nach beim Broker wie er das regelt - kann auch anders sein!

 

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++;
Dateien:
 

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()
Dateien:
Grund der Beschwerde: