0
Подписаться
78
Подписчики

Анализ данных временных рядов и бэктестинг тиковых данных

Создано: 2019-08-08 10:05:45, Обновлено: 2024-12-19 00:24:00
comments   0
hits   5472

Анализ данных временных рядов и бэктестинг тиковых данных

Данные временного ряда

Временной ряд — это последовательность данных, полученных в последовательные равноотстоящие друг от друга периоды времени. В количественном инвестировании эти данные в основном проявляются в виде движения цен и точек данных отслеживаемых инвестиционных целей. Например, на следующем рисунке можно просмотреть данные о ценах на акции и временных рядах, регулярно регистрируемые в течение определенного периода времени, что даст читателям более четкое представление:

Анализ данных временных рядов и бэктестинг тиковых данных

Как видите, дата находится на оси X, а цена — на оси Y. В этом случае «последовательные интервалы» означают, что дни на оси x отстоят друг от друга на 14 дней: Обратите внимание на разницу между 7 марта 2005 г. и следующей точкой, 31 марта 2005 г., и апрелем 2005 г. 5 и 19 апреля 2005 г.

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

Что такое тиковые данные?

Данные тика представляют собой наиболее подробную структуру данных о транзакциях на бирже. Это также расширенная форма данных временного ряда, упомянутых выше, включая: цену открытия, самую высокую цену, самую низкую цену, последнюю цену, объем торгов и сумму транзакции. Если сравнить торговые данные с рекой, то тиковые данные — это данные реки в определенном сечении.

Анализ данных временных рядов и бэктестинг тиковых данных

Как показано на рисунке выше, все действия на валютных биржах будут отображаться на рынке в режиме реального времени. Внутренние биржи проверяют дважды в секунду. Если в течение этого периода происходит какое-либо действие, генерируется снимок и выталкивается. Для сравнения, передачу данных можно в лучшем случае считать OnTime, и ее нельзя назвать OnTick.

Все коды и данные временных рядов для этого руководства получены на платформе Inventor Quantitative.

Изобретатель количественно оценил данные о клещах

Хотя внутренние тиковые данные не являются настоящими тиками, использование этих данных для бэктестинга может, по крайней мере, бесконечно приблизиться к реальности и восстановить ее. Каждый тик отображает основные параметры продукта на рынке в данный момент времени, а на реальном рынке наш код рассчитывается исходя из теоретического тика 2 раза в секунду.

Анализ данных временных рядов и бэктестинг тиковых данных

Более того, в Inventor Quantification, даже если вы загружаете данные за период в 1 час, вы все равно можете настроить детализацию данных, например, настроить детализацию данных до 1 минуты. В данный момент часовая К-линия состоит из 1-минутных данных. Конечно, чем меньше размер частиц, тем выше точность. Еще более эффективным является то, что если переключить данные на тики в реальном времени, можно легко восстановить среду в реальном времени. То есть реальные данные обмена обновляются дважды в секунду.

Анализ данных временных рядов и бэктестинг тиковых данных

Теперь у вас есть понимание основных концепций, которые вам необходимо знать для завершения этого урока. Мы вскоре вернемся к этим концепциям, и вы узнаете о них больше далее в этом руководстве.

Более подробную информацию об этой части можно найти на сайте: https://www.fmz.com/bbs-topic/1651

Настройка рабочей среды

Чтобы хорошо выполнять свою работу, нужно сначала отточить свои инструменты. Нам нужно развернуть custodian на Inventor Quantitative Platform. Что касается концепции custodian, читатели с опытом программирования могут думать о ней как об официально упакованной системе Docker. Система имеет инкапсулировал общедоступные API-интерфейсы различных основных бирж и подробные технические детали для написания стратегий и бэк-тестирования. Первоначальная цель создания этой системы — освободить количественных трейдеров от необходимости сосредоточиться на написании и проектировании стратегии при использовании количественной платформы Inventor. Эти технические детали представлены авторам стратегии в упакованном виде, чтобы избавить их от хлопот по многим время и энергия.

  • Развертывание системы хранения данных Inventor Quantitative Platform

