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

Автор:Лидия., Создано: 2023-01-06 15:27:16, Обновлено: 2023-09-20 10:12:15

img

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

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

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

img

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

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

Что такое данные Tick?

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

Каждое действие иностранных бирж будет отправлено на рынок в режиме реального времени, в то время как внутренний обмен проверяется дважды в секунду.

Все коды и получение данных временных рядов в этом учебном пособии будут завершены на платформе FMZ Quant.

Укажите данные по FMZ Quant

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

img

Не только это, на FMZ Quant, даже если данные с 1-часовым периодом загружаются, гранулированность данных все равно может быть скорректирована, например, корректировка гранулированности данных до 1 минуты. В этот момент 1-часовая K-линия состоит из 1-минутных данных. Конечно, чем меньше гранулированность, тем выше точность. Что более мощное, это то, что если вы переключите данные на реальный бот Tick, вы можете легко восстановить реальную ботовую среду. То есть реальные данные Tick Exchange два раза в секунду.

img

Теперь вы узнали основные понятия, которые вам нужно понять, чтобы завершить это обучение. Эти понятия вернутся скоро, и вы узнаете больше о них позже в этом обучении.

Создание рабочей среды

Лучшие инструменты делают хорошую работу. Нам сначала нужно развернуть докер на платформе FMZ Quant. Что касается концепции докера, читатели с опытом программирования могут представить его как официально упакованную систему Docker, которая инкапсулировала публичные интерфейсы API различных основных бирж и технические детали написания стратегии и бэкстестинга. Первоначальное намерение создания этой системы заключается в том, чтобы количественные трейдеры сосредоточились на написании стратегии и дизайне при использовании платформы FMZ Quant. Эти технические детали представляются сценаристам стратегии в инкапсулированной формуле, чтобы сэкономить им много времени и усилий.

  • Внедрение докерной системы платформы FMZ Quant Существует два способа развертывания докера:

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

Метод B: Используйте публичный сервер платформы FMZ Quant для развертывания, платформа предоставляет четыре места для развертывания в Гонконге, Сингапуре, Японии и Восточных США. Пользователи могут развертывать в соответствии с месторасположением биржи, на которой они хотят торговать, и принципом близости. Преимущество этого аспекта заключается в том, что он прост и легко завершается одним щелчком мыши, что особенно подходит для начинающих пользователей. Не нужно знать многое о покупке серверов Linux, а также экономит время и энергию от изучения команд Linux. Цена относительно дешевая. Для пользователей с небольшими средствами платформа рекомендует использовать этот метод развертывания.

img

Для новичков эта статья будет использовать метод Б.

Конкретные операции:FMZ.COM, нажмите Dashboard, Docker, и нажмите One-click Rent a docker VPS, чтобы арендовать докер.

Введите пароль, как показано ниже после успешного развертывания:

img

  • Отношения между концепцией роботизированной системы и докером Как упоминалось выше, докер похож на докерную систему, а докерная система - на набор стандартов. Мы развернули этот набор стандартов. Далее нам нужно создать инстанцию для этого стандарта, которая является роботом.

Создание робота очень просто. После развертывания докера, нажмите на колонку Bot слева, нажмите Add bot, заполните имя в названии тега и выберите докер, который только что развернулся. Параметры и период K-линии ниже могут быть установлены в соответствии с конкретной ситуацией, в основном в координации с торговой стратегией.

img

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

Внедрить простую стратегию EMA в Python

Мы упомянули концепции данных временных рядов и данных Tick выше. Далее мы используем простую стратегию EMA для связывания этих двух концепций.

  • Основной принцип стратегии EMA

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

Основанием для открытия позиции является открытие длинных позиций с Золотым крестом и открытие коротких позиций с медвежьим кроссовером. Причина закрытия позиций та же.

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

import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.

def main(): # The main function, where the strategy logic begins.
    STATE_IDLE = -1 # Mark position status variables
    state = STATE_IDLE # Mark the current position status
    initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
    while True: # Enter the loop
        if state == STATE_IDLE : # Here begins the logic of opening positions.
            n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
            if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
                opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
                Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
                if Dict :  # Check the dict variable and prepare for the following log output.
                    opAmount = Dict['amount']
                    state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
                    Log("Details of opening positions",Dict,"Cross-period",n) # Log information
        else: # Here begins the logic of closing positions.
            n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
            if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
                state = STATE_IDLE # Mark the position status after closing positions.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
        Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
  • Обратное тестирование стратегии EMA На странице редактирования стратегии мы закончили написание стратегии. Далее нам нужно провести обратный тест стратегии, чтобы увидеть, как она работает на историческом рынке. Бактестинг играет важную роль в любом количественном развитии стратегии, но он может быть использован только в качестве важной ссылки. Бактестинг не равен гарантированию прибыли, потому что рынок постоянно меняется, а бэктестинг - это просто акт прозрения, который по-прежнему относится к категории индукции, рынок дедуктивен.

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

img

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

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


Связанные

Больше