0
Причина в том, что Вы неправильно используете функцию Comment, вернее формат написания содержимого.
Вот так будет правильно:

   Comment("\n Bulls_00  = "+IntegerToString(bulls)
          +"\n Bears_00 = "+IntegerToString(bears)
          +"\n Bulls_1  = "+IntegerToString(bulls1)
          +"\n Bears_1  = "+IntegerToString(bears1)
          +"\n Bulls_2  = "+IntegerToString(bulls2)
          +"\n Bears_2  = "+IntegerToString(bears2)
          +"\n Bulls_3  = "+IntegerToString(bulls3)
          +"\n Bears_3  = "+IntegerToString(bears3)
          +"\n Bulls_4  = "+IntegerToString(bulls4)
          +"\n Bears_4  = "+IntegerToString(bears4)
          +"\n Bulls_5  = "+IntegerToString(bulls5)
          +"\n Bears_5  = "+IntegerToString(bears5)
          +"\n Bulls_6  = "+IntegerToString(bulls6)
          +"\n Bears_6  = "+IntegerToString(bears6)
          +"\n Bulls_7  = "+IntegerToString(bulls7)
          +"\n Bears_7  = "+IntegerToString(bears7)
          +"\n Bulls_8  = "+IntegerToString(bulls8)
          +"\n Bears_8  = "+IntegerToString(bears8)
          +"\n Bulls_9  = "+IntegerToString(bulls9)
          +"\n Bears_9  = "+IntegerToString(bears9)
          +"\n Bulls_10 = "+IntegerToString(bulls10)
          +"\n Bears_10 = "+IntegerToString(bears10)
          +"\n Bulls_11 = "+IntegerToString(bulls11)
          +"\n Bears_11 = "+IntegerToString(bears11));
avatar

Andrju81

  • 27 июня 2020, 22:04
0
Почему нет!?.. Я использую подобный метод в своем советнике с прошлого года мая месяца. Разница лишь в том, что у Вас все завязано на локировании, а я же использую просадку, точнее процент просадки при которой будут частично закрываться минимальным лотом самые дальние позиции пока процент просадки не станет меньше установленного. Я даже написал индикатор для себя прежде чем внедрить этот метод в советник.
Вот так выглядит этот индикатор:


На первом скрине результат просадки в 60% и ее разруливание, 5 июня на счете прибыль за текущий месяц составляла где-то -35%(от баланса на начало месяца), в итоге сегодня эта прибыль равна +23.26%.
Второй скрин для наглядности при наличии открытых позиций.
А после Ваших слов такого точно не будет ни здесь и ни в инете.
avatar

Andrju81

  • 27 июня 2020, 20:18
+3
Вот мой готовый вариант — www.opentraders.ru/downloads/2705/
Без проверки. Но думаю будет все ОК.:) 
avatar

Andrju81

  • 27 июня 2020, 00:21
0
Сделал упрощенный вариант без сигналов и сдвига по времени.
Пробуйте — www.opentraders.ru/downloads/2704/
На счет сигналов напишите подробнее при каких условиях и как часто должен сигналить индикатор.
avatar

Andrju81

  • 26 июня 2020, 22:00
0
*hi*  Обращайтесь если что, поможем чем сможем.
avatar

Andrju81

  • 26 июня 2020, 07:17
0
*hi*  Это должны были Вы сами расписать в задании, чтобы не оставалось лишних вопросов и непонимания со стороны программиста. Чем точнее расписано задание, тем быстрее его будет выполнить, если конечно это легко реализуется как в Вашем случае.
avatar

Andrju81

  • 26 июня 2020, 05:17
0
Андрей, человек наверно имеет ввиду ближайшие уровни цен открытия дневных баров сверху и снизу от цены открытия текущего дня, а не хай и лоу дня. Например так — текущий день 26 число открылся по цене 100, 25-го по цене 200, 24-го по цене 150, 23-го по цене 50, 22-го по цене 80, следовательно ближайший уровень сверху будет на цене 200, а ближайший снизу на цене 50. Так я вижу пример на скриншоте.
avatar

Andrju81

  • 26 июня 2020, 02:35
+2
Вот Вам четыре функции для упрощения создания трала группы ордеров от безубытка:

double BuyOrderLossLess() //--- Расчет безубтка для ордеров на покупку
   {
    double boll;
    int i;
    double l=0,pl=0;
    double tv=MarketInfo(Symbol(), MODE_TICKVALUE);
    for(i=0;i<OrdersTotal();i++)
      {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
          if(OrderType()==OP_BUY)
            {
             l=l+OrderLots();
             pl+=(OrderOpenPrice()-NormalizeDouble((OrderSwap()+OrderCommission())/OrderLots()/tv*Point,Digits))*OrderLots();
            }
         }
      }
    if(l>0 && pl>0) boll=NormalizeDouble(pl/l,Digits); else boll=0;
    return(boll);
   }

double SellOrderLossLess() //--- Расчет безубытка для ордеров на продажу
   {
    double soll;
    int i;
    double l=0,pl=0;
    double tv=MarketInfo(Symbol(), MODE_TICKVALUE);
    for(i=0;i<OrdersTotal();i++)
      {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
          if(OrderType()==OP_SELL)
            {
             l=l+OrderLots();
             pl+=(OrderOpenPrice()+NormalizeDouble((OrderSwap()+OrderCommission())/OrderLots()/tv*Point,Digits))*OrderLots();
            }
         }
      }
    if(l>0 && pl>0) soll=NormalizeDouble(pl/l,Digits); else soll=0;
    return(soll);
   }

bool SetBuyOrderStopLoss(double sl)  //--- Установка SL для открытых ордеров на покупку
   {
    bool sbosl=false;
    int i;
    for(i=0;i<OrdersTotal();i++)
      {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
          if(OrderType()==OP_BUY)
            {
             if(OrderStopLoss()!=sl && OrderStopLoss()<sl) 
             if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0)) sbosl=true; 
             else { Print(OrderTicket(),": BUY SL OrderModify failed with error #",GetLastError()); }
            }
         }     
      }
    return(sbosl);
   }

bool SetSellOrderStopLoss(double sl)  //--- Установка SL для открытых ордеров на продажу
   {
    bool ssosl=false;
    int i;
    for(i=0;i<OrdersTotal();i++)
      {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
          if(OrderType()==OP_SELL)
            {
             if(OrderStopLoss()!=sl && ((OrderStopLoss()>sl && OrderStopLoss()!=0) || OrderStopLoss()==0)) 
             if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0)) ssosl=true; 
             else { Print(OrderTicket(),": SELL SL OrderModify failed with error #",GetLastError()); }
            }
         }     
      }
    return(ssosl);
   }


Надеюсь Вам не составит труда применить их в своем коде.
avatar

Andrju81

  • 25 июня 2020, 23:00
0
Сделать можно все что угодно! Вопрос лишь в том на сколько сложно это сделать и сколько времени придется на это потратить.
Пишите новое тех задание с полным описанием и желательно скриншоты с примерами если присутствует индикация или вывод данных, так как этот заказ выполнен в полном объеме. А там будет видно.
avatar

Andrju81

  • 25 июня 2020, 22:06
0
Исправил, пробуйте — www.opentraders.ru/downloads/2657/
avatar

Andrju81

  • 12 мая 2020, 20:23
0
Андрей, а не проще так?
//+------------------------------------------------------------------+
//|                                             NumberOfOpenPars.mq4 |
//|                     Copyright © 2020, Andrei Vladimirovich Nosar |
//|                                            mr.andrju81@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Andrei Vladimirovich Nosar"
#property link      "mr.andrju81@gmail.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//--- input parameters
input int      Magic=-1;

//------- Глобальные переменные индикатора ------------------------------------+
string    sotOS[];             // пары ордеров   OrderSymbol()
string    sotS[];             // пары
bool   sotFirstRun=True;     // Флаг первого прогона
//+----------------------------------------------------------------------------+
//|  Запоминает текущие операции в массиве.                                    |
//+----------------------------------------------------------------------------+
void MemCurrOP() 
{
  int i, k=OrdersTotal();

  ArrayResize(sotOS, k);
  for (i=0; i<k; i++) 
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber()==Magic) 
    {
      sotOS[i]=OrderSymbol();
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Выполняет поиск элемента массива по значению                              |
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
bool ArraySearchStr(string& m[], string e) 
{
  for (int i=0; i<ArraySize(m); i++) 
  {
    if (m[i]==e) return(true);
  }
  return(false);
}

//+----------------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  sotFirstRun=True;     // Флаг первого прогона
  Comment("");
  start();
   
//---
   return(INIT_SUCCEEDED);
  }
//+----------------------------------------------------------------------------+
//|  Expert deinitialization function                                          |
//+----------------------------------------------------------------------------+
void deinit() { Comment(""); }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() 
{
   if (sotFirstRun) { MemCurrOP(); sotFirstRun=False; }
   ArrayResize(sotS,0);
   int i, k=OrdersTotal();
  for (i=0; i<k; i++) 
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber()==Magic) 
    {
      if(ArraySearchStr(sotOS,OrderSymbol())==true && ArraySearchStr(sotS,OrderSymbol())==false)
         {
            string para=OrderSymbol();
            int sizePara = ArraySize(sotS); ArrayResize(sotS, sizePara+1);
            sotS[sizePara] = para;
         }
    }
  }
   Comment("Количество открытых пар = "+IntegerToString(ArraySize(sotS)));
 MemCurrOP();
}
//+------------------------------------------------------------------+
avatar

Andrju81

  • 10 мая 2020, 14:32
0
Пожалуйста, пробуйте — www.opentraders.ru/downloads/2655/
avatar

Andrju81

  • 10 мая 2020, 14:20
0
Пожалуйста! А исходники Вам тоже не помогут если вы не знакомы с программированием на MQL4, т.к. это декомпилированная версия с исправлениями и дополнениями. А если знакомы с программированием, то и сами могли бы все сделать.
avatar

Andrju81

  • 25 марта 2020, 18:16
0
Держите — www.opentraders.ru/downloads/2604/
Будет работать еще долго!*hi* 
avatar

Andrju81

  • 25 марта 2020, 00:45
0
В том-то и дело, что по условиям могут оставить только 150$, и не важно сколько ты заработал, хоть 10000$ будет на счету все равно получишь только 150$ и то только если выполнил оборот в 100 стандартных лотов. Я же и одного процента не отработал, а на счету уже 266$, которые по окончании действия бонуса попросту спишут. Время потрачено впустую. Но я делал это не ради прибыли, а показать пример того, что не стоит тратить свое время на такие бонусы, и уж тем более с такими условиями, это утопия и несбыточные надежды.
avatar

Andrju81

  • 16 апреля 2019, 20:56
0
Ну вот и началось веселье! Был бонус без срока окончания, а теперь срок окончания 9 июля, и года даже не дали на отработку.


Спрашивается для чего такие бонусы, тот же демо счет — вроде деньги на счету есть, а вывести нельзя.*nb* 
avatar

Andrju81

  • 15 апреля 2019, 14:45
0
Это основное условие для отработки, ничего в этом забавного нет.
Самое забавное будет когда Вы это условие выполните на 100% и захотите вывести заработанные средства, вот тут-то и будет самое «веселье»!!!:D 
avatar

Andrju81

  • 27 декабря 2018, 22:53
Начать торговлю с Альпари