Forester #: П.С. Вместо работы над советником уже 3-й раз за последние 8 дней, трачу время на баги ((. Не туда время уходит, куда хотелось бы. Черный ящик тяжелее исследовать, чем свой код.
Удивляет, что такая ситуация не у всех. Видимо, слишком доскональный подход.
Удивляет, что такая ситуация не у всех. Видимо, слишком доскональный подход.
Из за Report-a заметил, сразу число сделок и сумма стали отличаться, со своим вариантом Virtual-а. А соответствие уже почти точное. Исправляю все. Вот и это нашел и предложил исправить...
Другие не смотрят на милисекунды, тестер их и не печатает. А ваш Report - контролирует.
Из за Report-a заметил, сразу число сделок и сумма стали отличаться, со своим вариантом Virtual-а. А соответствие уже почти точное. Исправляю все. Вот и это нашел и предложил исправить...
Другие не смотрят на милисекунды, тестер их и не печатает. А ваш Report - контролирует.
Если открывать/закрывать позиции на инструменте отличном от того на котором проводишь тестирование, то разница бывает и в десяток секунд, а на малоликвидных акциях разница времени сделки в тестере может быть больше минуты.
Я об этом писал пару раз, меня тоже никто не услышал или не понял. Забейте.
Нашелся ещё баг со временем закрытия сделки по СЛ в миллисекундах (DEAL_TIME_MSC). Эксперт:
Торгует в коде на GBPUSD, а запускаем на другом инструменте EURGBP. ДЦ: Ал-ри, хедж, ECN счет.
Забыли обновить время закрытия сделки в мс 15:00.139, оно получается раньше времени открытия 15:00.488 .
Предполагаю, что время закрытия не обновляется, только в случае, если сделка открылась и закрылась по цене тика, который был раньше первого тика основного инструмента EURGBP. Т.к. все последующие тики (как видно по 2-му, имеют правильное время закрытия)
Немного изменил код, чтобы быстрее встретить ошибку - СЛ сразу ставлю = Bid. Чтобы как и в первом случае на Ал-ри, стоп сработал сразу при открытии сделки.
#include <Trade\Trade.mqh> //подключаем библиотеку для совершения торговых операций
CTrade Trade; // объект для выполнения торговых операцийint stop=0;
voidOnTick(){
if(stop > 1){return;}//2 первые сделкиMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick) ){Print("--Main (",_Symbol,") tick time=",MscToString(Tick.time_msc));}
if (SymbolInfoTick("GBPUSD", Tick)){
Print("===Buy GBPUSD. Tick time=",MscToString(Tick.time_msc)," ask=",Tick.ask," bid=",Tick.bid);
Trade.Buy (1,"GBPUSD",Tick.ask, Tick.bid, Tick.ask + 10 * _Point);
//Trade.Sell(1,_Symbol,Tick.bid, 0, 0);
}
stop++;
}
voidOnDeinit(constint reason ){
HistorySelect(0,TimeCurrent());
for(int i=0;i<HistoryDealsTotal();i++){
ulong deal_ticket= HistoryDealGetTicket(i);
long tr_time=HistoryDealGetInteger(deal_ticket,DEAL_TIME_MSC);
Print("POSITION_ID:",HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID)," deal #",deal_ticket," at ",MscToString(tr_time)," Price:",DoubleToString(HistoryDealGetDouble(deal_ticket,DEAL_PRICE),5)," DEAL_TYPE: ",HistoryDealGetInteger(deal_ticket,DEAL_TYPE));
}
}
string MscToString(long ms){return (string)(datetime)(ms/1000)+"."+IntegerToString(ms%1000, 3, '0');}
Ситуация точно такая же. К моменту тика основного инструмента ( EURGBP ) 02:40.743 уже был тик по торгуемому инструменту ( GBPUSD) 02:12.789 . До второго тика основного инструмента - новых тиков по торгуемому GBPUSD не было (как и в 1м примере на Ал-ри).
По первому тику открылась позиция, но НЕ закрылась сразу же по СЛ == Bid = 1.23330 . На Ал-ри она сразу же закрылась. В этом отличие!
Думаю, что закрывать по СЛ позицию, сразу же при открытии - правильно. Условие для срабатывания СЛ==Bid выполнилось же. А на демо MQ не закрылась.
Я за одинаковую логику срабатывания ТП/СЛ. Или эта логика меняется в зависимости от ДЦ? Неужели со стороны ДЦ можно влиять на логику тестера?
Итого имеем: - на Ал-ри закрывает сразу же. что логически правильно. Но ошибка в том, что ставит время закрытия < времени открытия) - на демо MQ - не закрывает сразу же при открытии, хотя СЛ == Bid. Ошибка в том, что не закрыл сразу же. Или такая логика все же правильная и её везде надо применить? Скажите. Тогда ошибка у Ал-ри, потому-что сразу закрыл.
Впрочем обратное правило (когда СЛ не срабатывает сразу же на тике открытия) я обнаружил в тестере (с ДЦ Ал-ри) для сделок, если они открыты когда тики по основному и торгуемому символу пришли в одну миллисекунду. А если в разные мс, то закрывает сразу. Если это неправильное поведение, то сообщите (если вы мотрудник MQ и хотите починить) - покажу моменты, когда такое случается. Тоже весьма запутанный момент... пару дней еще буду помнить, где искать.
Если открывать/закрывать позиции на инструменте отличном от того на котором проводишь тестирование, то разница бывает и в десяток секунд, а на малоликвидных акциях разница времени сделки в тестере может быть больше минуты.
Вы про проскальзывания наверное? А я про то, что время закрытия сделки установили раньше времени открытия. Такое в жизни невозможно. Других разниц я не заметил - все четко. Кроме той, что в предыдущем посте описал.
Итого имеем: - на Ал-ри закрывает сразу же. что логически правильно. Но ошибка в том, что ставит время закрытия < времени открытия) - на демо MQ - не закрывает сразу же при открытии, хотя СЛ == Bid. Ошибка в том, что не закрыл сразу же. Или такая логика все же правильная и её везде надо применить? Скажите. Тогда ошибка у Ал-ри, потому-что сразу закрыл.
Впрочем обратное правило (когда СЛ не срабатывает сразу же на тике открытия) я обнаружил в тестере (с ДЦ Ал-ри) для сделок, если они открыты когда тики по основному и торгуемому символу пришли в одну миллисекунду. А если в разные мс, то закрывает сразу. Если это неправильное поведение, то сообщите (если вы мотрудник MQ и хотите починить) - покажу моменты, когда такое случается. Тоже весьма запутанный момент... пару дней еще буду помнить, где искать.
Сделал еще один тест для сравнения. ДЦ Ал-ри, Осн инструмент != торгуемому. Было (с первого поста на эту тему):
1-я сделка не закрылась сразу же, а после 2-й в 16:01.617 - время стопа . Т.е. логика НЕ закрывать сделку по СЛ при открытии принята основной. Но в 1-м случае она не выполнена. Давайте все сделаем по одной логике! Или 1 или 2. Но закрывать, если СЛ=bid - логичнее. Любой ДЦ с радостью примет такой подарок, если СЛ=bid для покупки или =ask для продажи. Да и биржа наверное исполнит.
1-й сделке время открытия установилось в то самое 15:00.139 (в 1-м случае его неправильно поставили как время закрытия).
Т.е. в 1-м примере при тесте по инструменту отличному от торгуемого, было использовано в качестве времени закрытия, не время срабатывания СЛ, а время последнего тика торгуемого инструмента 15:00.139, с которого копировалась цена для открытия сделки. Загадка разгадана!!! - осталось исправить.
Возможное дополнительное условие, как раньше писал " если сделка открылась и закрылась по цене тика, который был раньше первого тика основного инструмента EURGBP ".
Одно из окон с результатами оптимизации не реагирует на кнопку закрытия. Там происходит корректировка ошибок по времени открытия закрытия. И эта сделка просто была исключена из отчета На что сразу обратил внимание
Забыли обновить время закрытия сделки в мс 15:00.139, оно получается раньше времени открытия 15:00.488 .
Думаю, это типичная ошибка мультивалютных тестеров, когда вместо внутреннего времени для закрытия используется время последнего тика закрываемого символа.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
ДЦ: Ал-ри, хедж, ECN счет.
Не сталкивался, чтобы MQ что-то воспроизвели на сервере, отличном от MQ-Demo. Попробуйте там.
У самого нет в А... счета.
Да - так красивее будет)
Правильнее. Например, 12 миллисекунд.
П.С. Вместо работы над советником уже 3-й раз за последние 8 дней, трачу время на баги ((. Не туда время уходит, куда хотелось бы. Черный ящик тяжелее исследовать, чем свой код.
Удивляет, что такая ситуация не у всех. Видимо, слишком доскональный подход.
Удивляет, что такая ситуация не у всех. Видимо, слишком доскональный подход.
Из за Report-a заметил, сразу число сделок и сумма стали отличаться, со своим вариантом Virtual-а. А соответствие уже почти точное. Исправляю все. Вот и это нашел и предложил исправить...
Другие не смотрят на милисекунды, тестер их и не печатает. А ваш Report - контролирует.
Из за Report-a заметил, сразу число сделок и сумма стали отличаться, со своим вариантом Virtual-а. А соответствие уже почти точное. Исправляю все. Вот и это нашел и предложил исправить...
Другие не смотрят на милисекунды, тестер их и не печатает. А ваш Report - контролирует.
Если открывать/закрывать позиции на инструменте отличном от того на котором проводишь тестирование, то разница бывает и в десяток секунд, а на малоликвидных акциях разница времени сделки в тестере может быть больше минуты.
Я об этом писал пару раз, меня тоже никто не услышал или не понял. Забейте.
Нашелся ещё баг со временем закрытия сделки по СЛ в миллисекундах (DEAL_TIME_MSC). Эксперт:
Торгует в коде на GBPUSD, а запускаем на другом инструменте EURGBP. ДЦ: Ал-ри, хедж, ECN счет.
Забыли обновить время закрытия сделки в мс 15:00.139, оно получается раньше времени открытия 15:00.488 .Предполагаю, что время закрытия не обновляется, только в случае, если сделка открылась и закрылась по цене тика, который был раньше первого тика основного инструмента EURGBP. Т.к. все последующие тики (как видно по 2-му, имеют правильное время закрытия)
Немного изменил код, чтобы быстрее встретить ошибку - СЛ сразу ставлю = Bid. Чтобы как и в первом случае на Ал-ри, стоп сработал сразу при открытии сделки.
На Ал-ри все по прежнему.
На Demo MQ - уже по другому!
Печать результатов:
2023.05.29 00:02:40 --Main (EURGBP) tick time=2023.05.29 00:02:40.743
...
2023.05.29 00:02:40 ===Buy GBPUSD. Tick time=2023.05.29 00:02:12.789 ask=1.2354 bid=1.2333
...
2023.05.29 00:02:41 --Main (EURGBP) tick time=2023.05.29 00:02:41.108
2023.05.29 00:02:41 ===Buy GBPUSD. Tick time=2023.05.29 00:02:12.789 ask=1.2354 bid=1.2333 - новых тиков по GBPUSD не было
...
2023.05.29 00:03:16 stop loss triggered #2 buy 1 GBPUSD 1.23540 sl: 1.23330 tp: 1.23550 [#4 sell 1 GBPUSD at 1.23330]
2023.05.29 00:03:16 stop loss triggered #3 buy 1 GBPUSD 1.23540 sl: 1.23330 tp: 1.23550 [#5 sell 1 GBPUSD at 1.23330]
2023.05.29 23:54:58 POSITION_ID:0 deal #1 at 2023.05.29 00:00:00.000 Price:0.00000 DEAL_TYPE: 2
2023.05.29 23:54:58 POSITION_ID:2 deal #2 at 2023.05.29 00:02:40.743 Price:1.23540 DEAL_TYPE: 0
2023.05.29 23:54:58 POSITION_ID:3 deal #3 at 2023.05.29 00:02:41.108 Price:1.23540 DEAL_TYPE: 0
2023.05.29 23:54:58 POSITION_ID:2 deal #4 at 2023.05.29 00:03:16.321 Price:1.23320 DEAL_TYPE: 1
2023.05.29 23:54:58 POSITION_ID:3 deal #5 at 2023.05.29 00:03:16.321 Price:1.23320 DEAL_TYPE: 1
Ситуация точно такая же. К моменту тика основного инструмента ( EURGBP ) 02:40.743 уже был тик по торгуемому инструменту ( GBPUSD) 02:12.789 . До второго тика основного инструмента - новых тиков по торгуемому GBPUSD не было (как и в 1м примере на Ал-ри).
По первому тику открылась позиция, но НЕ закрылась сразу же по СЛ == Bid = 1.23330 . На Ал-ри она сразу же закрылась. В этом отличие!
Думаю, что закрывать по СЛ позицию, сразу же при открытии - правильно. Условие для срабатывания СЛ==Bid выполнилось же. А на демо MQ не закрылась.
Я за одинаковую логику срабатывания ТП/СЛ. Или эта логика меняется в зависимости от ДЦ? Неужели со стороны ДЦ можно влиять на логику тестера?
Итого имеем:
- на Ал-ри закрывает сразу же. что логически правильно. Но ошибка в том, что ставит время закрытия < времени открытия)
- на демо MQ - не закрывает сразу же при открытии, хотя СЛ == Bid. Ошибка в том, что не закрыл сразу же. Или такая логика все же правильная и её везде надо применить? Скажите. Тогда ошибка у Ал-ри, потому-что сразу закрыл.
Впрочем обратное правило (когда СЛ не срабатывает сразу же на тике открытия) я обнаружил в тестере (с ДЦ Ал-ри) для сделок, если они открыты когда тики по основному и торгуемому символу пришли в одну миллисекунду. А если в разные мс, то закрывает сразу. Если это неправильное поведение, то сообщите (если вы мотрудник MQ и хотите починить) - покажу моменты, когда такое случается. Тоже весьма запутанный момент... пару дней еще буду помнить, где искать.
Если открывать/закрывать позиции на инструменте отличном от того на котором проводишь тестирование, то разница бывает и в десяток секунд, а на малоликвидных акциях разница времени сделки в тестере может быть больше минуты.
Вы про проскальзывания наверное? А я про то, что время закрытия сделки установили раньше времени открытия. Такое в жизни невозможно.
Других разниц я не заметил - все четко. Кроме той, что в предыдущем посте описал.
Я об этом писал пару раз, меня тоже никто не услышал или не понял.
Итого имеем:
- на Ал-ри закрывает сразу же. что логически правильно. Но ошибка в том, что ставит время закрытия < времени открытия)
- на демо MQ - не закрывает сразу же при открытии, хотя СЛ == Bid. Ошибка в том, что не закрыл сразу же. Или такая логика все же правильная и её везде надо применить? Скажите. Тогда ошибка у Ал-ри, потому-что сразу закрыл.
Впрочем обратное правило (когда СЛ не срабатывает сразу же на тике открытия) я обнаружил в тестере (с ДЦ Ал-ри) для сделок, если они открыты когда тики по основному и торгуемому символу пришли в одну миллисекунду. А если в разные мс, то закрывает сразу. Если это неправильное поведение, то сообщите (если вы мотрудник MQ и хотите починить) - покажу моменты, когда такое случается. Тоже весьма запутанный момент... пару дней еще буду помнить, где искать.
Сделал еще один тест для сравнения.
ДЦ Ал-ри, Осн инструмент != торгуемому. Было (с первого поста на эту тему):
2023.05.29 23:54:58 POSITION_ID:0 deal #1 at 2023.05.29 00:00:00.0 Price:0.00000 DEAL_TYPE: 2
2023.05.29 23:54:58 POSITION_ID:2 deal #2 at 2023.05.29 00:15:00.488 Price:1.23441 DEAL_TYPE: 0
2023.05.29 23:54:58 POSITION_ID:2 deal #3 at 2023.05.29 00:15:00.139 Price:1.23402 DEAL_TYPE: 1
2023.05.29 23:54:58 POSITION_ID:4 deal #4 at 2023.05.29 00:15:16.417 Price:1.23441 DEAL_TYPE: 0
2023.05.29 23:54:58 POSITION_ID:4 deal #5 at 2023.05.29 00:16:01.617 Price:1.23402 DEAL_TYPE: 1
ДЦ Ал-ри, основной инструмент = торгуемому.
Стало:
2023.05.29 00:15:00 --Main (GBPUSD) tick time=2023.05.29 00:15:00.139
2023.05.29 00:15:00 ===Buy GBPUSD. Tick time=2023.05.29 00:15:00.139 ask=1.23452 bid=1.23402
2023.05.29 00:15:00 --Main (GBPUSD) tick time=2023.05.29 00:15:00.189
2023.05.29 00:15:00 ===Buy GBPUSD. Tick time=2023.05.29 00:15:00.189 ask=1.23441 bid=1.23431
2023.05.29 23:54:46 POSITION_ID:0 deal #1 at 2023.05.29 00:00:00.000 Price:0.00000 DEAL_TYPE: 2
2023.05.29 23:54:46 POSITION_ID:2 deal #2 at 2023.05.29 00:15:00.139 Price:1.23452 DEAL_TYPE: 0
2023.05.29 23:54:46 POSITION_ID:3 deal #3 at 2023.05.29 00:15:00.189 Price:1.23441 DEAL_TYPE: 0
2023.05.29 23:54:46 POSITION_ID:2 deal #4 at 2023.05.29 00:16:01.617 Price:1.23402 DEAL_TYPE: 1
2023.05.29 23:54:46 POSITION_ID:3 deal #5 at 2023.05.29 00:16:01.617 Price:1.23402 DEAL_TYPE: 1
1-й сделке время открытия установилось в то самое 15:00.139 (в 1-м случае его неправильно поставили как время закрытия).
Т.е. в 1-м примере при тесте по инструменту отличному от торгуемого, было использовано в качестве времени закрытия, не время срабатывания СЛ, а время последнего тика торгуемого инструмента 15:00.139, с которого копировалась цена для открытия сделки.
Загадка разгадана!!! - осталось исправить.
Возможное дополнительное условие, как раньше писал " если сделка открылась и закрылась по цене тика, который был раньше первого тика основного инструмента EURGBP ".
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления
Forester, 2023.12.19 11:42
Забыли обновить время закрытия сделки в мс 15:00.139, оно получается раньше времени открытия 15:00.488 .
Думаю, это типичная ошибка мультивалютных тестеров, когда вместо внутреннего времени для закрытия используется время последнего тика закрываемого символа.
Сам учитываю подобное через SwapTime-механизм.
Любые Order-операции на символе нужно делать с последним его тиком, но при этом время в нем выставлять равным текущему (внутреннее окружения).