Diese Strategie verwendet Preismomentumsindikatoren, um die Handelsrichtung zu bestimmen. Insbesondere berechnet sie den gleitenden Durchschnitt und den mittleren Preis. Wenn der Preis über den gleitenden Durchschnitt und den mittleren Preis geht, wird ein Kaufsignal generiert. Um falsche Signale auszufiltern, benötigt sie keine ähnlichen vorherigen Signale. Dann speichert sie den Signalstatus und erzeugt das endgültige Eröffnungs-Positionssignal in Kombination mit dem gleitenden Durchschnitt. Die Strategie enthält auch Stop-Loss- und Take-Profit-Einstellungen.
Die Strategie stützt sich hauptsächlich auf Preisdynamikindikatoren, um die Trendrichtung zu beurteilen.
swmaClose = swma(close)
vwapClose = vwap(close)
Wo ist er?swma
ist der glättete gleitende Durchschnitt undvwap
Der durchschnittliche Preisspiegel ist der volumengewichtete Durchschnittspreis.
Vergleichen Sie dann den Preis mit dem Durchschnitt, um zu sehen, ob der Preis über dem gleitenden Durchschnitt und dem Durchschnittspreis liegt, um zu beurteilen, ob es sich um ein bullisches Signal handelt:
swmaLong = close > swmaClose
vwapLong = close > vwapClose
Um falsche Signale auszufiltern, sind keine vorherigen Signale dieser beiden Indikatoren erforderlich:
triggerLong = vwapLong and not vwapLong[1] and not swmaLong and not swmaLong[1]
Als Nächstes, speichern Sie das Aufwärtssignal:
saveLong = false, saveLong := triggerLong ? true : not vwapLong ? false : saveLong[1]
Wenn das gespeicherte Kreuzungssignal und der Kurs erneut über den gleitenden Durchschnitt gehen, wird das Öffnungssignal erzeugt:
startLong = saveLong and swmaLong
Dadurch können einige falsche Signale herausgefiltert und die Signale zuverlässiger gemacht werden.
Die Strategie enthält auch Stop-Loss- und Take-Profit-Einstellungen.
Die Strategie weist folgende Vorteile auf:
Die Strategie birgt auch einige Risiken:
Gegenmaßnahmen:
Die Strategie kann auch in folgenden Richtungen optimiert werden:
Diese Optimierungen können die Flexibilität, Robustheit und Rentabilität der Strategie verbessern.
Insgesamt ist diese Kursmomentum-Tracking-Strategie eine einfache, unkomplizierte und logische Trend-Tracking-Strategie. Die Strategie nutzt Preisbewegungsdurchschnitte und mittlere Preise, um die Kursmomentum-Richtung zu bestimmen, und entwirft einen mehrstufigen Verifizierungsmechanismus zur Verbesserung der Signalqualität. Die Strategie enthält auch angemessene Stop-Loss- und Take-Profit-Einstellungen. In Bezug auf den Code ist die Strategie-Logik sehr prägnant und erfordert nur 20+ Zeilen Pine-Skript zur Implementierung. Zusammenfassend ist diese Strategie ein sehr gutes Lernbeispiel, Anfänger können sie als sehr guten Ausgangspunkt für das Verständnis quantitativer Handelsstrategien verwenden. Natürlich hat die Strategie selbst auch einen praktischen Handelswert. Durch Parameteroptimierung und Funktionsausweitung kann sie zu einem praktischen Handelssystem werden, um Lärm und Trends zu vermeiden.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "Simple Price Momentum", shorttitle = "SPM", overlay = true, initial_capital = 20000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025) // How To Create A Simple Trading Strategy With TradingView // https://docs.google.com/document/d/1fXxCtPuGgTXb-RuBJNbwlfgkeiLTK5060LfTrzRlr5k/view swmaClose = swma(close) vwapClose = vwap(close) swmaLong = close > swmaClose vwapLong = close > vwapClose triggerLong = vwapLong and not vwapLong[1] and not swmaLong and not swmaLong[1] saveLong = false, saveLong := triggerLong ? true : not vwapLong ? false : saveLong[1] startLong = saveLong and swmaLong startLong := input(false, "Consecutive Orders") ? startLong : startLong and not startLong[1] stopLoss = input(250, "Stop Loss", step = 50) takeProfit = input(10, "Reward/Risk") * stopLoss strategy.entry("Open Long", strategy.long, when = startLong) strategy.exit("Exit Long", "Open Long", profit = stopLoss, loss = takeProfit) // bgcolor(swmaLong ? color.blue : na) // bgcolor(vwapLong ? color.orange : na) // bgcolor(triggerLong ? color.purple : na) // bgcolor(saveLong ? color.yellow : na) bgcolor(startLong[1] ? color.green : na)