Подскажите, как правильно реализовать проверку нового бара в мультивалютном эксперте в представленной схеме.
Добавил статический массив для хранения времени открытия нового бара для каждого инструмента:
voidOnTick()
{
// Объявление массивов переменных для торговых сигналовstaticdatetimeNew_Bar[2];
staticbool 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);
}
// Дошли до этого места - значит бар не новый, вернем falsereturn(false);
}
Результаты при неизменных параметрах на разных инструментах всё равно отличаются. Подскажите, в чём я ошибаюсь?
В начале я подумал что это Андрей такие вопросы задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует.
Раз ты так близко подобрался то приготовся что с тебя и спрос вдвойне будет.
А лучше поменяй, 3 поста ещё не поздно, на форуме одного эксперта хватит.
В начале я подумал что это Андрей такие вопросы(по контексту понимаем глупые) задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует(oops, скрытое оскорбление TheXpert-а) =)
papaklass: Результаты будут разные, т.к. функция OnTick() срабытывает, когда приходит новый тик по инструменту, на графике которого работает эксперт. А тики на разных инструментах приходят не одновременно. От этого получаются расхождения в конечных результатах. Поставьте работать свего эксперта на самую ликвидную валюту, где больше всего тиков за сутки (eurusd) и не парьтесь с этим.
Причина, почему результаты отличаются мне понятна. На нескольких ветках это уже обсуждалось неоднократно. Не париться в моём случае не подходит.)) Есть задача, которую нужно решить для того, чтобы получать правильные результаты тестирования. Схема предложенная Николаем Косициным мне на данный момент понятна больше всего и вполне подходит. Вот только пока не получается решить вопрос озвученный выше.
Константин Груздев в своей статье предложил интересный метод со "шпионами" и "агентами". )) Но у меня что-то его "агент" exSpy Control panel MCM не хочет работать.
Кто-нибудь пробовал решить озвученную выше проблему с помощью "агентов" Константина Груздева?
В тестере пока не работает OnChartEvent(). Разработчики обещали сделать. Я проверял, если это можно назвать проверкой, методику с вызовом "шпионов" прямо из эксперта в тестере, заменив передачу событий через глобальные переменные - работает.
Вот так можно попробовать.
В голове пока достаточно в сыром виде рождаются ещё некоторые варианты, но они мне кажутся довольно сложными. В любом случае придёться решать эту задачу. Просто устал уже от неправильных результатов. Я исключительно из-за возможности тестировать в мультивалютном режиме торговые системы начал изучать MQL5. До этого выгружал результаты тестов в Excel и там производил расчёты. Но мне нужно видеть результат сразу в тестере.
Владимир, а Вы как решили этот вопрос?
MetaDriver:
// Работай по таймеру. Чем не нравится?
А, уже ответили.)) Да, некоторые "акулы" форума уже тоже предлагали этот вариант, но я пока не увидел, как это можно реализовать. Попробую сейчас сконцентрироваться и сделать наконец эту нужную функцию. Если у Вас есть готовое решение, то был бы Вам глубоко признателен за хотя бы простой примерчик, если Вас это не затруднит.))
Попробовал в таймере протестировать. Мне всё это сложнее представлялось, а тут оказывается достаточно перенести код из функции OnTick() в OnTimer(). Результаты получаются идентичными. Для точности нужно установить таймер, например, каждые 10 секунд. Правда на тестирование уходит намного больше времени, это единственный момент на первый взгляд, который может не понравиться.
tol64: Попробовал в таймере протестировать. Мне всё это сложнее представлялось, а тут оказывается достаточно перенести код из функции OnTick() в OnTimer(). Результаты получаются идентичными. Для точности нужно установить таймер, например, каждые 10 секунд. Правда на тестирование уходит намного больше времени, это единственный момент на первый взгляд, который может не понравиться.
Это зависит от периода таймера. Можно и 10 дней период замутить (60*60*24*10), побыстрей будет. :))
Ещё тонкости есть. Например, в выходные тикать не обязательно. ;)
tol64: Правда на тестирование уходит намного больше времени
Если "тикать" нужно только для отлова нового бара, достаточно поставить таймер на рассчетное время появления бара (00 минут 00 секунд для Н1) и потикать с периодичностью 1 сек пару минут, пока бар не появится на всех необходимых ТФ. Будет и точнее, и экономнее.
Править ошибки человека с ником Expert ? это нужно в тему юмор.
Насколько ваш пост относится к троллингу по 10-бальной шкале ? =)
В начале я подумал что это Андрей такие вопросы задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует.
Раз ты так близко подобрался то приготовся что с тебя и спрос вдвойне будет.
А лучше поменяй, 3 поста ещё не поздно, на форуме одного эксперта хватит.
Подскажите, как правильно реализовать проверку нового бара в мультивалютном эксперте в представленной схеме.
Добавил статический массив для хранения времени открытия нового бара для каждого инструмента:
Изменил функцию isNewBar(string Symbol_, ENUM_TIMEFRAMES Timeframe); Теперь она работает с массивом New_Bar[].
Результаты при неизменных параметрах на разных инструментах всё равно отличаются. Подскажите, в чём я ошибаюсь?В начале я подумал что это Андрей такие вопросы задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует.
Раз ты так близко подобрался то приготовся что с тебя и спрос вдвойне будет.
А лучше поменяй, 3 поста ещё не поздно, на форуме одного эксперта хватит.
В начале я подумал что это Андрей такие вопросы(по контексту понимаем глупые) задаёт, но потом вспомнил что у него ник TheXpert , которому он соответствует(oops, скрытое оскорбление TheXpert-а) =)
P.S. Сижу придумываю новый ник...
Результаты будут разные, т.к. функция OnTick() срабытывает, когда приходит новый тик по инструменту, на графике которого работает эксперт. А тики на разных инструментах приходят не одновременно. От этого получаются расхождения в конечных результатах. Поставьте работать свего эксперта на самую ликвидную валюту, где больше всего тиков за сутки (eurusd) и не парьтесь с этим.
Причина, почему результаты отличаются мне понятна. На нескольких ветках это уже обсуждалось неоднократно. Не париться в моём случае не подходит.)) Есть задача, которую нужно решить для того, чтобы получать правильные результаты тестирования. Схема предложенная Николаем Косициным мне на данный момент понятна больше всего и вполне подходит. Вот только пока не получается решить вопрос озвученный выше.
Константин Груздев в своей статье предложил интересный метод со "шпионами" и "агентами". )) Но у меня что-то его "агент" exSpy Control panel MCM не хочет работать.
Кто-нибудь пробовал решить озвученную выше проблему с помощью "агентов" Константина Груздева?
Кто-нибудь пробовал решить озвученную выше проблему с помощью "агентов" Константина Груздева?
Я думаю в тестере эта технология работать не будет.
// Работай по таймеру. Чем не нравится?
Я думаю в тестере эта технология работать не будет.
Сам Константин прокомментировал это в ветке обсуждения статьи так:
В тестере пока не работает OnChartEvent(). Разработчики обещали сделать. Я проверял, если это можно назвать проверкой, методику с вызовом "шпионов" прямо из эксперта в тестере, заменив передачу событий через глобальные переменные - работает.
Вот так можно попробовать.
В голове пока достаточно в сыром виде рождаются ещё некоторые варианты, но они мне кажутся довольно сложными. В любом случае придёться решать эту задачу. Просто устал уже от неправильных результатов. Я исключительно из-за возможности тестировать в мультивалютном режиме торговые системы начал изучать MQL5. До этого выгружал результаты тестов в Excel и там производил расчёты. Но мне нужно видеть результат сразу в тестере.
Владимир, а Вы как решили этот вопрос?
// Работай по таймеру. Чем не нравится?
А, уже ответили.)) Да, некоторые "акулы" форума уже тоже предлагали этот вариант, но я пока не увидел, как это можно реализовать. Попробую сейчас сконцентрироваться и сделать наконец эту нужную функцию. Если у Вас есть готовое решение, то был бы Вам глубоко признателен за хотя бы простой примерчик, если Вас это не затруднит.))
// Работай по таймеру. Чем не нравится?
Попробовал в таймере протестировать. Мне всё это сложнее представлялось, а тут оказывается достаточно перенести код из функции OnTick() в OnTimer(). Результаты получаются идентичными. Для точности нужно установить таймер, например, каждые 10 секунд. Правда на тестирование уходит намного больше времени, это единственный момент на первый взгляд, который может не понравиться.
Это зависит от периода таймера. Можно и 10 дней период замутить (60*60*24*10), побыстрей будет. :))
Ещё тонкости есть. Например, в выходные тикать не обязательно. ;)
Правда на тестирование уходит намного больше времени
Если "тикать" нужно только для отлова нового бара, достаточно поставить таймер на рассчетное время появления бара (00 минут 00 секунд для Н1) и потикать с периодичностью 1 сек пару минут, пока бар не появится на всех необходимых ТФ. Будет и точнее, и экономнее.
Но решение с пользовательскими событиями, конечно, намного элегантнее.