Заметил посчитаный мною PL, не совпадает с тем что считает ПЛМанагер при тестировании на истории, вот нашел почему.
версия 4.2.1.7
Прошу посмотреть рисунок:
67666290/8 - Обьем 2 по ней же прошел обем 4 контракта, так же 67666294/8 - Обьем 2 куплено по ней тоже - 4 контракта.
Нехорошо получается 🤬
评论 (17)
登录 或 创建账户, 登录或注册以发表评论
Не уверен что понял написанное.
На рисунке все видно посмотрите внимательно , это MyTrades в EmulationTrader , видно что я выставил один ордер на покупку с номером 67666290/8 и обьемом 2 контракта, то есть максимум что я могу купить по этому ордеру 2 контракта , но получаю три MyTrade , с общим обьемом 4 контракта , то есть на ордер на покупку 2 контрактов мне наливают 4 контракта, что невозможно в реале, и происходит навено потому что EmulationTrader неуспевает изменить статус заявки на уже исполненую.
Не знаю как считает PnL PnLManager но возникают большие сомнения в верности тестирования алгоритмов на истории.
Аналогичная проблема после миграции на 4.2.1.7. Воспроизводится часто
Добавил в список активных багов. На SampleHistory воспроизводится?
Спасибо , Михаил.
Если можно у меня есть вопрос о тестере ответ на который я нигде не нашел.
Если происзодится тестирование с использованием стаканов : например я ставлю заявку на покупку одного контракта скажем на бид в то время на этом биде стоит скажем обьем 15 контрактов , потом обьем на этом биде возрастает до скажем 40, будет ли мой ордер исполнен когда по биде пройдет 16 контрактов , так как он был 16-тым в очереди на покупку по даной цене , или все будет зависеть от настройки параметра FillOnTouch в трейдере , тоесть ордер будет считаться исполненным или после касания или после прохождения ценой уровня .
И что значит "FillOnTouch - Если выключено - требуется "прохождение цены сквозь уровень"" , ордер считается исполненным когда цена стала ниже бида или же когда на даном биде в стакане обьем станет равным нулю.
Спасибо.
Данные конвертировал с QScalp, на SampleHistoryTesting не пробовал но думаю что для того что бы воспроизвести на SampleHistoryTesting нужно не бить по маркету, а ставить заявку по определенной цене , думаю такое может быть еще и из-за того что один раз ордер исполняется изза изменения цены инструмента, а другой из-за накладания уровней в стакане , но это нужно проверять .
Еще раз, на каких данных тестируете (тики, стаканы, свечки, генераторы стаканов и т.д.), какие настройки у эмулятора?
Тестирую на тиках и стаканах Настройки эмулятора:
На похожей конфигурации в SampleHistoryTesting проблему воспроизвети не удается. Можете попробовать на нем? Я использовал стаканы и соответственно котировние, которое ставит лимитки в стакан.
По возможности, было бы хорошо увидеть небольшое приложение, которое воспроизводит проблему.
Котирование ставит по лучшему биду/аску или выше/ниже их ? если выше/ниже то не будет перекрытия уровней в стакане , заявка будет исполнятся только по попаданию цены. Думаю нужно ставить на лучшие бид или аск, чтобы воспроизвести проблему. Если у вас не получится то немного познее попробую на SampleHistoryTesting .
Вы можете по первоначальной проблеме отписаться? Мы рассматриваем сейчас только ее, так как она подтверждена косвенно. Другие проблемы или ошибки просьба не писать в этом топике.
Я по первой и отписался. Что думаю что лишние трейды могут появлятся потому что цена прошла уровень , и стакан наложился на ордер.
Как воспроизвести данную ситуацию?
Вот переделал пример , будет ставить заявки на лучший бид/аск.
Ставим точку отановки на строку 54 в SmaStrategy.cs и получаем остановку когда нужно.
Если обьем заявки поставить равным одному контракту , лишние трейды не проходят.
Спасибо за код, ошибку подтверждаю, в следующей версии будет фикс.