Вопросы от "чайника" - страница 54

 
Urain:
Править ошибки человека с ником  Expert  ? это нужно в тему юмор.
Насколько ваш пост относится к троллингу по 10-бальной шкале ? =)
 
Expert:
Насколько ваш пост относится к троллингу по 10-бальной шкале ? =)

В начале я подумал что это Андрей такие вопросы задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует.

Раз ты так близко подобрался то приготовся что с тебя и спрос вдвойне будет.

А лучше поменяй, 3 поста ещё не поздно, на форуме одного эксперта хватит.

 
tol64:

Подскажите, как правильно реализовать проверку нового бара в мультивалютном эксперте в представленной схеме.

Добавил статический массив для хранения времени открытия нового бара для каждого инструмента:

void OnTick()
{ 
 // Объявление массивов переменных для торговых сигналов
 static datetime New_Bar[2];  
 static bool UpSignal[2], DnSignal[2];

 // Получение торговых сигналов
 TradeSignalCounter(0, остальные параметры);
 TradeSignalCounter(1, остальные параметры);

 // Совершение торговых операций
 TradePerformer(0, остальные параметры);
 TradePerformer(1, остальные параметры);
}

Изменил функцию isNewBar(string Symbol_, ENUM_TIMEFRAMES Timeframe); Теперь она работает с массивом  New_Bar[].

bool isNewBar(int Number,string Symbol_,ENUM_TIMEFRAMES Timeframe,datetime &New_Bar[])
{
 // Текущее время
 datetime lastbar_time = (ENUM_SERIES_INFO_INTEGER)SeriesInfoInteger(Symbol_,Timeframe,SERIES_LASTBAR_DATE);

 // Если это первый вызов функции
 if(New_Bar[Number] == 0)
   {
    // Установим время и выйдем 
    New_Bar[Number] = lastbar_time;
    return(false);
   }

 // Если время отличается
 if(New_Bar[Number] != lastbar_time)
   {
    // Запомним время и вернем true
    New_Bar[Number] = lastbar_time;
    return(true);
   }
 // Дошли до этого места - значит бар не новый, вернем false
 return(false);
}
Результаты при неизменных параметрах на разных инструментах всё равно отличаются. Подскажите,  в чём я ошибаюсь?
 
Urain:

В начале я подумал что это Андрей такие вопросы задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует.

Раз ты так близко подобрался то приготовся что с тебя и спрос вдвойне будет.

А лучше поменяй, 3 поста ещё не поздно, на форуме одного эксперта хватит.

В начале я подумал что это Андрей такие вопросы(по контексту понимаем глупые) задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует(oops, скрытое оскорбление TheXpert-а) =)

P.S. Сижу придумываю новый ник... 

 
papaklass:
Результаты будут разные, т.к. функция OnTick() срабытывает, когда приходит новый тик по инструменту, на графике которого работает эксперт. А тики на разных инструментах приходят не одновременно. От этого получаются расхождения в конечных результатах. Поставьте работать свего эксперта на самую ликвидную валюту, где больше всего тиков за сутки (eurusd) и не парьтесь с этим.

Причина, почему результаты отличаются мне понятна. На нескольких ветках это уже обсуждалось неоднократно. Не париться в моём случае не подходит.)) Есть задача, которую нужно решить для того, чтобы получать правильные результаты тестирования. Схема предложенная Николаем Косициным мне на данный момент понятна больше всего и вполне подходит. Вот только пока не получается решить вопрос озвученный выше.

Константин Груздев в своей статье предложил интересный метод со "шпионами" и "агентами". )) Но у меня что-то его "агент" exSpy Control panel MCM не хочет работать. 

Кто-нибудь пробовал решить озвученную выше проблему с помощью "агентов" Константина Груздева?

 
tol64:

Кто-нибудь пробовал решить озвученную выше проблему с помощью "агентов" Константина Груздева?

Я думаю в тестере эта технология работать не будет.

// Работай по таймеру. Чем не нравится?

 
MetaDriver:
Я думаю в тестере эта технология работать не будет.

Сам Константин прокомментировал это в ветке обсуждения статьи так: 

В тестере пока не работает OnChartEvent(). Разработчики обещали сделать. Я проверял, если это можно назвать проверкой, методику с вызовом "шпионов" прямо из эксперта в тестере, заменив передачу событий через глобальные переменные - работает.  

Вот так можно попробовать.

В голове пока достаточно в сыром виде рождаются ещё некоторые варианты, но они мне кажутся довольно сложными. В любом случае придёться решать эту задачу. Просто устал уже от неправильных результатов. Я исключительно из-за возможности тестировать в мультивалютном режиме торговые системы начал изучать MQL5. До этого выгружал результаты тестов в Excel и там производил расчёты. Но мне нужно видеть результат сразу в тестере.

Владимир, а Вы как решили этот вопрос?  

MetaDriver:

// Работай по таймеру. Чем не нравится?

А, уже ответили.)) Да, некоторые "акулы" форума уже тоже предлагали этот вариант, но я пока не увидел, как это можно реализовать. Попробую сейчас сконцентрироваться и сделать наконец эту нужную функцию. Если у Вас есть готовое решение, то был бы Вам глубоко признателен за хотя бы простой примерчик, если Вас это не затруднит.))

 
MetaDriver:

// Работай по таймеру. Чем не нравится?

Попробовал в таймере протестировать. Мне всё это сложнее представлялось, а тут оказывается достаточно перенести код из функции OnTick() в OnTimer(). Результаты получаются идентичными. Для точности нужно установить таймер, например, каждые 10 секунд. Правда на тестирование уходит намного больше времени, это единственный момент на первый взгляд, который может не понравиться.
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 
tol64:
Попробовал в таймере протестировать. Мне всё это сложнее представлялось, а тут оказывается достаточно перенести код из функции OnTick() в OnTimer(). Результаты получаются идентичными. Для точности нужно установить таймер, например, каждые 10 секунд. Правда на тестирование уходит намного больше времени, это единственный момент на первый взгляд, который может не понравиться.

Это зависит от периода таймера. Можно и 10 дней период замутить (60*60*24*10),  побыстрей будет. :))

Ещё тонкости есть. Например, в выходные тикать не обязательно. ;)

 
tol64:
Правда на тестирование уходит намного больше времени

Если "тикать" нужно только для отлова нового бара, достаточно поставить таймер на рассчетное время появления бара (00 минут 00 секунд для Н1) и потикать с периодичностью 1 сек пару минут, пока бар не появится на всех необходимых ТФ. Будет и точнее, и экономнее.

Но решение с пользовательскими событиями, конечно, намного элегантнее.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
Причина обращения: