Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1639

 
MakarFX #:
Так что тебе все таки надо?)

Я уже сделал. Может не много коряво. Поправьте меня. Сначала вычисляю цену последнего, а следом предпоследнего.
Но есть еще одна проблема. Так как контролю все Comment -ами в углу, все время если не задействован висит значение равное DBL_MAX. Как убрать, выделили красным)

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 #:

Так как контролю все Comment -ами в углу, все время если не задействован висит значение равное DBL_MAX. Как убрать, выделили красным)

поставить где-нибудь

if(price==DBL_MAX) price=0;

или можно прям в комментарии:

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

поставить где-нибудь

или можно прям в комментарии:

первый вариант нравиться, можно пример как это правильно сделать.

 
makssub #:

первый вариант нравиться, можно пример как это правильно сделать.

double com_price=0;

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

Comment(com_price);
 
MakarFX #:

спасибо, но все равно не понял, как это прикрутить) критики по моей работе не будет?

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 #:

спасибо, но все равно не понял, как это прикрутить) критики по моей работе не будет?

Покажи свой коммент

 
MakarFX #:

Покажи свой коммент

Фото я уже до этого выкладывал. А comment  у меня объявлен не внутри функции.

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

Фото я уже до этого выкладывал. А comment  у меня объявлен не внутри функции.

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);  
 

Всем доброго времени суток!!!

Пишу код для советника для Трейлинг-Стоп групповых ордеров от средней цены сетки ордеров.

Ошибок в журнале нет но и трал не работает. Вот код прошу подсказать где ошибка. Спасибо!!!

//+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
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("Ошибка модификации групповых ордеров на продажу!");
              }
           }
         }
      } 
    }
}
 
Добрый день! Где глянуть код mql4, что изменять язык в окне настроек советника?
Причина обращения: