Стратегия двухфакторной комбинации разворота и приростного индикатора


Дата создания: 2023-12-26 12:20:57 Последнее изменение: 2023-12-26 12:20:57
Копировать: 0 Количество просмотров: 594
1
Подписаться
1623
Подписчики

Стратегия двухфакторной комбинации разворота и приростного индикатора

Обзор

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

Стратегический принцип

123 обратный фактор

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

Индекс прироста

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

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

Анализ преимуществ

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

Анализ рисков

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

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

Направление оптимизации

  • Испытание большего количества комбинаций ценовых и волатильных индикаторов
  • Добавление модели машинного обучения для оценки качества сигнала и динамического корректировки позиций
  • В сочетании с объемом сделок, такие факторы, как Брин-Бенд, выявили больше Альфы
  • Оптимизация прокрутки с использованием метода “walk forward” для повышения устойчивости

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

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

Исходный код стратегии
/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 22/02/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The Mass Index was designed to identify trend reversals by measuring 
// the narrowing and widening of the range between the high and low prices. 
// As this range widens, the Mass Index increases; as the range narrows 
// the Mass Index decreases.
// The Mass Index was developed by Donald Dorsey. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


MASS(Length1,Length2,Trigger) =>
    pos = 0.0
    xPrice = high - low
    xEMA = ema(xPrice, Length1)
    xSmoothXAvg = ema(xEMA, Length1)
    nRes = sum(iff(xSmoothXAvg != 0, xEMA / xSmoothXAvg, 0), Length2)
    pos := iff(nRes > Trigger, -1,
	         iff(nRes < Trigger, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & MASS Index", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- MASS Index ----")
Length1 = input(9, minval=1)
Length2 = input(25, minval=1)
Trigger = input(26.5, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posMASS = MASS(Length1,Length2,Trigger)
pos = iff(posReversal123 == 1 and posMASS == 1 , 1,
	   iff(posReversal123 == -1 and posMASS == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )