Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1639

 
MakarFX #:
Entonces, ¿qué es lo que quieres?)

Ya lo hice. Tal vez un poco descuidado. Corrígeme. Calculo primero el precio del último, seguido del penúltimo.
Pero hay otro problema. Desde el control de todos los comentarios -ami en la esquina, todo el tiempo si no está involucrado cuelga un valor igual a DBL_MAX. Cómo eliminar, resaltado en rojo)

double MinOpenSell() // ищу ордер по самой низкой цене.
{
   double oldticket, UpPrice = DBL_MAX;
   
   for(int cnt=OrdersTotal(); cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderOpenPrice();
            if ( oldticket < UpPrice)
            {
               UpPrice = oldticket;
            }
         }
      }
   }
   return(UpPrice);
}
double FindPenultSellPrice() // а тут ищу предпоследний)
  {
   double oldticket, UpPrice = DBL_MAX;
   
   for(int cnt=OrdersTotal(); cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderOpenPrice();
            if ( oldticket < UpPrice && MinOpenSell()< oldticket)
            {
               UpPrice = oldticket;
            }
         }
      }
   }
   return(UpPrice);
}
 
makssub #:

Como el control es todo Comentario -ami en la esquina, todo el tiempo si no se activa el valor cuelga igual a DBL_MAX. Cómo eliminar, resaltado en rojo)

poner en algún lugar

if(price==DBL_MAX) price=0;

o es posible directamente en el comentario:

(price==DBL_MAX)?"нет ордера":DoubleToString(price,_Point)
 
Taras Slobodyanik #:

ponerlo en algún lugar

o puedes ponerlo directamente en los comentarios:

Me gusta la primera opción, ¿me puedes dar un ejemplo de cómo hacerlo correctamente?

 
makssub #:

Me gusta la primera opción, ¿me puedes dar un ejemplo de cómo hacerlo correctamente?

double com_price=0;

if(UpPrice==DBL_MAX) com_price=0;
else com_price=UpPrice;

Comment(com_price);
 
MakarFX #:

gracias, pero sigo sin entender cómo atornillarlo) ¿ninguna crítica a mi trabajo?

double FindPenultSellPrice() // а тут ищу предпоследний)
  {
   double oldticket, UpPrice = DBL_MAX;
   
   for(int cnt=OrdersTotal(); cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderOpenPrice();
            if ( oldticket < UpPrice && MinOpenSell()< oldticket)
            {
               UpPrice = oldticket;
            }
         }
      }
   }
   return(UpPrice);
}
 
makssub #:

gracias, pero sigo sin ver cómo meter la pata) ¿ninguna crítica a mi trabajo?

Muéstrame tu comentario.

 
MakarFX #:

Muéstrame tu comentario.

He publicado una foto antes. Y mi comentario no está declarado dentro de la función.

Comment( " Количество открытых ордеров: ", CountTrades(),"\n" " Количество открытых ордеров Sell: ", FindLastSell(), "\n" " Количество открытых ордеров Buy: ", FindLastBuy(),
                "\n" " Общее количество открытых ордеров: ", OrdersTotal(),"\n" " Профит первого ордера Sell: " , FirstProfitSell(),
                "\n" " Профит первого ордера Buy: " ,FirstProfitBuy(), "\n" " Предпоследний ордер Buy: ",FindPenultBuyPrice(), "\n" " Предпоследний ордер Sell: ",FindPenultSellPrice());  
 
makssub #:

Ya he publicado una foto antes. Y el comentario que tengo no está declarado dentro de la función.

double com_price=0;
if(FindPenultSellPrice()==DBL_MAX) com_price=0;
else com_price=FindPenultSellPrice();
Comment( " Количество открытых ордеров: ", CountTrades(),"\n Количество открытых ордеров Sell: ", FindLastSell(),
       "\n Количество открытых ордеров Buy: ", FindLastBuy(),"\n Общее количество открытых ордеров: ", OrdersTotal(),
       "\n Профит первого ордера Sell: " , FirstProfitSell(),"\n Профит первого ордера Buy: " ,FirstProfitBuy(),
       "\n Предпоследний ордер Buy: ",FindPenultBuyPrice(), "\n Предпоследний ордер Sell: ",com_price);  
 

¡¡¡Buenos días a todos!!!

Estoy escribiendo código para un EA para Trailing Stop de órdenes de grupo a partir del precio medio de una parrilla de órdenes.

No hay errores en el registro, pero la red de arrastre tampoco funciona. Aquí está el código, por favor, sugiera dónde está el error. ¡¡¡Gracias!!!

//+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
void ModifyOrders(int otype)
{
    double avg_price; 
    order_lots = 0;
    price = 0;
   
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
         {
            price += OrderOpenPrice() * OrderLots();
            order_lots += OrderLots() ;
         }
       }
    }
    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }
    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);
    if ((otype == OP_BUY || otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero)) 
    tp = NormalizeDouble (avg_price, Digits);
    for(int i = OrdersTotal()-1; i>=0; i--) 
    {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
           if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           {
               if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
                  Print("Ордера успешно модифицированы!");
                else Print("Ошибка модификации ордеров!");
                TrailingGroupOrder();
           }
       }
    }
}
//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
       if(OrderType() == OP_BUY && Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder)
        {
        if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)
         {
         if(OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder )*Point || OrderStopLoss() == 0)
          {
          if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopGroupOrder*Point, Digits), tp, 0))
                    Print("Ошибка модификации групповых ордеров на покупку!");
          }
         }
        }
        if(OrderType() == OP_SELL && NormalizeDouble(price / order_lots, Digits)- Ask > TrailingStopGroupOrder*Point)
         {
         if( NormalizeDouble(price / order_lots, Digits)- Ask > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)
           {
            if(OrderStopLoss() > Ask + (TrailingStep + TrailingStopGroupOrder)*Point || OrderStopLoss() == 0)
              {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStopGroupOrder*Point, Digits), tp, 0))
                    Print("Ошибка модификации групповых ордеров на продажу!");
              }
           }
         }
      } 
    }
}
 
Buenas tardes! ¿Dónde puedo encontrar el código mql4 para cambiar el idioma en la ventana de configuración del EA?
Razón de la queja: