[TOC]
Как говорится, этот мир разделится после долгого объединения. Также будет делать обратное после долгого разделения. И это явление также существует на фьючерсном рынке. Нет разнообразия, которое только растет, но не падает. Но когда подниматься и когда падать, это зависит от отклонения. В этой статье мы будем использовать отклонение для построения простой торговой стратегии.
Уровень отклонения 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
function.
Шаг 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
Использование функции FMZSetContractType
, вы можете подписаться на арматурный индекс контракта путем прохождения в GetRecords
Поскольку требуется определенный период для расчета скорости отклонения, чтобы избежать ошибок программы, если не хватает 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
Согласно формуле для расчета отклонения, мы сначала получаем цену закрытия. В этой стратегии мы используем предыдущую цену закрытия K-линии, что означает, что текущий сигнал K-линии установлен, а следующая K-линия предназначена для размещения заказов. Затем используйте встроенный FMZtalib
Например, скользящая средняя: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
Конфигурация обратного теста
Отчет о результатах
Кривая фондов
Курс отклонения - это простой и эффективный торговый инструмент, который может обеспечить эффективную ссылку для трейдеров.