
Большинство стратегий необходимо протестировать на исторических данных для проверки перед их реализацией на практике. FMZ поддерживает некоторые типы спотовых, фьючерсных и бессрочных контрактов цифровой валюты, а также все типы товарных фьючерсов. Однако механизм бэктестинга количественной платформы Inventor отличается от обычного бэктестинга на панели, что вызывает путаницу у многих новичков. В этой статье подробно объясняются и даются ответы на некоторые распространенные вопросы по бэктестингу.

Как показано на рисунке выше, время начала бэктеста до времени окончания можно рассматривать как ось времени. При бэктестинге точка времени бэктеста перемещается слева направо вдоль оси, чтобы начать бэктестинг. В этот момент времени только эта точка может быть получено. Стратегия использует предыдущие исторические данные для совершения покупок и продаж на основе этих данных, что в конечном итоге приводит к прибыли или убытку. Очевидно, что распределение временных точек бэктестинга является дискретным, а плотность распределения отражает точность бэктестинга. Конечно, учитывая, что чем плотнее временные точки бэктестинга, тем больше времени он занимает, фактическая система бэктестинга должна находить компромисс между точностью и эффективностью.
Механизм бэктестинга onbar основан на K-line, то есть каждая K-line генерирует временную точку бэктестинга, в которой можно получить высокие цены открытия и низкие цены закрытия, объем торгов и другую информацию о текущей K-line, как а также информация до этого момента времени. Историческая информация о K-line. Недостаток этого механизма очевиден: на К-линии может быть сгенерирована только одна покупка и продажа, а цена обычно основана на цене закрытия К-линии. Более того, одна K-линия может получить только четыре цены: высокую цену открытия и низкую цену закрытия. Что касается того, как цена изменяется в пределах K-линии, то есть, происходит ли сначала самая высокая цена или самая низкая цена и т. д., то нет способа для получения такой информации. Если взять в качестве примера часовую К-линию, то в реальной торговле рыночная информация будет поступать каждые несколько секунд, а торговые инструкции будут выдаваться в течение торговой сессии, а не дожидаться окончания К-линии. Преимущество механизма onbar backtesting заключается в том, что он прост для понимания, а скорость backtesting чрезвычайно высока.

На рисунке выше показан интерфейс настроек бэктестинга FMZ. Режимы бэктестинга делятся на два типа: бэктестинг на уровне моделирования и бэктестинг в реальном времени, которые описаны ниже:
Что такое клещ?
В отличие от данных K-line, тик — это цена в определенный момент времени. На основе данных K-line мы фактически знаем только время, когда произошла цена открытия и цена закрытия. Неясно, когда цена достигла максимума в цикле K-line. Фактически данные K-line также генерируются на основе тиков. На основе данных K-line мы также можем смоделировать изменения в определенном тике периода K-line. Хотя это не настоящий тик, он может сделать наше бэктестирование более точным. Более того, период K-линии, используемый для моделирования, может быть намного меньше периода, используемого для бэктестинга, поэтому точность выше.
Тестирование на уровне моделирования
Для бэктестинга на уровне моделирования вам необходимо выбрать период K-линии и базовый период K-линии, используемый для бэктестинга. Например, если стратегия использует почасовое бэктестирование, а базовая K-линия составляет 5 минут, то интервал между временными точками бэктестирования будет основан на тиках, сгенерированных 5-минутным моделированием K-линии, что отражается в непрерывных изменениях. в цене закрытия последней часовой K-линии. Механизм генерации тиков в пределах K-line на основе K-line аналогичен механизму MT4. Подробное описание в этом посте: https://www.fmz.com/bbs-topic/662

Мы используем простую стратегию для демонстрации этого механизма. Код стратегии следующий:
function main() {
while(true){
var records = exchange.GetRecords() //GetRecords可以填参数,获取不同周期K线。
var ticker = exchange.GetTicker()
Log('K线收盘价: ', records[records.length-1].Close, 'ticker买一卖一价: ', ticker.Buy, ticker.Sell)
//js回测不用Sleep,会自动跳到下一个tick。Python需要一个小的休眠时间
}
}
Результаты бэктестинга:
Для каждой K-линии фиксируются только тики открытия и закрытия, а между ними добавляется 12 смоделированных тиков, так что одна K-линия будет формировать 14 временных точек бэктестинга. Если бэктест проводится в течение одного дня, базовый цикл K-line составляет 5 минут, что в общей сложности составляет 24×12×14 = 4032 временных точки, в то время как традиционный бэктест onBar имеет только 24, что значительно повышает точность. Открытие и закрытие позиций также может быть завершено в течение одного цикла K-линии. Хотя тики, генерируемые в середине, имитируются, влияние не является значительным. При бэктесте, пока цена спроса больше цены предложения, а цена предложения меньше цены предложения, транзакция будет сопоставлена. Этот метод бэктестинга учитывает как скорость, так и точность бэктестинга и рекомендуется для всех.
Тестирование в реальном времени
Тестирование в реальном времени использует реальные тики, при этом кратчайший интервал между каждой временной точкой составляет всего 1 секунду. Точность тестирования в реальном времени точна до каждой секунды, но из-за большого объема данных скорость тестирования низкая, а время тестирования в реальном времени не может быть Гарантированно. Очень долго. На рисунке ниже показан настоящий клещ. Для точной проверки стратегий можно использовать бэктестинг в реальном времени.

Даже при бэктестинге в реальном времени и реальной торговле по-прежнему наблюдаются очевидные недостатки данных, такие как невозможность получения истории транзакций, невозможность получения фактических изменений глубины, реальные задержки в сети и т. д. Тем не менее, текущая система бэктестинга FMZ является относительно полной и имеет множество небольших функций, таких как моделирование сетевых ошибок, которые можно использовать для проверки отказоустойчивости стратегий, моделирования задержек в сети, рисования рыночных иконок и т. д.
Почему для бэктестинга поддерживаются только несколько торговых пар и бирж?
В настоящее время существует лишь несколько общих торговых пар данных. Фактически, связь между стратегией и продуктом не очень велика, но ее достаточно для проверки стратегии.
Может ли он имитировать ставку финансирования, взимаемую BitMEX?
Да, вы можете включить ведение журнала событий, выбрав BitMEX Backtest.

Где проводится бэктестинг?
Тестирование стратегий JavaScript выполняется в браузере, а Python может выбирать серверы FMZ или свой собственный хост.
Можно ли загрузить журналы бэктестинга?
Да, в правом верхнем углу журнала есть кнопка загрузки.
Могу ли я провести локальное тестирование?
FMZ открыла исходный код своего движка для бэктестинга на Python. Ссылка: https://www.fmz.com/bbs-topic/1687