Dieser Artikel wird Ihnen eine quantitative Handelsstrategie vorstellen, die
Diese Strategie beinhaltet vier gemeinsame quantitative Handelsstrategien:
Kanal-Breakout-Strategie: Aufbau der oberen und unteren Kanäle auf der Grundlage der höchsten und niedrigsten Preise in einem bestimmten Zeitraum und Positionen einnehmen, wenn der Preis aus dem Kanal bricht.
Momentum-Strategie: Bestimmung der Dynamik auf der Grundlage von Preisänderungen über einen bestimmten Zeitraum, Long gehen, wenn die Preise schneller steigen, Short gehen, wenn die Preise schneller fallen.
MACD-Strategie: Lange und kurze Positionen auf der Grundlage von MACD-Golden Cross und Dead Cross ermitteln.
Harami-Musterstrategie: Identifizieren Sie potenzielle zukünftige Umkehrungen, indem Sie spezifische Kerzenmuster erkennen und um Wendepunkte handeln.
Diese Strategien haben jeweils ihre Vorteile, die zusammen stabilere Renditen ermöglichen.
Die Channel Breakout-Strategie kann Markttrends erfassen; die Momentum-Strategie kann kurzfristige Trends rechtzeitig verfolgen; die MACD-Strategie kann mittelfristige Trendumkehrungen erkennen; die Harami-Strategie kann wichtige Umkehrpunkte bestimmen.
Durch die Integration in eine Strategie können Sie während der Trending-Märkte Steigerungen und Abstürze verfolgen und umgekehrte Positionen um Wendepunkte herum eröffnen.
Selbstverständlich haben solche Multi-Strategie-Kombinationen auch einige Nachteile:
Die Strategie ist zu komplex und die Parameter sind schwer anzupassen.
Es kann Konflikte zwischen einigen Strategien geben.
Es erhöht die Handelsfrequenz und die Transaktionskosten.
Backtest-Ergebnisse können schlimmer sein als eine einzelne Strategie.
Bei der Verwendung dieser Multi-Strategie-Kombination sollten die Benutzer daher auf die Schwierigkeit der Parameteranpassung achten, das Zusammenspiel zwischen Konflikten testen, die Handelsfrequenz kontrollieren und ausreichend Rücktests durchführen, um ihre langfristige Stabilität zu gewährleisten.
Im Allgemeinen kann dieses integrierte Multi-Strategie Quantitative Trading System sehr reiche Handelskombinationen erhalten und sehr gut in wichtigen Trends abschneiden. Es kombiniert die Vorteile verschiedener Strategien und kann stabilere langfristige positive Renditen erzielen.
/*backtest start: 2023-09-07 00:00:00 end: 2023-09-14 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Channel breakout strategy("all_strategy", overlay=true) length = input(title="Length", minval=1, maxval=1000, defval=5) upBound = highest(high, length) downBound = lowest(low, length) if (not na(close[length])) strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE") strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr) //Momentum length1 = input(12) price = close momentum(seria, length) => mom = seria - seria[length1] mom mom0 = momentum(price, length1) mom1 = momentum( mom0, 1) if (mom0 > 0 and mom1 > 0) strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE") else strategy.cancel("MomLE") if (mom0 < 0 and mom1 < 0) strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE") else strategy.cancel("MomSE") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr) //MACD Strategy fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD if (crossover(delta, 0)) strategy.entry("MacdLE", strategy.long, comment="MacdLE") if (crossunder(delta, 0)) strategy.entry("MacdSE", strategy.short, comment="MacdSE") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr) //Harami pctDw = input(60,minval=0,maxval=90,title="Doji, Min % of Range of Candle for Wicks") pipMin= input(0,minval=0,title="Doji, Previous Candle Min Pip Body Size") sname=input(true,title="Show Price Action Bar Names") cbar = input(false,title="Highlight Harami & Doji Bars") sHm = input(false,title="Show Only Harami Style Doji's") setalm = input(true, title="Generate Alert for Harami & Doji Bars") uha =input(true, title="Use Heikin Ashi Candles for Calculations") bars = input(3,minval=1,maxval=3,step=1, title="Doji, Number of Lookback Bars") // // Use only Heikinashi Candles for all calculations srcclose = uha ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close srcopen = uha ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open srchigh = uha ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high srclow = uha ?security(heikinashi(syminfo.tickerid), timeframe.period, low) : low // pip = syminfo.mintick range = srchigh - srclow // Calculate Doji/Harami Candles pctCDw = (pctDw/2) * 0.01 pctCDb = (100-pctDw) * 0.01 //Lookback Candles for bulls or bears lbBull = bars==1? srcopen[1]>srcclose[1]: bars==2? (srcopen[1]>srcclose[1] and srcopen[2]>srcclose[2]): bars==3?(srcopen[1]>srcclose[1] and srcopen[2]>srcclose[2] and srcopen[3]>srcclose[3]):false lbBear = bars==1? srcopen[1]<srcclose[1]: bars==2? (srcopen[1]<srcclose[1] and srcopen[2]<srcclose[2]): bars==3?(srcopen[1]<srcclose[1] and srcopen[2]<srcclose[2] and srcopen[3]<srcclose[3]):false //Lookback Candle Size only if mininum size is > 0 lbSize = pipMin==0? true : bars==1 ? (abs(srcopen[1]-srcclose[1])>pipMin*pip) : bars==2 ? (abs(srcopen[1]-srcclose[1])>pipMin*pip and abs(srcopen[2]-srcclose[2])>pipMin*pip) : bars==3 ? (abs(srcopen[1]-srcclose[1])>pipMin*pip and abs(srcopen[2]-srcclose[2])>pipMin*pip and abs(srcopen[3]-srcclose[3])>pipMin*pip) : false dojiBu = (srcopen[1] >= max(srcclose,srcopen) and srcclose[1]<=min(srcclose,srcopen)) and lbSize and (abs(srcclose-srcopen)<range*pctCDb and (srchigh-max(srcclose,srcopen))>(pctCDw*range) and (min(srcclose,srcopen)-srclow)>(pctCDw*range))? 1 : 0 dojiBe = (srcclose[1] >= max(srcclose,srcopen) and srcopen[1]<=min(srcclose,srcopen)) and lbSize and (abs(srcclose-srcopen)<range*pctCDb and (srchigh-max(srcclose,srcopen))>(pctCDw*range) and (min(srcclose,srcopen)-srclow)>(pctCDw*range))? 1 : 0 haramiBull = (srcopen<=srcclose or (max(srcclose,srcopen)-min(srcclose,srcopen))<pip*0.5) and lbBull and dojiBu haramiBear = (srcopen>=srcclose or (max(srcclose,srcopen)-min(srcclose,srcopen))<pip*0.5) and lbBear and dojiBe dojiBull = not sHm and not haramiBull and not haramiBear and lbBull and dojiBu dojiBear = not sHm and not haramiBull and not haramiBear and lbBear and dojiBe // plotshape(haramiBear and sname?srchigh:na,title="Bearish Harami",text='Bearish\nHarami',color=red, style=shape.arrowdown,location=location.abovebar) plotshape(haramiBear and cbar?max(srcopen,srcclose):na,title="Bear Colour Harami",color=red, style=shape.circle,location=location.absolute,size=size.normal) // plotshape(haramiBull and sname?srclow:na,title="Bullish Harami",text='Bullish\nHarami',color=green, style=shape.arrowup,location=location.belowbar) plotshape(haramiBull and cbar?max(srcopen,srcclose):na,title="Bull Colour Harami",color=green, style=shape.circle,location=location.absolute,size=size.normal) // plotshape(dojiBear and sname?srchigh:na,title="Bearish Doji",text='Bearish\nDoji',color=fuchsia, style=shape.arrowdown,location=location.abovebar) plotshape(dojiBear and cbar?max(srcopen,srcclose):na,title="Bear Colour Doji",color=fuchsia, style=shape.circle,location=location.absolute,size=size.normal) // plotshape(dojiBull and sname?srclow:na,title="Bullish Doji",text='Bullish\nDoji',color=aqua, style=shape.arrowup,location=location.belowbar) plotshape(dojiBull and cbar?max(srcopen,srcclose):na,title="Bull Colour Doji",color=aqua, style=shape.circle,location=location.absolute,size=size.normal) // Only Alert harami Doji's bcolor = haramiBull ? 1 : haramiBear ? 2 : dojiBull ? 3 : dojiBear ? 4 : 0 baralert = setalm and bcolor>0 alertcondition(baralert,title="PACDOJI Alert",message="PACDOJI Alert") // plotshape(na(baralert[1])?na:baralert[1], transp=0,style=shape.circle,location=location.bottom, offset=-1,title="Bar Alert Confirmed", color=bcolor[1]==1 ? green : bcolor[1]==2? red : bcolor[1]==3? aqua : bcolor[1]==4? fuchsia : na) //EOF