Die doppelte gleitende Durchschnittsumkehrhandelsstrategie erzeugt Handelssignale, indem einfache gleitende Durchschnitte von zwei verschiedenen Perioden - kurzfristig und langfristig - berechnet werden. Sie geht lang, wenn der gleitende Durchschnitt der kurzen Periode über den gleitenden Durchschnitt der langen Periode überschreitet, und wird kurz, wenn der gleitende Durchschnitt der kurzen Periode unter den gleitenden Durchschnitt der langen Periode überschreitet. Diese Strategie gehört zur Kategorie der Trendfolgenden Strategie.
Diese Strategie setzt zwei einfache gleitende Durchschnitte mit unterschiedlichen Periodenlängen durch die Eingabeparameter, wobei der kurzfristige MA als die schnelle Linie bezeichnet wird und der langfristige MA als die langsame Linie bezeichnet wird. Die schnelle Linie reagiert schneller auf Preisänderungen und erfasst kurzfristige Trends, während die langsame Linie langsamer auf Preisänderungen reagiert und kurzfristige Marktgeräusche filtert und den Haupttrend erfasst. Wenn die schnelle Linie über die langsame Linie überschreitet, zeigt sie, dass sich der Aufwärtstrend stärkt und eine Long-Position eingenommen wird. Wenn die schnelle Linie unter der langsamen Linie überschreitet, zeigt sie, dass sich der Abwärtstrend stärkt und eine Short-Position eingenommen wird.
Speziell berechnet die Strategie die beiden MAs mithilfe der Funktion sma(), wobei das Ergebnis xSMA (slow line) und fast line zugeordnet wird. Die MAs werden auf der Grundlage des Schlusskurses berechnet. Wenn der Schlusskurs über xSMA geht, wird eine Long-Position eingenommen. Wenn der Schlusskurs unter xSMA geht, wird eine Short-Position eingenommen. Die Strategie legt auch ein Handelszeitbereichslimit fest, so dass Handelssignale nur innerhalb des angegebenen Zeitrahmens generiert werden.
Für jeden Handel werden Profit- und Stop-Loss-Punkte gesetzt, und Profit wird genommen oder Stop-Loss sofort ausgelöst, wenn der Preis das Take-Profit- oder Stop-Loss-Niveau erreicht.
Das Risiko kann durch Anpassung der MA-Parameter, Optimierung der Take-Profit-/Stop-Loss-Strategie, Beseitigung von Zeitbeschränkungen oder Festlegung vernünftigerer Handelszeiten reduziert werden.
Die doppelte gleitende Durchschnittsumkehrhandelsstrategie ist insgesamt eine einfache und praktische Trendfolgestrategie. Sie nutzt den Glättungseffekt von MAs voll aus, um die Trendrichtung zu identifizieren, und verwendet schnelle / langsame MAs, um Handelssignale zu generieren. Die Strategie ist leicht umsetzbar mit klarer Logik, die für Anfänger geeignet ist. Allerdings kann sie übermäßige falsche Signale und Verzögerungsprobleme erzeugen. Verbesserungen können durch Parameteroptimierung, Hinzufügen von Hilfsindikatoren usw. vorgenommen werden, um die Strategie robuster zu machen.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HPotter // Simple SMA strategy // // WARNING: // - For purpose educate only // - This script to change bars colors //@version=4 timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0 strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true) Resolution = input(title="Resolution", type=input.resolution, defval="D") Source = input(title="Source", type=input.source, defval=close) xSeries = security(syminfo.tickerid, Resolution, Source) Length = input(title="Length", type=input.integer, defval=14, minval=2) TriggerPrice = input(title="Trigger Price", type=input.source, defval=close) TakeProfit = input(50, title="Take Profit", step=0.01) StopLoss = input(20, title="Stop Loss", step=0.01) UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false) BarColors = input(title="Painting bars", type=input.bool, defval=true) ShowLine = input(title="Show Line", type=input.bool, defval=true) UseAlerts = input(title="Use Alerts", type=input.bool, defval=false) timeframe = input(title="Time Frame", defval="15") timerange = input(title="Time Range", defval="2300-0800") reverse = input(title="Trade Reverse", type=input.bool, defval=false) pos = 0 xSMA = sma(xSeries, Length) pos := iff(TriggerPrice > xSMA, 1, iff(TriggerPrice < xSMA, -1, nz(pos[1], 0))) nRes = ShowLine ? xSMA : na alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY') alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL') alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position') possig =iff(pos[1] != pos, iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)), 0) if (possig == 1 and timeinrange(timeframe, timerange)) strategy.entry("Long", strategy.long) if (possig == -1 and timeinrange(timeframe, timerange)) strategy.entry("Short", strategy.short) if (timeinrange(timeframe, timerange) == 0) strategy.close_all() if (UseTPSL) strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit") strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss") strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit") strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss") nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na barcolor(nColor) plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)