MetaTrader 5 build 2121: Новое оформление тестера стратегий - страница 6

 
//+------------------------------------------------------------------+
//| СТИЛЬ И ДРЕВНЕЕ ФОРМАТИРОВАНИЕ МЕТАQUOTES                        |
//+------------------------------------------------------------------+
void OrderEntry(int direction)
  {
   if(direction==0 && tradenow==1 && cFunctions.TotalVolume(Ativo,0)<fatorMaxTrade && 
      flotbuy<=lotemaxtrade && flotbuy<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotbuy,ORDER_TYPE_BUY))
     {
      tradenow=0;
      if(TakeProfit>0){btp=Ask+(TakeProfit*Point());}else{btp=0;}
      if(StopLoss>0){bsl=Ask-(StopLoss*Point());}else{bsl=0;}
      if(trade.Buy(flotbuy,Ativo,Ask,bsl,btp,Commentt)){lastpriceBid=Ask;}
      flotbuy=NormalizeDouble(flotbuy*FatorMartingale,digitoslote);
     }

   if(direction==1 && tradenow==1 && cFunctions.TotalVolume(Ativo,1)<fatorMaxTrade &&
      flotsell<=lotemaxtrade && flotsell<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotsell,ORDER_TYPE_SELL))
     {
      tradenow=0;
      if(TakeProfit>0){stp=Bid-(TakeProfit*Point());}else{stp=0;}
      if(StopLoss>0){ssl=Bid+(StopLoss*Point());}else{ssl=0;}
      if(trade.Sell(flotsell,Ativo,Bid,ssl,stp,Commentt)){lastpriceAsk=Bid;}
      flotsell=NormalizeDouble(flotsell*FatorMartingale,digitoslote);
     }
  }


//+------------------------------------------------------------------+
//| СТИЛЬ И НОВОЕ ФОРМАТИРОВАНИЕ МЕТАQUOTES                          |
//+------------------------------------------------------------------+
void OrderEntry(int direction)
  {
   if(direction==0 && tradenow==1 && cFunctions.TotalVolume(Ativo,0)<fatorMaxTrade &&
      flotbuy<=lotemaxtrade && flotbuy<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotbuy,ORDER_TYPE_BUY))
     {
      tradenow=0;
      if(TakeProfit>0)
        {
         btp=Ask+(TakeProfit*Point());
        }
      else
        {
         btp=0;
        }
      if(StopLoss>0)
        {
         bsl=Ask-(StopLoss*Point());
        }
      else
        {
         bsl=0;
        }
      if(trade.Buy(flotbuy,Ativo,Ask,bsl,btp,Commentt))
        {
         lastpriceBid=Ask;
        }
      flotbuy=NormalizeDouble(flotbuy*FatorMartingale,digitoslote);
     }

   if(direction==1 && tradenow==1 && cFunctions.TotalVolume(Ativo,1)<fatorMaxTrade &&
      flotsell<=lotemaxtrade && flotsell<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotsell,ORDER_TYPE_SELL))
     {
      tradenow=0;
      if(TakeProfit>0)
        {
         stp=Bid-(TakeProfit*Point());
        }
      else
        {
         stp=0;
        }
      if(StopLoss>0)
        {
         ssl=Bid+(StopLoss*Point());
        }
      else
        {
         ssl=0;
        }
      if(trade.Sell(flotsell,Ativo,Bid,ssl,stp,Commentt))
        {
         lastpriceAsk=Bid;
        }
      flotsell=NormalizeDouble(flotsell*FatorMartingale,digitoslote);
     }
  }

Пожалуйста, верните старый стиль METAQUOTES или хотя бы убедитесь, что коды, написанные в одной строке, не отформатированы.

Пример:

Старая модель и я считаю ее идеальной моделью для однострочных кодов.

      if(TakeProfit>0){btp=Ask+(TakeProfit*Point());}else{btp=0;}
      if(StopLoss>0){bsl=Ask-(StopLoss*Point());}else{bsl=0;}



Новый стиль, который портит всех моих роботов.

      if(TakeProfit>0)
        {
         btp=Ask+(TakeProfit*Point());
        }
      else
        {
         btp=0;
        }
      if(StopLoss>0)
        {
         bsl=Ask-(StopLoss*Point());
        }
      else
        {
         bsl=0;
        }
 
Joao Luiz Sa Marchioro:

Пожалуйста, верните старый стиль METAQUOTES или хотя бы убедитесь, что коды, написанные в одной строке, не отформатированы.

используйте стиль Pico , он очень похож на то что Вы ищете

но стиль Pico  делит оператор if - else на 2 строки если используете { }

