Тестирование стратегий в рамках S# на длительной истории, при отсутствии тиков ?
Уважаемые разработчики StockSharp!
Длительное время для написания и тестирования стратегий использовал TradeStation с его плюсами и минусами, и в итоге все программистские навыки ограничились его встроенным языком. Постоянно сталкивался с проблемой невозможности написания и тестирования более сложных алгоритмов. В принципе, в TS есть возможность через написание DLL усложнять свои алгоритмы, но для этого надо было для начала научиться программированию на "традиционных языках" типа C++, но все как-то не успевал, не хотелось отвлекаться надолго от самих алгоритмов стратегий.
Посему, когда нашел на пауке упоминания об S#, зашел на сайт и вник в содержимое, то сразу понял, что потратив относительно небольшую сумму на обучение, смогу получить 3 в одном - получу навыки программирования на современном языке - C#, эти навыки будут еще узко-направленны в редкой прикладной области - программирование роботов, да еще и познакомлюсь поближе с готовой библиотекой, заточенной под мои потребности тестирования стратегий.
Курсы заканчиваются, и я более чем доволен результатом и полученными знаниями.
Единственная для меня проблема, связанная с библиотекой S#, заключается в следующем:
Я разрабатываю в основном стратегии, связанные с форексом. Во всех платформах, которые я использовал для написания стратегий или с которыми знаком, в алгоритмах используется достаточно похожий набор ордеров - Market, Limit, Stop. Все известные мне платформы достаточно похожи в тестировании алгоритмов, основанных на барах (свечках). И хотя они и позволяют использовать тики, как основу истории, с историей, основанной на TimeFrame барах все работают похоже и без проблем.
В ходе курсов, я понял, что S# больше все же направлена на работу с тиками и стаканами, что позволяет очень точно эмулировать действие стратегии в реальном рынке на реальных данных, а также получать результаты работы стратегии на исторических данных, максимально приближенные к реальным.
Но такой подход - опора в расчетах стратегии на тиковую историю, фактически, не позволяет тестировать алгоритмы, для расчета которых нужна история за несколько месяцев или лет, т.е., это те алгоритмы, которыми я в основном и занимался. Конечно, я успел достаточно поверхностно познакомиться с библиотекой, и, возможно, ее и можно приспособить к написанию и расчету алгоритмов за длительную историю, но для этого придется искать ухищрения и обходные маневры. Артем в качестве варианта предложил тестировать стратегии в WealthLab, a для реальной торговли уже создавать робот с этим алгоритмом на S#.
Возможно, и придется использовать этот вариант, но для этого придется знакомиться с WealthLab и вникать в его возможности.
Но уж очень была красивой надежда, научиться программировать на C# и писать и тестировать стратегии в рамках одной библиотеки - S#, не подвязываясь к другим программам. Вот и возникли вопросы, на которые ответить могут непосредственно разработчики StockSharp:
1. Может быть у разработчиков StockSharp есть в планах добавить в свою библиотеку недостающую функциональность - возможность тестирования стратегий с использованием истории, сохраненной в отличных от тиков TimeFrame? Может быть, что-то подобное есть уже StockSharpStudio?
2. Если сейчас проверка выполнения ордеров при тестировании стратегий на истории производится на тиковой основе, очень ли сложно создать эмулятор, который бы при отсутствии тиковой истории (только баров различных TF) эмулировал бы ордера типа:
Buy Next Bar at Stop OrderLevel
Buy Next Bar at Limit OrderLevel
Buy this Bar at Close
На первый взгляд (ИМХО), создание эмулятора стакана на основе только тиков, вряд ли алгоритмически сложнее, чем эмуляция поведения тиков внутри существующего в истории бара.
Может быть и тиковой эмуляции не требуется, достаточно просто проверять достигнута ли цена ордера на текущем баре и этот текущий бар воспринимать, как отдельный некий усложненный trade, только он уже будет не в виде точки (TickPrice), a в виде отрезка [Low,High]. И если текущий алгоритм при тестировании стратегии на исторических данных с использованием тиков для ордера:
Buy Next Bar at Limit OrderLevel
делает проверку типа:
if TickPrice <= OrderLevel then Order = Done
то, если в качестве Trade использовать не тики, а TF_bar, то при том же самом ордере производилась бы проверка типа:
if OrderLevel inside TF_bar then Order = Done
Т.е. можно попробовать использовать каждый TF_bar, как некая разновидность trade, только не в виде точки, а в виде отрезка, с несколько большим количеством параметров.
На первый взгляд, для возможности тестирования стратегий при наличии только TF-истории, можно создать еще один вид эмулятора к 3-4 существующим на текущий момент.
Понятно, что то, что мне (ИМХО) кажется не очень сложным, с точки зрения программирования может оказаться нетривиальным. Но и плюсов, на мой взгляд, от такой дополнительной фичи немало:
1. Нереальность тестирования алгоритмов (основанных нa анализе Candles) на большом периоде времени (месяцы-годы) из-за огромных временных затрат, связанных с преобразованием тиков в свечки, исчезает.
2. Частая невозможность достать тиковую историю для тестирования стратегий, которые основаны на TimeFrame Candles, не будет больше проблемой, так как интрадейную историю найти намного проще.
3. При наличии очень больших плюсов у S# относительно других платформ, позволяющих создавать и тестировать алгоритмы, текущий недостаток S# (IMHO, для меня уж точно) будет устранен, а значит для той доли разработчиков, которые в своих алгоритмах используют тестирование на большом промежутке истории, не придется изыскивать для подобных тестов другие программные комплексы.
4. Понятно, что одним из самых главных плюсов S# является реалистичность и точность результатов тестирования стратегий, достигаемое за счет использования тиков. И основная направленность S# в начале ее создания, судя по всему (ИМХО), была на биржевую торговлю и удобство создания роботов именно для биржевой торговли. Но коли уже проделана такая гигантская работа, может быть имеет смысл внесением небольших дополнений в библиотеку захватить и другой сегмент разработчиков стратегий, алгоритмы которых заточены больше на работу с теханализом на больших промежутках времени? Относительно уже проделанной работы по созданию библиотеки, это не потребует (ИМХО) больших временных/трудозатрат.
А что касается достоверности полученных в процессе тестирования результатов, так погрешность и неточность вычислений, возникающие при переходе от тиков к TF-барам, очень часто менее важны, чем время вычисления. И разработчик сам волен принимать решение - что он выбирает - точность результатов на тиках, либо потеря точности, при повышении на порядок скорости вычисления, при использовании TF-баров. В конце концов, если стратегия плохая или хорошая, то по результату, даже с погрешностью, это обычно и так понятно.
И отдельный вопрос по форексу.
Нет ли в планах или не рассматривалась разработчиками идея создания адаптера под MetaTrader, который очень популярен для написания роботов для форекса?
По мне, так это немалый сегмент рынка, который мог бы заинтересоваться в использовании S#.
Еще раз уточню, весь мой немалый пост связан с тем, что на основе моих познаний по S#, которые я смог получить за время знакомства с ним, я сделал вывод, что в текущем виде S# не позволит мне тестировать мои стратегии, из-за того, что они в своих идеях требуют для себя историю за длительные периоды времени и используют TF = 5,60...1440 min, и, даже если я найду тиковую историю, то тестирование будет занимать нереальное время, с существующую у меня интрадейную историю я не могу использовать в текущей версии S# для тестирования стратегий.
Если мои посылы и выводы неправильные, и я просто плохо разобрался с S# - я буду только рад. Тогда поправьте меня плз, что я неправильно увидел в библиотеке.
Извиняюсь, что очень многа букф[blush]