Mehrzeitrahmen-Trendverfolgung Intraday-Scalping-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-16 17:47:06
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnittsindikatoren über mehrere Zeitrahmen hinweg, um die Trendkonsistenz zu bestimmen, und nimmt während des Tages Scalping-Aktionen vor, um dem Trend zu folgen und Gewinne zu erzielen.

Strategie Logik

Diese Strategie verwendet 8-Perioden- und 20-Perioden- gleitende Durchschnitte auf den 5-Minuten-, 15-Minuten-, 30-Minuten- und 60-Minuten-Zeitrahmen, um Handelssignale zu generieren. Ein Kaufsignal wird generiert, wenn der 8-Perioden-MA über den 20-Perioden-MA überschreitet. Ein Verkaufssignal wird generiert, wenn der 8-Perioden-MA unter den 20-Perioden-MA überschreitet.

Eine Kauf- oder Verkaufsanordnung wird nur platziert, wenn sich die gleitenden Durchschnitte auf allen vier Zeitrahmen ausrichten.

Die Strategie setzt ein festes Gewinnziel, um innerhalb des Tages Gewinn zu erzielen.

Insbesondere verwendet die Strategie die Funktion security ((), um MA-Werte aus verschiedenen Zeitrahmen abzurufen.

Bei der Erstellung von Bestellungen wird die Anzahl der Bestellungen anhand der Anzahl der Bestellungen ermittelt, die in den einzelnen Zeitrahmen erfolgen.

Nach dem Eintritt in einen Handel verwendet die Strategiestrategy.exit() ein festes Gewinnziel für den Scalping festzulegen.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Das Multi-Timeframe-Design filtert Lärm und reduziert die Handelsfrequenz.

  2. Der Intraday-Scalping mit Gewinnoptimierung schafft eine konstante Akkumulation kleiner Gewinne.

  3. Eine klare Codestruktur, leicht zu verstehen und zu optimieren.

  4. Vernünftige Bedingungen helfen, das Risiko zu kontrollieren.

Risikoanalyse

Potenzielle Risiken dieser Strategie:

  1. Mehrzeitrahmen können subtile Trendveränderungen übersehen.

  2. Häufige Scalping-Trades erhöhen die Kosten.

  3. Das festgelegte Gewinnziel ist nicht flexibel.

  4. Es hängt von den Indikatoren ab, es besteht das Risiko, betrogen zu werden.

Optimierungsrichtlinien

Mögliche Optimierungen:

  1. Fügen Sie mehr Zeitrahmen für robustere Signale hinzu.

  2. Dynamisches Gewinnziel auf Basis von ATR.

  3. Zusätzliche Filter wie Lautstärker oder Historie Extreme.

  4. Optimierung der MA-Perioden für die besten Parameter.

  5. Fügen Sie maschinelles Lernen hinzu, um die Signalverlässlichkeit zu beurteilen.

Zusammenfassung

Insgesamt ist dies eine typische Multi-Timeframe Trend-Tracking-Strategie mit Intraday-Scalping. Die Logik ist klar und der Code gut strukturiert. Mit der richtigen Optimierung kann es zu einer sehr praktischen Scalping-Strategie-Vorlage werden.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) 
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr=  input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)


//Plot  EMA-Differenz Aktueller Timeframe

dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)

//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)


//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0



//5M EMA

htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
 
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0

//15M EMA

htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
 
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0





//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
 
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0



//60M EMA

htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
 
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0

islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0

plot(dif60M,"dif",color60,linewidth=3,transp=70)

islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and  isshort60 ==1 and year > 2017 ? 1 : 0


condition2l= 0 
condition2s = 0

c= alert1 == alert2  and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')

strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0  ) 
strategy.entry("enter short", strategy.short,1,when = isshort == 1  and isshort [1] == 0) 
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)





Mehr