Diese Strategie kombiniert das Konzept des Schildkrötenhandels mit der Niko Bakker-Phasenanalyse, wobei drei gleitende Durchschnitte verschiedener Zyklen verwendet werden, um die Trendrichtung für den Trend zu bestimmen.
Berechnen Sie drei gleitende Durchschnitte verschiedener Zyklen: der schnelle gleitende Durchschnittszeitraum beträgt 8 Tage, der mittlere gleitende Durchschnittszeitraum 21 Tage und der langsame gleitende Durchschnittszeitraum 55 Tage.
Bestimmung der Einstiegsbedingungen: Wenn der schnelle gleitende Durchschnitt über den mittleren gleitenden Durchschnitt überschreitet und alle drei gleitenden Durchschnitte einen Aufwärtstrend haben, geht es lang; wenn der schnelle gleitende Durchschnitt unter den mittleren gleitenden Durchschnitt überschreitet und alle drei gleitenden Durchschnitte einen Abwärtstrend haben, geht es kurz.
Bestimmung der Ausstiegsbedingungen: Schließung von Positionen, wenn der schnelle gleitende Durchschnitt den mittleren gleitenden Durchschnitt in entgegengesetzte Richtung überschreitet.
Positionsgröße: Verwenden Sie eine feste Positionsgröße, öffnen Sie jedes Mal einen Vertrag.
Die Verwendung von drei gleitenden Durchschnitten hilft, die Trendrichtung zu bestimmen und falsche Ausbrüche zu vermeiden.
Der Trend für das Gewinnpotenzial folgt.
Die Verwendung gleitender Durchschnitte führt zu stabilen Gewinnen und relativ geringen Abzügen.
Eine kontrollierbare Stop-Loss-Strategie reduziert die Wahrscheinlichkeit großer Verluste.
Anfällig für mehrere kleine Verluste, was die Gewinneffizienz senkt.
Die gleitenden Durchschnittswerte liegen zurück und können die Trendumkehrpunkte verfehlen.
Die Festpositionsaufteilung kann Risiken nicht wirksam kontrollieren und kann bei erheblichen Marktschwankungen zu Margin Calls führen.
Eine unsachgemäße Optimierung der Parameter führt zu einem Überhandel, zu erhöhten Handelskosten und zu Schwankungen.
Optimierung der gleitenden Durchschnittsperioden für die Merkmale des Handelsinstruments.
Verwenden Sie ATR, um die Positionsgröße dynamisch anzupassen.
Fügen Sie eine Stop-Loss-Strategie hinzu.
Einbeziehung von Handelsvolumenindikatoren zur Bestimmung der Zuverlässigkeit der Trends.
Diese Strategie integriert traditionelle technische Indikatoren und die Philosophie des Schildkrötenhandels, wobei drei gleitende Durchschnitte verwendet werden, um Trends zu verfolgen. Mit der richtigen Optimierung der Parameter kann sie eine gute Rentabilität erzielen. Aber sie birgt auch einige Risiken. Stop-Loss, Positionsgröße und andere Maßnahmen müssen genutzt werden, um Risiken zu kontrollieren und langfristige stabile Gewinne aus dieser quantitativen Handelsstrategie zu erzielen.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JoshuaMcGowan //@version=4 // 1. Define strategy settings strategy(title="Triple Moving Average", overlay=true, pyramiding=0, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=4, slippage=2) fastMALen = input(title="Fast MA Length", type=input.integer, defval=8) medMALen = input(title="Medium MA Length", type=input.integer, defval=21) slowMALen = input(title="Slow MA Length", type=input.integer, defval=55) //endMonth = input(title="End Month Backtest", type=input.integer, defval=11) //endYear = input(title="End Year Backtest", type=input.integer, defval=2019) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2016, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true) riskPerc = input(title="Risk %", type=input.float, defval=0.5, step=0.25) // 2. Calculate strategy values fastMA = sma(close, fastMALen) medMA = sma(close, medMALen) slowMA = sma(close, slowMALen) //Position Sizing riskEquity = (riskPerc / 100) * strategy.equity atrCurrency = (atr(20) * syminfo.pointvalue) posSize = usePosSize ? floor(riskEquity / atrCurrency) : 1 //Backtest Window //tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0)) // 3. Determine long trading conditions enterLong = crossover(fastMA, medMA) and (fastMA > slowMA) and (medMA > slowMA) and window() exitLong = crossunder(fastMA, medMA) // 4. Code short trading conditions enterShort = crossunder(fastMA, medMA) and (fastMA < slowMA) and (medMA < slowMA) and window() exitShort = crossover(fastMA, medMA) // 5. Output strategy data plot(series=fastMA, color=color.green, title="Fast MA") plot(series=medMA, color=color.purple, title="Medium MA") plot(series=slowMA, color=color.red, title="Slow MA", linewidth=2) bgColour = enterLong and (strategy.position_size < 1) ? color.green : enterShort and (strategy.position_size > -1) ? color.red : exitLong and (strategy.position_size > 0) ? color.lime : exitShort and (strategy.position_size < 0) ? color.orange : na bgcolor(color=bgColour, transp=85) // 6. Submit entry orders if (enterLong) strategy.entry(id="EL", long=true, qty=1) if (enterShort) strategy.entry(id="ES", long=false, qty=1) // 7. Submit exit orders strategy.close_all(when=exitLong and (strategy.position_size > 0)) strategy.close_all(when=exitShort and (strategy.position_size < 0)) strategy.close_all(when=not window()) //END