Expert Advisors: Cidomo

 

Cidomo:

Der Expert Advisor arbeitet mit den Pending-Orders Buy-Stop und Sell-Stop

Cidomo

Autor: Vladimir Karputov

 
Wo ist die ea

 
Habibur Rohman :
Wo ist die ea

Der Berater ist nirgendwo hingegangen. Der Berater ist an seinem Platz:


 

Ich möchte den Expert Advisor für mich selbst verfeinern, aber dazu muss ich eine Menge Dinge verstehen! (Ich verstehe eine Menge Dinge nicht). Ich werde meine Fragen in Teilen stellen.

Es gibt einen Code:

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {
      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }
      if(m_need_delete_sell_stop)
        {
         if(count_sell_stops>0)
           {
            DeleteOrders(ORDER_TYPE_SELL_STOP);
            return;
           }
         else
           {
            m_need_delete_sell_stop=false;
            return;
           }
        }
     }

Was macht er?

 
Sysmart:

Ich möchte den Expert Advisor für mich selbst verfeinern, aber dazu muss ich eine Menge Dinge verstehen! (Ich verstehe eine Menge Dinge nicht). Ich werde Fragen in Teilen stellen.

Es gibt einen Code:

Was bewirkt er?

Wenn das Flag'm_need_delete_buy_stop' (' pending buy stop orders ') oder m_need_delete_sell_stop' ('need to delete pending sell stop orders') gesetzt ist

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {

mit der Löschung fortfahren.


Es wird berechnet, wie viele ausstehende Orders der Expert Advisor im Moment platziert hat:

      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);


Wenn 'es ist notwendig, ausstehende Kaufstopp-Aufträge zu löschen':

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }

und die Anzahl der platzierten Kaufstopps größer als Null ist ('count_buy_stops') - löschen Sie sie. Wenn die Anzahl gleich Null ist - setzen Sie das Flag'm_need_delete_buy_stop' zurück.


Das Gleiche gilt, wenn 'es notwendig ist, ausstehende Verkaufsstopps zu löschen' ...

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

Ich danke Ihnen!

Ein weiterer Code, den ich nicht verstehe:

//--- wir arbeiten nur zum Zeitpunkt der Geburt eines neuen Balkens
   static datetime PrevBars=0;
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
 
Sysmart:

Ich danke Ihnen!

Noch ein Code, den ich nicht verstehe:

Dieser Code macht folgendes: Er funktioniert nur einmal - wenn ein neuer Balken geboren wird.

 
Vladimir Karputov:

Dieser Code bewirkt Folgendes: Er funktioniert nur einmal - in dem Moment, in dem ein neuer Balken geboren wird.

Ich danke Ihnen. Das ist es, was ich am Ende verstanden habe:

//--- wir arbeiten nur zum Zeitpunkt der Geburt eines neuen Balkens
   // Merken Sie sich den Zeitpunkt der Öffnung des letzten Taktes in der statischen Variablen
   static datetime PrevBars=0;
   // aktuelle Zeit (iTime - gibt den Wert der Öffnungszeit des Balkens zurück)
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   // wenn die Zeit anders ist, weil die Bedingung abgelaufen ist if(time_0==PrevBars)
   // Merken Sie sich die Zeit
   PrevBars=time_0;
   // wenn die Kurse nicht aktualisiert wurden, wird der Zeitpunkt der letzten Balkenöffnung zurückgesetzt
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
   // Wenn Sie diesen Ort erreicht haben, ist das keine neue Bar.

Ohne deinen Link hätte ich es nicht herausgefunden)

 
Sysmart:

Ich danke Ihnen. Am Ende habe ich Folgendes festgestellt:

Ohne Ihren Link wäre ich nicht darauf gekommen)

Kleine Korrektur. Dies ist

 // Wenn Sie diesen Ort erreicht haben, ist das keine neue Bar.

ist falsch. Es ist richtig:

 // Sie haben diese Stelle erreicht, also ist die Bar neu.
 

Übrigens, unten steht der Code:

   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }

Ich glaube, er dupliziert teilweise den oben besprochenen Code:

   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }

Ich denke, er kann gelöscht werden

 
Vladimir Karputov:

Eine kleine Korrektur. Dies ist

ist falsch. Es ist richtig:

Danke)!