Ваш код, где используете { }

if(TakeProfit > 0) btp = Ask + (TakeProfit * Point());}
else {btp = 0;}

если не пользоваться { }

if(TakeProfit > 0) btp = Ask + (TakeProfit * Point()); else btp = 0;
 

2133  вот такой прикол


 
Igor Makanu:

используйте стиль Pico , он очень похож на то что Вы ищете

но стиль Pico  делит оператор if - else на 2 строки если используете { }

Ваш код, где используете { }

если не пользоваться { }

Да !!! сделал полный анализ доступных стилей и выбрал PICO и RATLIFF

ПИКО самая компактная.

RATLIFF самый умный.

Но для METAQUOTES абсурдно менять стиль, который использовался годами. Это нарушит жизнь всех пользователей. Безответственное изменение. Несколько месяцев назад я испортил что-то в их стиле, я думал, что двигаться было неправильно, несмотря на небольшие изменения, но теперь они облажались.

 
Vladimir Pastushak:

2133 uma piada


Да !!! мы знаем, что это бета-версия, но если что-то было верно в старых версиях и теперь изменилось в бета-версии, то, скорее всего, с этими изменениями. Лучше пожаловаться сейчас, чтобы убедиться, что все идет правильно

 
Есть два предложения, которые я хотел бы, чтобы METAQUOTES принял.
1) Установите замок на график, чтобы предотвратить закрытие используемого графика вместе с ненужными графиками при использовании CTRL-F4.

2) Разрешить пользователю определять количество ядер для использования в облачной сети. Например: я мог бы ограничить использование до 50 ядер в CLOUD NETWORK только для того, чтобы помочь и увеличить скорость оптимизации вместе со 100 ядрами, которые у меня уже есть на моих серверах. Таким образом, мне не пришлось бы покупать еще один или два сервера.

В настоящее время я не могу использовать CLOUD NETWORK, потому что это делает мои серверы бесполезными и ценность оптимизации становится высокой.
 
После запуска тестирования сторонним конфигом сбрасывается дефолтный конфиг. Нет настроек тестирования при обычном запуске терминала.
 
MetaQuotes Software Corp.:

Документация устарела в этом случае.

Сейчас ради эффективности строки преаллоцируются больше запрашиваемого, так как в подавляющем большинстве случаев они наращиваются последующими операциями.

С этим теперь понятно.
Но как не меняю длину строки, результат StringBufferLen остаётся всегда 260.

string str; 
StringInit(str, 1, '_'); 
Print("str = ", str); 
Print("str = ", str, ": StringBufferLen(str) = ", StringBufferLen(str));
2019.09.03 03:30:47.490 Test    str = _
2019.09.03 03:30:47.490 Test    str = _: StringBufferLen(str) = 260


string str; 
StringInit(str,100,'_'); 
Print("str = ",str); 
Print("str = ",str,": StringBufferLen(str) = ", StringBufferLen(str));
2019.09.03 03:32:57.789 Test    str = ____________________________________________________________________________________________________
2019.09.03 03:32:57.789 Test    str = ____________________________________________________________________________________________________: StringBufferLen(str) = 260
 
MetaQuotes Software Corp.:

Документация устарела в этом случае.

Сейчас ради эффективности строки преаллоцируются больше запрашиваемого, так как в подавляющем большинстве случаев они наращиваются последующими операциями.

А разве в данном случае 

void OnStart() 
{ 
        string s1; 
        StringInit(s1,100,'_'); 
        const string s2 = s1;
        Print( StringBufferLen( s2 ));
}

s2 может нараститься в дальнейшем?

Результат:   260

Ожидалось: 100 или 0

 

Добавил в тест StringLen, и инициализировал строку по другому.
В документации одно, по факту совсем другое поведение.
И буфер в этом случае показывает 0 а не 260.
В общем или с инициализацией строк проблемы. Или StringBufferLen бажит.
 

 string str = "_"; 

 Print("str = ", str);
 Print("str = ", str, ": StringBufferLen(str) = ", StringBufferLen(str), " StringLen(str) = ", StringLen(str)); 
   
 str = "__________";  

 Print("str = ", str, ": StringBufferLen(str) = ", StringBufferLen(str), " StringLen(str) = ", StringLen(str));
2019.09.03 03:55:45.145 Test    str = _
2019.09.03 03:55:45.145 Test    str = _: StringBufferLen(str) = 0 StringLen(str) = 1
2019.09.03 03:55:45.145 Test    str = __________: StringBufferLen(str) = 0 StringLen(str) = 10
Причина обращения: