Стратегия обратного момента, основанная на многофакторной модели, сочетает в себе многофакторную модель и стратегию обратного момента для достижения более стабильной и более высокой доходности.
Стратегия состоит из двух подстратегий: 123 стратегия отмены и стратегия показателей слияния.
Стратегия 123 по обратному движению генерирует торговые сигналы на основе того, поднялась или упала цена непрерывно в течение 2 дней, в сочетании с индикатором STOCH для оценки того, переохлаждается или перегревается рынок. В частности, когда цена поднимается непрерывно в течение 2 дней, а 9-дневная медленная линия STOCH ниже 50, это быстрый. Когда цена падает непрерывно в течение 2 дней, а 9-дневная быстрая линия STOCH выше 50, это медленный.
Стратегия индикатора слияния использует суперпозицию скользящих средних и осцилляторов разных циклов для определения направления и силы тренда. Включая линейное взвешивание, синусное сложение и другие методы для всестороннего суждения о длинном и коротком импульсе. Индикатор оценивается и возвращает от 1 до 9, что указывает на сильный бычий импульс, и от -1 до -9, что указывает на сильный медвежий импульс.
Наконец, стратегия устанавливает длинные или короткие позиции, когда оба сигнала совпадают.
Стратегия обратного движения момента, основанная на многофакторной модели, сочетает в себе факторы обратного движения и факторы импульса, чтобы поймать возможности обратного движения, следуя тенденции, чтобы избежать ложных прорывов, тем самым имея более высокие показатели выигрыша.
В качестве источника сигналов отмены, стратегия 123 отмены может получить избыточную доходность от краткосрочных отмен.
Индикатор слияния оценивает направление и силу тренда, чтобы избежать риска потерь, вызванных слишком большим переломным пространством.
Сочетание двух стратегий в некоторой степени дополняет сильные и слабые стороны друг друга и улучшает качество сигнала.
По сравнению с одной моделью, сочетание нескольких факторов может улучшить стабильность стратегий.
Несмотря на то, что стратегия обратного движения момента, основанная на многофакторной модели, имеет определенные преимущества, все же существуют некоторые риски:
Риск убытков, вызванный не завершением реверсии и повторным переворотом цен.
Невозможно определить направление, когда два сигнала несовместимы.
Модель слишком сложна с слишком большим количеством параметров, что трудно регулировать и оптимизировать.
Необходимо одновременно контролировать несколько подмоделей, что приводит к большей трудности в работе и психологическому давлению.
Стратегия отмены момента, основанная на многофакторной модели, может быть оптимизирована в следующих аспектах:
Корректировать параметры стратегии 123 для повышения точности и надежности сигналов.
Корректировать параметры показателя слияния, чтобы определить тенденции ближе к фактическим.
Внедрить алгоритмы машинного обучения для автоматической оптимизации комбинаций параметров.
Добавление модуля управления позициями для более количественной и систематической корректировки позиций.
Добавьте модуль остановки потери. Эффективно контролируйте одиночные потери, предопределяя цену остановки потери.
Стратегия отмены момента, основанная на многофакторной модели, всесторонне использует факторы отмены и факторы импульса. На основе обеспечения относительно высокого качества сигнала она получает более высокий показатель выигрыша благодаря многофакторному складированию. Стратегия имеет двойные преимущества: захватывает возможности отмены и следует за трендом. Это эффективная и стабильная количественная стратегия. Последующие оптимизации могут быть сделаны в таких аспектах, как коррекция параметров и контроль риска, чтобы еще больше улучшить соотношение риск-вознаграждение стратегии.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 11/11/2019 // 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 // This is modified version of Dale Legan's "Confluence" indicator written by Gary Fritz. // ================================================================ // Here is Gary`s commentary: // Since the Confluence indicator returned several "states" (bull, bear, grey, and zero), // he modified the return value a bit: // -9 to -1 = Bearish // -0.9 to 0.9 = "grey" (and zero) // 1 to 9 = Bullish // The "grey" range corresponds to the "grey" values plotted by Dale's indicator, but // they're divided by 10. // // 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 Confluence(Harmonic, BuyBand, SellBand) => pos = 0.0 Price = close STL = round((Harmonic * 2) - 1 - 0.5) ITL = round((STL * 2) - 1 - 0.5) LTL = round((ITL * 2) - 1 - 0.5) HOFF = round(Harmonic / 2 - 0.5) SOFF = round(STL / 2 - 0.5) IOFF = round(ITL / 2 - 0.5) xHavg = sma(Price, Harmonic) xSavg = sma(Price, STL) xIavg = sma(Price, ITL) xLavg = sma(Price, LTL) xvalue2 = xSavg - xHavg[HOFF] xvalue3 = xIavg - xSavg[SOFF] xvalue12 = xLavg - xIavg[IOFF] xmomsig = xvalue2 + xvalue3 + xvalue12 xLavgOHLC = sma(ohlc4, LTL - 1) xH2 = sma(Price, Harmonic - 1) xS2 = sma(Price, STL - 1) xI2 = sma(Price, ITL - 1) xL2 = sma(Price, LTL - 1) DerivH = (xHavg * 2) - xHavg[1] DerivS = (xSavg * 2) - xSavg[1] DerivI = (xIavg * 2) - xIavg[1] DerivL = (xLavg * 2) - xLavg[1] SumDH = Harmonic * DerivH SumDS = STL * DerivS SumDI = ITL * DerivI SumDL = LTL * DerivL LengH = Harmonic - 1 LengS = STL - 1 LengI = ITL - 1 LengL = LTL - 1 N1H = xH2 * LengH N1S = xS2 * LengS N1I = xI2 * LengI N1L = xL2 * LengL DRH = SumDH - N1H DRS = SumDS - N1S DRI = SumDI - N1I DRL = SumDL - N1L SumH = xH2 * (Harmonic - 1) SumS = xS2 * (STL - 1) SumI = xI2 * (ITL - 1) SumL = xLavgOHLC * (LTL - 1) xvalue5 = (SumH + DRH) / Harmonic xvalue6 = (SumS + DRS) / STL xvalue7 = (SumI + DRI) / ITL xvalue13 = (SumL + DRL) / LTL value9 = xvalue6 - xvalue5[HOFF] value10 = xvalue7 - xvalue6[SOFF] value14 = xvalue13 - xvalue7[IOFF] xmom = value9 + value10 + value14 HT = sin(xvalue5 * 2 * 3.14 / 360) + cos(xvalue5 * 2 * 3.14 / 360) HTA = sin(xHavg * 2 * 3.14 / 360) + cos(xHavg * 2 * 3.14 / 360) ST = sin(xvalue6 * 2 * 3.14 / 360) + cos(xvalue6 * 2 * 3.14 / 360) STA = sin(xSavg * 2 * 3.14 / 360) + cos(xSavg * 2 * 3.14 / 360) IT = sin(xvalue7 * 2 * 3.14 / 360) + cos(xvalue7 * 2 * 3.14 / 360) ITA = sin(xIavg * 2 * 3.14 / 360) + cos(xIavg * 2 * 3.14 / 360) xSum = HT + ST + IT xErr = HTA + STA + ITA Condition2 = (((xSum > xSum[SOFF]) and (xHavg < xHavg[SOFF])) or ((xSum < xSum[SOFF]) and (xHavg > xHavg[SOFF]))) Phase = iff(Condition2 , -1 , 1) xErrSum = (xSum - xErr) * Phase xErrSig = sma(xErrSum, SOFF) xvalue70 = xvalue5 - xvalue13 xvalue71 = sma(xvalue70, Harmonic) ErrNum = iff (xErrSum > 0 and xErrSum < xErrSum[1] and xErrSum < xErrSig, 1, iff (xErrSum > 0 and xErrSum < xErrSum[1] and xErrSum > xErrSig, 2, iff (xErrSum > 0 and xErrSum > xErrSum[1] and xErrSum < xErrSig, 2, iff (xErrSum > 0 and xErrSum > xErrSum[1] and xErrSum > xErrSig, 3, iff (xErrSum < 0 and xErrSum > xErrSum[1] and xErrSum > xErrSig, -1, iff (xErrSum < 0 and xErrSum < xErrSum[1] and xErrSum > xErrSig, -2, iff (xErrSum < 0 and xErrSum > xErrSum[1] and xErrSum < xErrSig, -2, iff (xErrSum < 0 and xErrSum < xErrSum[1] and xErrSum < xErrSig, -3, 0)))))))) momNum = iff (xmom > 0 and xmom < xmom[1] and xmom < xmomsig , 1, iff (xmom > 0 and xmom < xmom[1] and xmom > xmomsig, 2, iff (xmom > 0 and xmom > xmom[1] and xmom < xmomsig, 2, iff (xmom > 0 and xmom > xmom[1] and xmom > xmomsig, 3, iff (xmom < 0 and xmom > xmom[1] and xmom > xmomsig, -1, iff (xmom < 0 and xmom < xmom[1] and xmom > xmomsig, -2, iff (xmom < 0 and xmom > xmom[1] and xmom < xmomsig, -2, iff (xmom < 0 and xmom < xmom[1] and xmom < xmomsig, -3, 0)))))))) TCNum = iff (xvalue70 > 0 and xvalue70 < xvalue70[1] and xvalue70 < xvalue71, 1, iff (xvalue70 > 0 and xvalue70 < xvalue70[1] and xvalue70 > xvalue71, 2, iff (xvalue70 > 0 and xvalue70 > xvalue70[1] and xvalue70 < xvalue71, 2, iff (xvalue70 > 0 and xvalue70 > xvalue70[1] and xvalue70 > xvalue71, 3, iff (xvalue70 < 0 and xvalue70 > xvalue70[1] and xvalue70 > xvalue71, -1, iff (xvalue70 < 0 and xvalue70 < xvalue70[1] and xvalue70 > xvalue71, -2, iff (xvalue70 < 0 and xvalue70 > xvalue70[1] and xvalue70 < xvalue71, -2, iff (xvalue70 < 0 and xvalue70 < xvalue70[1] and xvalue70 < xvalue71, -3,0)))))))) value42 = ErrNum + momNum + TCNum Confluence = iff (value42 > 0 and xvalue70 > 0, value42, iff (value42 < 0 and xvalue70 < 0, value42, iff ((value42 > 0 and xvalue70 < 0) or (value42 < 0 and xvalue70 > 0), value42 / 10, 0))) Res1 = iff (Confluence >= 1, Confluence, 0) Res2 = iff (Confluence <= -1, Confluence, 0) Res3 = iff (Confluence == 0, 0, iff (Confluence > -1 and Confluence < 1, 10 * Confluence, 0)) pos := iff(Res2 >= SellBand and Res2 != 0, -1, iff(Res1 <= BuyBand and Res1 != 0, 1, iff(Res3 != 0, 2, nz(pos[1], 0)))) pos strategy(title="Combo Backtest 123 Reversal & Confluence", shorttitle="Combo", overlay = true) Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) //------------------------- Harmonic = input(10, minval=1) BuyBand = input(9) SellBand = input(-9) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posConfluence = Confluence(Harmonic, BuyBand, SellBand) pos = iff(posReversal123 == 1 and posConfluence == 1 , 1, iff(posReversal123 == -1 and posConfluence == -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 )