"Кривая" история фьючерсов ФОРТС - страница 4

 

Спасибо, действительно, все сложнее, чем казалось, но, тем не менее, главная проблема, как я понял, оказалась в том, что невозможно получить лимиты по сессиям на исторических данных (не знаю, проблема в сервере или в терминале, но вот это:

Print("Limit min: ", SymbolInfoDouble(active_symbols[symbol_number], SYMBOL_SESSION_PRICE_LIMIT_MIN));

все время выдает нули).

Похоже, расчет маржи строится на лимитах последней сессии перед экспирацией. Во всяком случае, это объясняет, почему при попытке открыть лонг по фьючерсу BR-1.16 в начале января OrderCalcMargin выдает что-то около 200 руб. Естественно, ведь лонг открывается по цене около 37, в то время, как верхний лимит 32,93, то есть, мы пытаемся открыть контртрендовую сделку и получаем безумную скидку по ГО (по идее, при таких лимитах, терминал должен не пропускать ордер). При приближении к концу месяца, когда цена постепенно подходит к лимитам, OrderCalcMargin начинает давать более реальные цифры.

Если это действительно так, то тестирование становится абсолютно невозможным.
 

Здравствуйте.

Извините что вклиниваюсь, но как мне кажется тестирование на истории в корне не верно для фортс, там склейка не правильная и гэпы некоторые склеены, что сразу не правильно, так еще стоимость шага иногда меняется, не говоря о ГО которая не постоянна и меняется мгновенно, так же выставленные позы могут и не сработать же, а на истории как бы все время срабатывает по лучшей цене, что не всегда такое бывает, особенно если контрактов много будет. Так что тестирование на истории это бред полный. Если только тестировать интрадей и среднесрок малыми контрактами, то да это возможно, тобишь прикинуть как все сложится. А скальпинг роботы тестировать на истории это полнейший бред.

 

Тут нет лучшего варианта:  если тестировать именно на склейках, то приходится приводить много допущений (принимать ГО равным текущему и пр.); а если тестировать на базовых актива - то проблема в том что у основных активов (акции, индексы) есть данные только по дневной сессии, в  вечерку они не торгуются. Разве что Si/USDTOM хорошее исключение из правила.

У меня пока подход такой - если тестирую скальперскую стратегию (М1, без переносов и пр), то использую склейки, т.к. в целом наличие вариаций в ГО и скачков при экспирации не столь существенно влияют на результат. Если тестирую трендовую или иную среднесрочную/долгосрочную стратегию, то использую цены базовых активов, считая что вечерка по фичам не значима (фактически все изменения вечерки учитываются в утренних ГЭПах по базовым активам).

 

Я для себя нашел приемлемый выход. Может кому-то поможет.  При тестировании я задаю в настройках эксперта "миллиард денег", чтобы кривые расчеты OrderCalcMargin не приводили к неверному определению объема позиции, и, как следствие к ошибке "no money". При этом, я считаю баланс самостоятельно внутри эксперта, и, отталкиваясь от этого баланса, рассчитываю объем позиции в соответствие с риск-менеджментом. В плане ГО, я ориентируюсь на то, что возвращает 

SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL); 

Это, конечно, не идеальный вариант, но ГО меняется не настолько часто и не так сильно, чтобы это вызывало серьезные проблемы, а на расчете прибыли по сделкам это никак не сказывается.

В итоге, тестирование получается довольно точным, за исключением риск-менеджмента, но и тут ошибки не настолько критичны.

Хочется, конечно идеального тестирования, но, для этого нужно брать старый добрый C#/C++ и делать свой тестер. Хотя, если уж тебе удалось создать свой тестер с хорошей эмуляцией биржевого матчинга, то на кой вообще тогда все эти Метатрейдеры?)))