Коэффициент отклонения торговой стратегии BIAS

Введение

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

Краткое введение

Deviation rate BIAS — это технический индикатор, производный от скользящей средней. В основном в виде процента измеряется степень отклонения цены от скользящей средней при колебаниях. Если скользящая средняя — это средняя стоимость трейдера, то коэффициент отклонения — это средняя норма прибыли трейдера.

Принцип коэффициента отклонения

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

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

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

Формула для расчета коэффициента отклонения

Коэффициент отклонения = [(цена закрытия дня — N дневная средняя цена) / N дневная средняя цена] * 100%

Среди них N является параметром скользящей средней, поскольку период N отличается, результат расчета скорости отклонения также отличается. В общем случае значения N составляют: 6, 12, 24, 36 и т.д. При фактическом использовании он также может динамически регулироваться в соответствии с различными разновидностями. Однако подбор параметров очень важен. Если параметр слишком мал, скорость отклонения будет слишком чувствительной, если параметр слишком велик, скорость отклонения будет слишком медленной. Результаты расчета коэффициента отклонения бывают положительными и отрицательными. Чем больше коэффициент положительного отклонения, тем больше прибыль быков и тем больше вероятность коррекции цены. Чем больше коэффициент отрицательного отклонения, тем больше короткая прибыль и тем больше вероятность отскока цены.

Логика стратегии

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

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

Написание стратегии

Шаг 1: Напишите структуру стратегии

# Strategy main function
def onTick():
pass


# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second

Платформа FMZ использует режим тренировки вращения. Во-первых, необходимо определить main функцию и функцию onTick. Основная функция является входной функцией стратегии, и программа будет выполнять код построчно, начиная с основной функции. В основной функции напишите цикл while и несколько раз выполните функцию onTick. Весь основной код стратегии написан в функции onTick.

Шаг 2: Определите виртуальные позиции

mp = 0

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

Шаг 3: Получите линию K

exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return

Используя функцию FMZ SetContractType, вы можете подписаться на контракт индекса арматуры, передав «rb000», но в бэктесте и реальной ситуации на рынке индекс арматуры используется в качестве данных, а конкретный основной контракт используется для размещения ордера. Затем используйте функцию GetRecords, чтобы получить данные K-линии индекса арматуры. Так как для расчета коэффициента отклонения требуется определенный период, то во избежание программных ошибок, если не хватает K строк, используйте операторы if для фильтрации.

Шаг 4: Рассчитайте коэффициент отклонения

close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average value of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value

По формуле расчета коэффициента отклонения сначала получаем цену закрытия. В этой стратегии мы используем предыдущую цену закрытия К-линии, что означает, что текущий сигнал К-линии установлен, а следующая К-линия предназначена для размещения ордеров. Затем используйте встроенную библиотеку talib FMZ для расчета скользящей средней. Например, скользящая средняя: TA.MA. Эта функция получает 2 параметра, а именно: массив линий K и период скользящей средней.

Шаг 5: Размещение заказов

global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # Closing long positions
mp = 0 # reset virtual holding positions
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding positions
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # open long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position

Полная стратегия

# Backtest configuration
'''backtest
start: 2018-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

# External parameters
short = 10
long = 50


# Global variables
mp = 0


# Strategy main function
def onTick():
# retrieve data
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return

# Calculate BIAS
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value

# Placing Orders
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # closing long positions
mp = 0 # reset virtual holding position
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding position
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # opening long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position

# Program entry function
def main():
while True: # loop
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second

Полная стратегия опубликована на сайте FMZ:
https://www.fmz.com/strategy/215129

Бэктест стратегии

Конфигурация тестирования на истории

Отчет о проделанной работе

Кривая фонда

Подведем итоги

Deviation rate — это простой и эффективный торговый инструмент, который может стать эффективным ориентиром для трейдеров. При реальном использовании его можно гибко применять с индикаторами MACD и полос Боллинджера, чтобы по-настоящему отразить его ценность.

Источник