Существует два способа развертывания хоста:

Метод A: Пользователи арендуют или покупают серверы самостоятельно и развертывают их на основных платформах облачных вычислений, таких как AWS, Alibaba Cloud, Digital Ocean и Google Cloud. Преимущество в том, что гарантируется как безопасность стратегии, так и безопасность системы. Для Inventor Quantitative Platform пользователям рекомендуется использовать этот метод. Такое распределенное развертывание исключает риск атак на сервер (как для клиентов, так и для самой платформы).

Для этой части читатели могут обратиться к: https://www.fmz.com/bbs-topic/2848

Метод B: Используйте развертывание публичного сервера Inventor Quantitative Platform. Платформа обеспечивает развертывание в Гонконге, Лондоне и Ханчжоу. Пользователи могут развертывать по принципу близости в зависимости от местоположения биржи, на которой они хотят торговать. Преимущество этого аспекта в том, что он прост и легок, и может быть завершен одним щелчком мыши. Он особенно подходит для начинающих пользователей. Им не нужно разбираться во многих вопросах при покупке сервера Linux, и они также экономят время и энергию в изучении команд Linux. Цена также относительно дешевая, что подходит для пользователей с небольшими средствами. Пользователям платформа рекомендует использовать этот метод развертывания.

Анализ данных временных рядов и бэктестинг тиковых данных

Чтобы облегчить понимание материала начинающими, в этой статье будет использован метод Б.

Конкретные операции: войдите в систему FMZ.COM, нажмите на центр управления, хост и нажмите на аренду хоста в один клик на странице хоста.

Введите пароль. После успешного развертывания будет показан следующий рисунок:

Анализ данных временных рядов и бэктестинг тиковых данных

  • Концепция роботизированной системы и ее связь с хозяином

Как упоминалось выше, хост подобен системе docker, а система docker подобен набору стандартов. После того, как мы развернем этот набор стандартов, нам нужно сгенерировать «экземпляр» для этого стандарта, и этот «экземпляр» является робот.

Создать робота очень просто. После развертывания хоста щелкните столбец робота слева, щелкните «Создать робота», введите имя в поле «Имя метки» и выберите хост, который вы только что развернули среди хостов хостинга. Выбор параметров и период K-линии в диалоговом окне ниже можно выбирать в соответствии с конкретной ситуацией, в основном для взаимодействия с выбором торговой стратегии.

Анализ данных временных рядов и бэктестинг тиковых данных

На этом этапе наша рабочая среда настроена. Как видите, она очень проста и эффективна, и каждая функция выполняет свою функцию. Далее мы приступим к написанию количественных стратегий.

Реализация простой стратегии скользящей средней с помощью Python

Выше мы упомянули концепции временных рядов и тиковых данных. Далее мы воспользуемся простой скользящей средней стратегией, чтобы связать эти две концепции.

  • Основной принцип стратегии скользящей средней

С помощью скользящей средней с медленным периодом, например, 7-дневной скользящей средней, и скользящей средней с быстрым периодом, например, 3-дневной скользящей средней. Применяя их к тому же графику K-линии, когда быстрая скользящая средняя пересекает медленную скользящую среднюю, мы называем это золотым крестом; когда медленная скользящая средняя пересекает быструю скользящую среднюю, мы называем это смертельным крестом.

Основой открытия позиции является открытие длинного ордера при появлении золотого креста и открытие короткого ордера при появлении золотого креста. Тот же принцип применяется к закрытию позиции.

Откроем FMZ.COM, войдем в учетную запись, центр управления, библиотеку стратегий, создадим новую стратегию и выберем Python в языке написания стратегии в левом верхнем углу. Ниже приведен код этой стратегии. Каждая строка имеет очень подробные комментарии. Пожалуйста, уделите время, чтобы оценить его. Эта стратегия не является живой стратегией, поэтому, пожалуйста, не экспериментируйте с реальными деньгами. Она в основном предназначена для того, чтобы дать всем общее представление о написании стратегии и шаблоне обучения.

import types # 导入Types模块库,这是为了应对代码中将要用到的各种数据类型

def main(): # 主函数,策略逻辑从这里开始
    STATE_IDLE = -1 # 标记持仓状态变量
    state = STATE_IDLE # 标记当前持仓状态
    initAccount = ext.GetAccount() #这里用到了现货数字货币交易类库(python版),编写策略时记得勾选上,作用是获得账户初始信息
    while True: # 进入循环
        if state == STATE_IDLE : # 这里开始开仓逻辑
            n = ext.Cross(FastPeriod,SlowPeriod) # 这里用到了指标交叉函数,详情请查看https://www.fmz.com/strategy/21104
            if abs(n) >= EnterPeriod : # 如果n大于等于入市观察期,这里的入市观察期是为了防止一开盘就胡乱开仓。
                opAmount = _N(initAccount.Stocks * PositionRatio,3) # 开仓量,关于_N的用法,请查看官方API文档
                Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # 建立一个变量,用于存储开仓状态,并执行开仓操作
                if Dict :  # 查看dict变量的情况,为下面的日志输出做准备
                    opAmount = Dict['amount']
                    state = PD_LONG if n > 0 else PD_SHORT # PD_LONG和PD_SHORT均为全局常量,分别用来表示多头和空头仓位。
                    Log("开仓详情",Dict,"交叉周期",n) # 日志信息
        else: # 这里开始平仓逻辑
            n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # 指标交叉函数,
            if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # 如果经过了离市观察期且当前账户状态为持仓状态,进而判断金叉或者死叉
                nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
                Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # 平仓逻辑,是多头就平多头,是空头就平空头。
                state = STATE_IDLE # 标记平仓后持仓状态。
                nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
                LogProfit(nowAccount.Balance - initAccount.Balance,'钱:',nowAccount.Balance,'币:',nowAccount.Stocks,'平仓详情:',Dict2,'交叉周期:',n) # 日志信息
        Sleep(Interval * 1000) # 循环暂停一秒,防止API访问频率过快导致账户被限制。

  • Тестирование стратегии скользящей средней на исторических данных

На странице редактирования стратегии мы завершили написание стратегии. Далее нам нужно провести бэктест этой стратегии, чтобы увидеть, как она работает в исторических рыночных условиях. Бэктест играет важную роль в разработке любой количественной стратегии, но это также только она может служить важным справочным материалом. Backtesting не означает гарантию прибыли, поскольку рынок постоянно меняется. Backtesting — это всего лишь акт ретроспективного анализа, и он все еще относится к категории индукции. Рынок дедуктивен.

Нажмите на смоделированный бэктест, и вы увидите, что есть много регулируемых параметров, которые можно изменять непосредственно в нем. Поскольку стратегия становится все более сложной и число параметров увеличивается, этот метод модификации может помочь пользователям избежать необходимости модифицируйте их по одному в коде. Процесс модификации не вызывает проблем, быстр и прост, а также четко организован.

Анализ данных временных рядов и бэктестинг тиковых данных

Последующие параметры настройки могут автоматически оптимизировать заданные параметры. Система будет пробовать различные оптимальные параметры, чтобы помочь разработчикам стратегии найти лучший выбор.

Из приведенных выше примеров мы видим, что основой количественной торговли является взаимодействие между анализом данных временных рядов и бэктестингом тиковых данных. Какой бы сложной ни была логика, она неотделима от этих двух базовых элементов. Разница только в измерении. Например, высокочастотная торговля требует более подробных разделов данных и более насыщенных временных рядов. Например, арбитражная торговля требует относительно больших данных для выборок бэктеста. Может потребоваться более десяти лет непрерывных углубленных данных по двум торговым целям, чтобы найти статистические результаты расширения и сокращения их процентных спредов. В будущих статьях я расскажу о стратегиях высокочастотной торговли и арбитражной торговли, так что следите за обновлениями.