Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 864

 
Vladimir Karputov:

Sie müssen der Funktion einen PRICE übergeben, um den herum die ausstehenden Aufträge gesucht werden sollen.

Zusätzlich zu diesem Preis müssen Sie zwei Variablen angeben:

Ich gebe auf, haben Sie eine fertige Expert Advisor, dass die Preise dieser schwebenden Aufträge druckt ich mit Pfeilen im Screenshot gezeigt?

Ich verstehe nicht, warum diese Funktion ohne Übergabe eines Preises funktioniert.

int TotalGridBuyOrders=0;
         Print(__FUNCTION__);
         for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
            if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
               if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic && m_order.OrderType()==ORDER_TYPE_BUY_STOP)
                  TotalGridBuyOrders++;
         Print("Количество buy ордеров grid ",TotalGridBuyOrders);
         if(TotalGridBuyOrders>=1)
           {
            grid_buy_price_memory=m_order.PriceOpen();
            Print("Цена ближайшего buy grid ордера: ",grid_buy_price_memory);

???

 
ilyav:

Ich gebe auf, haben Sie nicht eine fertige Expert Advisor, dass ein Druck der Preise der Aufträge, die ich mit Pfeilen in den Screenshot gezeigt ausgibt?

Ich habe Ihnen eine vorgefertigte Funktion gegeben. Sie müssen darin bestehen:

  • der aktuelle Preis
  • eine Variable, in die der Preis des nächsten Buy-Stops geschrieben wird
  • eine Variable, in die der Preis des nächsten Verkaufsstopps geschrieben wird

Was verstehst du nicht?

 
Ich verstehe. Offenbar ist das nicht mein Ding.
 
ilyav:

Ich gebe auf, haben Sie nicht eine fertige Expert Advisor, die einen Druck der Preise dieser schwebenden Aufträge, die ich mit Pfeilen im Screenshot gezeigt ausgeben würde?

Ich verstehe nicht, warum diese Funktion funktioniert, ohne Preise zu senden.

???

Der von Ihnen gezeigte Code ist nicht funktionsfähig - zumindest lässt er sich nicht kompilieren -, weil die öffnenden und schließenden Klammern nicht übereinstimmen. Und zweitens = gebrochene Logik.

 
Vladimir Karputov:

Der von Ihnen gezeigte Code ist nicht funktionsfähig - zumindest lässt er sich nicht kompilieren -, weil die öffnenden und schließenden Klammern nicht übereinstimmen. Und zweitens = gebrochene Logik.

Ich habe Ihren Code umgeschrieben.

Aber es erzeugt schwebende Aufträge, die weit vom Preis entfernt sind

void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 
                 }
               Print("buy : ",price_nearest_buy_stop);
                return;  
              }
              
               
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print("sell : ",price_nearest_sell_stop);
                 return;
              }
           }
  }
  
 
 
ilyav:

Ich habe Ihren Code umgeschrieben.

Aber es gibt Anhänger, die weiter vom Preis entfernt sind

Die Ausdrucke sollten nach der SchleifeOrdersTotal erfolgen.

Und was ist Preis1? Wie bekommen Sie es?
 

Und in dieser Version druckt es alle verfügbaren

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }
                 Print("buy : ",price_nearest_buy_stop);
                 
              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print("sell : ",price_nearest_sell_stop);
                 
              }
           }
  }
 
Vladimir Karputov:

Die Ausdrucke müssen nach der SchleifeOrdersTotal erfolgen.

Und was ist Preis1? Wie bekommen Sie es?
//|  Выбран режим торговли 3 ? Тогда торгуем его    

      if(РежимТорговли==3)

        {

        price1=m_symbol.Bid();

        TradeMode3();

Und in der Kopfzeile des EAs habe ich geschrieben

double price1;
double price_nearest_buy_stop;
double price_nearest_sell_stop;

Wenn alles korrekt ist, sieht die endgültige Variante so aus

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0;
   price_nearest_sell_stop = 0;
   double diff_buy_stop    = DBL_MAX;
   double diff_sell_stop   = DBL_MAX;

   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
              {
               if(m_order.PriceOpen()-price1>0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }

              }
            else if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
              {
               if(price1-m_order.PriceOpen()>0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }

              }

           }
   Print("Цена ближнего SELL_STOP : ",price_nearest_sell_stop);
   Print("Цена ближнего BUY_STOP : ",price_nearest_buy_stop);
  }
//+------------------------------------------------------------------+

Alles scheint zu funktionieren. Sagen Sie mir, ob es irgendwelche Fehler gibt. Ich danke Ihnen vielmals.

 

Bitte helfen Sie mir, dieses Problem zu lösen.

Angenommen, ich habe einen aktuellen Zeitrahmen M1, muss ich die Zeit des letzten Balkens N des gegebenen Balkens eines beliebigen oberen TF wissen, die Stunde kann nicht 60 Minuten, sondern 45 oder eine andere Zeit sein, und außerdem gibt es Wochenenden, ich muss das Datum des letzten Balkens des aktuellen TF von jedem TF wissen.

Wie wird sie umgesetzt?

 
ilyav:

Und in der Kopfzeile des Beraters heißt es

Und wenn alles richtig ist, ist hier die endgültige Variante

Alles scheint zu funktionieren. Sagen Sie mir, ob es Fehler gibt. Ich danke Ihnen vielmals.

Vor der Linie

price1=m_symbol.Bid();

Sie müssen die Zitate aktualisieren:

if(!RefreshRates())
   return;
Grund der Beschwerde: