Questions des débutants MQL5 MT5 MetaTrader 5 - page 864

 
Vladimir Karputov:

Vous devez passer un PRIX à la fonction, autour duquel les ordres en attente seront recherchés.

En plus de ce prix, vous devez passer deux variables:

J'abandonne, avez-vous un conseiller expert prêt à l'emploi qui imprime les prix de ces ordres en attente que j'ai montrés avec des flèches dans la capture d'écran ?

Je ne comprends pas pourquoi cette fonction fonctionne sans passer de prix.

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:

J'abandonne, n'avez-vous pas un conseiller expert prêt à l'emploi qui produit une impression des prix de ces ordres que j'ai montrés avec des flèches dans la capture d'écran ?

Je vous ai donné une fonction toute prête. Vous devez y passer :

  • le prix actuel
  • une variable dans laquelle le prix du prochain Buy stop sera écrit
  • une variable dans laquelle le prix du prochain Sell stop sera écrit

Qu'est-ce que vous ne comprenez pas ?

 
Je vois. Apparemment, ce n'est pas mon truc.
 
ilyav:

J'abandonne, n'avez-vous pas un conseiller expert prêt à l'emploi qui produirait une impression des prix de ces ordres en attente que j'ai montrés avec des flèches dans la capture d'écran ?

Je ne comprends pas pourquoi cette fonction fonctionne sans envoyer de prix.

? ??

Vous montrez un code inapplicable - du moins il ne compile pas - parce qu'il a une mauvaise correspondance entre les parenthèses ouvrantes et fermantes. Et deuxièmement = logique brisée.

 
Vladimir Karputov:

Vous montrez un code inapplicable - du moins, il ne compile pas - parce qu'il présente une mauvaise correspondance entre les parenthèses ouvrantes et fermantes. Et deuxièmement = logique brisée.

J'ai réécrit votre code.

Mais il génère des ordres en attente très éloignés du prix.

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:

J'ai réécrit votre code.

Mais il donne des pendentifs plus éloignés du prix

Les impressions doivent venir après la boucleOrdersTotal.

Et qu'est-ce que le prix1 ? Comment l'obtenir ?
 

Et dans cette version, il imprime tous les disponibles

//+------------------------------------------------------------------+
//| 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:

Les impressions doivent venir après la boucleOrdersTotal.

Et qu'est-ce que le prix1 ? Comment l'obtenir ?
//|  Выбран режим торговли 3 ? Тогда торгуем его    

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

        {

        price1=m_symbol.Bid();

        TradeMode3();

Et dans l'en-tête de l'EA j'ai écrit

double price1;
double price_nearest_buy_stop;
double price_nearest_sell_stop;

Si tout est correct, voici la variante finale

//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+

Tout semble fonctionner. Dites-moi s'il y a des erreurs. Merci beaucoup.

 

Veuillez m'aider à résoudre ce problème.

Supposons que j'ai un cadre temporel actuel M1, j'ai besoin de connaître l'heure de la dernière barre N de la barre donnée de n'importe quelle TF supérieure, l'heure peut ne pas être de 60 minutes, mais de 45 ou toute autre heure, et en plus il y a les week-ends, j'ai besoin de connaître la date de la dernière barre de la TF actuelle de n'importe quelle TF.

Comment le mettre en œuvre ?

 
ilyav:

Et dans l'en-tête du conseiller, il est dit que

Et si tout est correct, voici la variante finale

Tout semble fonctionner. Dites-moi s'il y a des erreurs. Merci beaucoup.

Avant la ligne

price1=m_symbol.Bid();

vous devez mettre à jour les citations :

if(!RefreshRates())
   return;
Raison: