Особенности языка mql5, тонкости и приёмы работы - страница 37

 

HistorySelect - очень дорогая функция. Но HistorySelectByPosition - еще дороже.

Например, если нужно найти первую сделку закрытой позиции, то можно действовать двумя способами

  1. Сделать HistorySelectByPosition и затем найти нужную сделку из полученного небольшого списка. Но список этот формируется следующим образом Сначала формируется ВСЯ история (равносильно вызову "бесконечного" HistorySelect). Затем идет ПОЛНЫЙ цикл for по этому списку и выбираются только те сделки, которые имеют соответствующий POSITION_IDENTIFIER.
  2. Сделать HistorySelect (можно "бесконечно", но лучше воспользоваться интервалом, если известен), затем в цикле for сделать break, когда дойдешь до соответствующего DEAL_ENTRY.

Второй пункт может быть значительно дешевле. Но точно не дороже.

Вызывать в тестере HistorySelect*-функции - почти уничтожение вычислительных ресурсов. Поэтому нужно всегда стараться сводить их число к минимуму. Особенно, HistorySelectByPosition.

 
Для Hedge-счетов в тестере
Проверка активации у обычных лимитников на следующем тике.
Это значит, что результат тестера очень сильно зависит от типа счета.
 
fxsaber:
Для Hedge-счетов в тестереЭто значит, что результат тестера очень сильно зависит от типа счета.


Как выяснилось в одной из соседних веток результат тестера зависит даже от того, на локальном агенте происходит тестирование или на одном из агентов распределенной сети.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Yury Kirillov:


Как выяснилось в одной из соседних веток результат тестера зависит даже от того, на локальном агенте происходит тестирование или на одном из агентов распределенной сети.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Вы описали БАГ, что не в контексте данной ветки. Разность исполнения лимитников  - официальная позиция.
 
fxsaber:
Вы описали БАГ, что не в контексте данной ветки. Разность исполнения лимитников  - официальная позиция.

Согласен, хотел только отметить, что тестер становится всё более непредсказуемым инструментом.
 
Yury Kirillov:

Согласен, хотел только отметить, что тестер становится всё более непредсказуемым инструментом.
Предсказуемым он никогда не был, к сожалению.
 
fxsaber:
Это значит, что результат тестера очень сильно зависит от типа счета.
Это касается только биржевых инструментов.
 
Все стандартные типы приводятся друг к другу
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Результат

1
1.23
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.04.10 16:53

Уважаемые разработчики, как в такой ситуации избавиться от Warnings?
template <typename T>
T GetValue()
{
  T Res; // possible use of uninitialized variable 'Res'
  
  return(Res);
}

void OnStart()
{
  MqlTick Tick = GetValue<MqlTick>();
  int i = GetValue<int>();
}
Лайфхак
template <typename T>
const T GetDefaultValue( void )
{
  struct STRUCT_TYPE
  {
    const T Value;
  };
  
  const STRUCT_TYPE Res = {0};
  
  return(Res.Value);
}

void OnStart()
{
  int i = GetDefaultValue<int>();
  MqlTick Tick = GetDefaultValue<MqlTick>();
  string Str = GetDefaultValue<string>();
}
 

Функции-рудименты (не нужны)

  • StringToDouble
  • StringToInteger
  • StringToTime
  • StringToColor
  • StringAdd
  • StringConcatenate
  • GetPointer