Die auf dem Multi-Faktor-Modell basierende Moment-Reversal-Strategie kombiniert Multi-Faktor-Modell und Momentum-Reversal-Strategie, um stabilere und höhere Renditen zu erzielen.
Die Strategie besteht aus zwei Teilstrategien: 123 Umkehrstrategie und Strategie für Konfluenzindikatoren.
Die 123 Umkehrstrategie erzeugt Handelssignale, die darauf basieren, ob der Preis 2 Tage lang kontinuierlich gestiegen oder gefallen ist, kombiniert mit dem STOCH-Indikator, um zu beurteilen, ob der Markt überkühlt oder überhitzt ist. Insbesondere, wenn der Preis 2 Tage lang kontinuierlich steigt und die 9-tägige STOCH-Slow-Linie unter 50 liegt, ist er bullisch. Wenn der Preis 2 Tage lang kontinuierlich fällt und die 9-tägige STOCH-Fast-Linie über 50 liegt, ist er bärisch.
Die Konfluenz-Indikatorstrategie nutzt die Überlagerung von gleitenden Durchschnitten und Oszillatoren verschiedener Zyklen, um die Trendrichtung und Stärke zu bestimmen. Einschließlich lineare Gewichtung, Sinus addierung und andere Methoden, um die lange und kurze Dynamik umfassend zu beurteilen. Der Indikator wird bewertet und gibt 1 bis 9 an, was eine starke bullische Dynamik und -1 bis -9 anzeigt, was eine starke bärische Dynamik angibt.
Schließlich werden bei gleichbleibenden Signalen Long- oder Short-Positionen festgelegt.
Die auf einem Multifaktormodell basierende Moment-Reversal-Strategie kombiniert Reversal-Faktoren und Momentum-Faktoren, um Reversal-Möglichkeiten zu erfassen und gleichzeitig dem Trend zu folgen, um falsche Ausbrüche zu vermeiden, wodurch höhere Gewinnraten erzielt werden.
Als Umkehrsignalquelle kann die Umkehrstrategie 123 überschüssige Renditen aus kurzfristigen Umkehrungen erfassen.
Der Konfluenzindikator beurteilt die Trendrichtung und -stärke, um das Verlustrisiko durch zu großen Umkehrraum zu vermeiden.
Die Kombination der beiden Strategien ergänzt die Stärken und Schwächen des jeweils anderen in gewissem Maße und verbessert die Signalqualität.
Im Vergleich zu einem einzigen Modell kann die Kombination mehrerer Faktoren die Stabilität der Strategien verbessern.
Obwohl die auf dem Multifaktormodell basierende Strategie zur Umkehrung des Moments gewisse Vorteile hat, bestehen immer noch einige Risiken:
Das Risiko von Verlusten, wenn die Umkehrung nicht abgeschlossen wird und sich die Preise wieder umdrehen.
Es ist nicht möglich, die Richtung zu bestimmen, wenn zwei Signale inkonsistent sind.
Das Modell ist zu komplex mit zu vielen Parametern, was schwierig ist, anzupassen und zu optimieren.
Da mehrere Teilmodelle gleichzeitig überwacht werden müssen, führt dies zu größeren Betriebsschwierigkeiten und psychologischem Druck.
Die auf dem Multifaktormodell basierende Strategie zur Umkehrung des Moments kann in folgenden Aspekten optimiert werden:
Anpassung der Parameter der Umkehrstrategie 123 um die Umkehrsignale genauer und zuverlässiger zu machen.
Die Parameter des Zusammenflussindikators sind so anzupassen, dass die ermittelten Trends näher an den tatsächlichen Trends liegen.
Einführung von Algorithmen für maschinelles Lernen zur automatischen Optimierung von Parameterkombinationen.
Hinzufügen eines Positionsmanagement-Moduls, um die Positionsanpassung quantitativ und systematischer zu gestalten.
Einfache Verluste durch Voreinstellung des Stop-Loss-Preises.
Die auf dem Multi-Faktor-Modell basierende Moment-Reversal-Strategie verwendet umfassend Reversal-Faktoren und Momentum-Faktoren. Auf der Grundlage der Sicherstellung einer relativ hohen Signalqualität erzielt sie eine höhere Gewinnrate durch Multi-Faktor-Stacking. Die Strategie hat die doppelten Vorteile, Umkehrchancen zu erfassen und dem Trend zu folgen.
/*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 )