Ошибки, баги, вопросы - страница 2414

 
Andrey Pogoreltsev:

Если в мультивалютнике использовать CSymbolInfo, который в момент инициализации методом Name вызывает:

То во время тестирования для символа USDCAD будут выдаваться ошибки:

Какая валюта депозита при тестировании?

 
Slava:

Какая валюта депозита при тестировании?

USD. Пара тестирования EURUSD M1. Я попробую воспроизвести в голом советнике. Пока не получилось. Но именно данные методы приводили к ошибкам в логах и именно по одной паре.

 
Slava:

Какая валюта депозита при тестировании?

Вообщем воспроизвел и нашел особенность. Прикрепил настройки тестирования.

Сам код голого советника:

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


Теперь "особенность", как и обещал) Если в Name() использовать так:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

то ошибка будет. А вот так ошибка пропадает:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);


PS. У меня на центовом пары называются с приставкой ".m". Пример работает и на обычных парах.

Файлы:
test.png  11 kb
 
Andrey Pogoreltsev:

Вообщем воспроизвел и нашел особенность. Прикрепил настройки тестирования.


Спасибо. Разберёмся

 

Баг MT5 build 2007. В режиме оптимизация входная строка обрезается до 63 символов.

Код для теста:

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


Одиночный прогон все нормально: !!! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Ставим оптимизацию по параметру fortestopt, заходим в лог агента: !!! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

 

Кто подскажет..

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

 

Баг компилятора.  Выдаёт ошибку неоднозначности, хотя тут всё однозначно.  Должен вызываться первый метод как наиболее подходящий.   В С++ проверено.

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

Баг MT5 build 2007. В режиме оптимизация входная строка обрезается до 63 символов.

Код для теста:


Одиночный прогон все нормально: !!! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Ставим оптимизацию по параметру fortestopt, заходим в лог агента: !!! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

То что и при одиночном тестировании не обрезается до 63 символов, это просто случайность.

Длина входного параметра типа string не должна превышать 63 символа (64 вместе с нуль-терминатором)

 
Slava:

То что и при одиночном тестировании не обрезается до 63 символов, это просто случайность.

Длина входного параметра типа string не должна превышать 63 символа (64 вместе с нуль-терминатором)

Это какое-то драконовское ограничение. Какие обоснования по сегодняшним временам? А как удобно задавать кластеры из кучи символов? Плодить десяток разных параметров? Это удобно?

 
Slava:

То что и при одиночном тестировании не обрезается до 63 символов, это просто случайность.

Длина входного параметра типа string не должна превышать 63 символа (64 вместе с нуль-терминатором)

Это ограничение не уместно, мы же в строку записываем не цену килограмма картошки.

Причина обращения: