Diese Strategie kombiniert mehrere gleitende Durchschnitte wie SMA und EMA, um die Kursentwicklungsrichtung zu identifizieren, und setzt Stop-Loss-Linien auf der Grundlage des Preisdurchbruchs, um eine Trendfolgestrategie zu entwerfen. Wenn die Preise steigen, folgt es dem oberen Band als Stop-Loss; wenn die Preise fallen, folgt es der unteren Grenze als Stop-Loss. Der Vorteil der Strategie besteht darin, dass die Kombination mehrerer gleitender Durchschnitte die Preisdaten glätten und Trends identifizieren kann; Das dynamische Stop-Loss-Design vermeidet übermäßig empfindliche Stopps. Das Risiko der Strategie besteht darin, dass die Einstellung der Stop-Loss-Linie zu locker ist, um den Verlust rechtzeitig zu stoppen.
Diese Strategie verwendet KAMA als Grundlage für die Beurteilung der Trendrichtung, da KAMA auf Kursänderungen empfindlicher reagiert und Wende im Voraus identifizieren kann.
Die Einstellung der Stop-Loss-Linie der Strategie basiert auf dem Preis selbst und dem gleitenden Durchschnitt. Insbesondere ist die nach oben verlaufende Stop-Loss-Linie der gleitende Durchschnitt plus ein Anteil als Puffer; die nach unten verlaufende Stop-Loss-Linie ist der gleitende Durchschnitt minus ein Anteil als Puffer. Dies ermöglicht einen sofortigen Stop-Loss, wenn sich die Preise umkehren.
Die Einstiegsbedingungen sind lang, wenn die Preise von unten nach oben durch die Aufwärts-Stop-Loss-Linie durchbrechen; kurz, wenn die Preise von oben nach unten die Abwärts-Stop-Loss-Linie durchbrechen.
Der größte Vorteil dieser Strategie besteht darin, dass durch die Kombination mehrerer gleitender Durchschnitte die Genauigkeit des Trendurteils verbessert und falsche Signale reduziert werden können. Gleichzeitig ändert sich die Stop-Loss-Linie der Strategie dynamisch auf der Grundlage des gleitenden Durchschnitts, der sich in Echtzeit anpassen und auf plötzliche Ereignisse reagieren kann.
Darüber hinaus kombiniert diese Strategie im Vergleich zu Einzelindikatorstrategien die Vorteile von Trendverfolgung und Durchbruchsstrategien. In einem Trendmarkt kann sie die Gewinne maximieren; während sie auf einem Whipsaw-Markt Verluste durch Stop-Loss-Einstellungen reduzieren kann.
Das Hauptrisiko dieser Strategie besteht darin, dass die Einstellung der Stop-Loss-Linie zu locker sein kann, um den Stop-Loss rechtzeitig zu stoppen. Dies liegt daran, dass die Retracement-Ratio der Stop-Loss-Linie feststeht, wenn es eine gewaltsame Veränderung auf dem Markt gibt, kann die Stop-Loss-Linie nicht rechtzeitig aktualisiert werden, was zu größeren Verlusten führen kann.
Darüber hinaus hat der gleitende Durchschnitt selbst eine hohe Hysterese und kann nicht sofort auf Kursänderungen reagieren. Dies kann auch dazu führen, dass der Verlust nicht rechtzeitig gestoppt wird, wenn der Markt schnell umkehrt.
Die Strategie kann in folgenden Aspekten optimiert werden:
Versuche verschiedene Parameter-Einstellungen für Stop-Loss-Line-Verhältnisse, um bessere Parameterkombinationen zu finden;
Versuchen Sie, die Stop-Loss-Linie dynamisch entsprechend dem Grad der Marktfluktuation zu ändern;
Erhöhung anderer Indikatoren zur Beurteilung, Einführung mehrer Variablen in die Stop-Loss-Basis, um die Anpassungsfähigkeit der Strategie zu verbessern;
Optimieren Sie die Zyklusparameter des gleitenden Durchschnitts, um die beste Zyklus-Einstellung für glatte Preise zu finden.
Insgesamt ist diese Strategie ziemlich robust, indem sie mehrere gleitende Durchschnitte kombiniert, um die Trendrichtung zu bestimmen, und einen dynamischen Trailing-Stop-Loss-Mechanismus entwirft, der darauf abzielt, Trends zu folgen. Die Vorteile sind, dass sie falsche Signale reduzieren, Risiken durch Stop-Loss kontrollieren kann; Der Nachteil ist, dass die Stop-Loss-Linie zu breit eingestellt werden kann, um den Verlust schnell zu stoppen. Der nächste Schritt zur Optimierung der Strategie sollte sich auf die Gestaltung der Stop-Loss-Linie konzentrieren, um sie dynamisch anpassbar zu machen, entsprechend den Marktveränderungen.
/*backtest start: 2023-02-22 00:00:00 end: 2024-02-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Atlantean Trend Signal BUY SELL Strategy', overlay=true) ma_length = input.int(title='Moving Average Length', minval=1, defval=3) percent = input.float(3.3, 'STOP LOSS Percent', step=0.1, minval=0) src = input(title='Source', defval=close) mav = input.string(title="Moving Average Type", defval="KAMA", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL", "KAMA"]) T3a1 = 0.7 _type = false //input(false, title='Activate Moving Average Screening Mode') _type1 = false //input(false, title='Activate Moving Average Color Change Screening Mode') activateScreener = input.bool(false, title="Activate Screener?") showsignallabels = input(title='Show Signal Labels?', defval=true) Var_Func(src, ma_length) => valpha = 2 / (ma_length + 1) vud1 = src > src[1] ? src - src[1] : 0 vdd1 = src < src[1] ? src[1] - src : 0 vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = nz((vUD - vDD) / (vUD + vDD)) VAR = 0.0 VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1]) VAR VAR = Var_Func(src, ma_length) DEMA = 2 * ta.ema(src, ma_length) - ta.ema(ta.ema(src, ma_length), ma_length) Wwma_Func(src, ma_length) => wwalpha = 1 / ma_length WWMA = 0.0 WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1]) WWMA WWMA = Wwma_Func(src, ma_length) // KAMA Calculation Kama_Func(src, ma_length) => xvnoise = math.abs(src - src[1]) nfastend = 0.666 nslowend = 0.0645 nsignal = math.abs(src - src[ma_length]) nnoise = math.sum(xvnoise, ma_length) nefratio = nnoise != 0 ? nsignal / nnoise : 0 nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2) nAMA = 0.0 nAMA := nz(nAMA[1]) + nsmooth * (src - nz(nAMA[1])) nAMA Zlema_Func(src, ma_length) => zxLag = ma_length / 2 == math.round(ma_length / 2) ? ma_length / 2 : (ma_length - 1) / 2 zxEMAData = src + src - src[zxLag] ZLEMA = ta.ema(zxEMAData, ma_length) ZLEMA ZLEMA = Zlema_Func(src, ma_length) Tsf_Func(src, ma_length) => lrc = ta.linreg(src, ma_length, 0) lrc1 = ta.linreg(src, ma_length, 1) lrs = lrc - lrc1 TSF = ta.linreg(src, ma_length, 0) + lrs TSF TSF = Tsf_Func(src, ma_length) HMA = ta.wma(2 * ta.wma(src, ma_length / 2) - ta.wma(src, ma_length), math.round(math.sqrt(ma_length))) T3e1 = ta.ema(src, ma_length) T3e2 = ta.ema(T3e1, ma_length) T3e3 = ta.ema(T3e2, ma_length) T3e4 = ta.ema(T3e3, ma_length) T3e5 = ta.ema(T3e4, ma_length) T3e6 = ta.ema(T3e5, ma_length) T3c1 = -T3a1 * T3a1 * T3a1 T3c2 = 3 * T3a1 * T3a1 + 3 * T3a1 * T3a1 * T3a1 T3c3 = -6 * T3a1 * T3a1 - 3 * T3a1 - 3 * T3a1 * T3a1 * T3a1 T3c4 = 1 + 3 * T3a1 + T3a1 * T3a1 * T3a1 + 3 * T3a1 * T3a1 T3 = T3c1 * T3e6 + T3c2 * T3e5 + T3c3 * T3e4 + T3c4 * T3e3 getMA(src, ma_length) => ma = 0.0 ma := switch mav 'SMA' => ta.sma(src, ma_length) 'EMA' => ta.ema(src, ma_length) 'WMA' => ta.wma(src, ma_length) 'DEMA' => DEMA 'TMA' => ta.sma(ta.sma(src, math.ceil(ma_length / 2)), math.floor(ma_length / 2) + 1) 'VAR' => VAR 'WWMA' => WWMA 'ZLEMA' => ZLEMA 'TSF' => TSF 'HULL' => HMA 'TILL' => T3 'KAMA' => Kama_Func(src, ma_length) ma ALL = getMA(src, ma_length) exMov = ALL fark = exMov * percent * 0.01 longStop = exMov - fark longStopPrev = nz(longStop[1], longStop) longStop := exMov > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = exMov + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := exMov < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and exMov > shortStopPrev ? 1 : dir == 1 and exMov < longStopPrev ? -1 : dir MOST = dir == 1 ? longStop : shortStop cro = _type and _type1 ? ta.crossover(exMov, exMov[1]) : _type ? ta.crossover(close, exMov) : ta.crossover(exMov, MOST) cru = _type and _type1 ? ta.crossunder(exMov, exMov[1]) : _type ? ta.crossunder(close, exMov) : ta.crossunder(exMov, MOST) direction = 0 direction := cro ? 1 : cru ? -1 : direction[1] col1 = exMov > exMov[1] col3 = exMov < exMov[1] colorM = col1 and _type and _type1 ? color.rgb(14, 241, 52) : col3 and _type and _type1 ? color.red : color.new(#00bcd4, 0) if (cro) strategy.entry('LONG', strategy.long) if (cru) strategy.close('LONG') plot(_type ? na : MOST, color=color.new(color.maroon, 0), linewidth=3, title='MOST') plot(exMov, color=colorM, linewidth=2, title='exMov') plotshape(cro and showsignallabels, title='BUY', text='BUY', location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.new(#00bcd4, 0), textcolor=color.new(color.white, 0)) plotshape(cru and showsignallabels, title='SELL', text='SELL', location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.new(#e91e63, 0), textcolor=color.new(color.white, 0))