Стратегия торговли BIAS по уровню отклонения

Автор:Доброта, Создано: 2020-06-30 09:58:26, Обновлено: 2023-10-28 15:29:08

[TOC]

img

Резюме

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

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

img

Уровень отклонения 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, вы можете подписаться на арматурный индекс контракта путем прохождения в rb000, но в обратной проверке и реальной рыночной ситуации, арматурный индекс используется в качестве данных, и конкретный основной контракт используется для размещения заказа.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

Обратная проверка стратегии

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

img

Отчет о результатах

img img

Кривая фондов

img

Вкратце

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


Связанные

Больше