Doppel gleitender Durchschnittstrend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-09-24 13:14:08
Tags:

Übersicht

Diese Strategie verwendet langfristige RMA und kurzfristige EMA-Kreuzungen, um die Trendrichtung zu bestimmen.

Strategie Logik

  1. Verwenden Sie den langfristigen RMA und den kurzfristigen EMA, um den Trend zu bestimmen.

  2. Wenn der Preis über den jüngsten Höchststand über bestimmte Zeiträume bricht, folgen Sie dem höchsten Höchststand als Stop-Loss.

  3. Stellen Sie eine No-Trade-Zone um die RMA ein. Öffnen Sie keine Positionen, wenn der Preis innerhalb der Zone liegt, um Whipsaws zu vermeiden.

  4. Einrichtung des Gewinnpreises für die Ausgangspositionen zu einem Gewinnprozentsatz nach dem Eintritt.

Vorteile

  1. Der Kreuzungsprozess mit einem doppelten gleitenden Durchschnitt bestimmt zuverlässig die Trendrichtung.

  2. Der Stop-Loss bewegt sich mit dem Trend.

  3. Die No-Trade-Zone filtert falsche Ausbruchssignale.

  4. Mit der Strategie Take Profit können profitable Trades aktiv geschlossen werden.

Risiken

  1. Eine Verzögerung bei der Überschreitung des gleitenden Durchschnitts kann die Verluste erhöhen.

  2. Stopp-Loss zu nahe am Preis kann durch Lärm gestoppt werden.

  3. Eine zu weite No-Trade-Zone kann Chancen verpassen.

  4. Wenn man nicht rechtzeitig aufhört, kann es zu weiteren Verlusten kommen.

Mögliche Lösungen:

  1. Optimierung der gleitenden Durchschnittsparameter zur Verringerung der Verzögerung.

  2. Um eine Überempfindlichkeit zu verhindern, erhöhen Sie den Stop-Loss leicht.

  3. Testen Sie die Anpassung des No-Trade-Zonen-Bereichs, um fehlende Trades zu vermeiden.

  4. Hinzufügen anderer Stop-Loss-Mechanismen, um den maximalen Verlust zu begrenzen.

Optimierungsrichtlinien

  1. Testen Sie andere gleitende Durchschnittskombinationen, um eine bessere Passform zu finden.

  2. Um die Stabilität zu verbessern, werden Spread, MACD usw. hinzugefügt.

  3. Verwenden Sie maschinelles Lernen, um die Parameter intelligent zu optimieren.

  4. Verwenden Sie die Trendstärke, um gegentrendische Trades zu vermeiden.

  5. Optimieren Sie das Geldmanagement für eine höhere Gewinnrate.

Zusammenfassung

Diese Strategie verwendet zwei gleitende Durchschnitts-Kreuzungen, um die Trendrichtung zu bestimmen, und kombiniert Trailing Stops und No-Trade-Zonen, um Trendgewinne zu erzielen.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-12 00:00:00
period: 3h
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/
// © PatrickGwynBuckley

//@version=5
//var initialCapital = strategy.equity

strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true)
shortma = input.int(55, title="quick ma's")
longma = input.int(100, title="long ma's")
ema55h = ta.ema(high, shortma)
ema55l = ta.ema(low, shortma)
ema200h = ta.rma(high, longma)
ema200l = ta.rma(low, longma)
stock = ta.stoch(close, high, low, 14)

lev = input.int(3, title="leverage")
hhVal = input.int(170, title="Highest high period")
llVal = input.int(170, title="Lowest low period")

hh = ta.highest(high, hhVal)
ll = ta.lowest(low, llVal)
//plot(stock)

plot(hh, color=color.new(color.green, 50))
plot(ll, color=color.new(color.red, 50))
var float downtrade = 0
p = input.float(3.0, title="no trade zone")
l = 3
emadistlong = ema200h + ((ema200h/100)*p)
emadistshort = ema200l - ((ema200h/100)*p)

plot(ema55h)
plot(ema55l)
ntl = plot(emadistlong, color=color.new(color.red, 10))
nts = plot(emadistshort, color=color.new(color.red, 10))
fill(ntl, nts, color=color.new(color.red, 90))

//position size

EntryPrice = close
//positionValue = initialCapital
positionSize = (strategy.equity*lev) / EntryPrice

//plot(strategy.equity)


//standard short

if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 
    strategy.entry("short", strategy.short, qty=positionSize, comment="short")
    downtrade := 1

//reset count    
if (ta.crossunder(ema55h, ema200l)) and downtrade == 1
    downtrade := 0

//standard long    
if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 
    strategy.entry("long", strategy.long, qty=positionSize, comment="long")
    downtrade := 0

//RESET COUNT ON MA CROSS
if (ta.crossover(ema55l, ema200h)) and downtrade == 0
    downtrade := 1
    
longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)//
shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)//

sl = 3.5
tp = input.float(6.9, title="take profit %")
tp2 = 10


strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))
strategy.close("long", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")
//strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("long2", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")

strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300)
strategy.close("short", when = shortclose2, comment = "short exit")
//strategy.close("short", when = (downtrade == 0), comment = "short exit")
//strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("short2", when = shortclose2, comment = "short exit")
//strategy.close("short2", when = (downtrade == 0), comment = "short exit")

//if (strategy.exit("long exit", "long"))
    //downtrade := 1
//else 
   // downtrade := 0

Mehr