Diese Strategie bestimmt die allgemeine Markttrendrichtung durch Berechnung zweier exponentieller gleitender Durchschnitte (EMA) über verschiedene Zeitrahmen und identifiziert überkaufte und überverkaufte Chancen entlang der Trendrichtung mit adaptiven Bollinger Bands zur Umsetzung des Trendhandels.
Die 200-Perioden-EMA und die 30-Perioden-EMA werden berechnet. Ist die 200-Perioden-EMA größer als die 30-Perioden-EMA, wird der langfristige Trend als aufwärts ermittelt. Andernfalls wird er als abwärts ermittelt.
Nach der Bestimmung der Trendrichtung werden die Basislinie, das obere Band und das untere Band der Bollinger Bands berechnet. Die Basislinie verwendet SMA über einen konfigurierbaren Zeitrahmen (z. B. 8 Perioden). Die Bandbreite ist ein konfigurierbarer Multiplikator (z. B. 1.3 und 1.1) der Amplitude der höchsten und niedrigsten Preise über den gleichen Zeitraum wie die Basislinie.
Wenn der langfristige Trend nach oben geht, signalisiert der unterere Bandbruch einen langen Einstieg; wenn der langfristige Trend nach unten geht, signalisiert der obere Bandbruch einen kurzen Einstieg.
Um falsche Ausbrüche zu filtern, wird überprüft, ob die Veränderungsrate über die letzte Kerze vor dem Ausbruch unter einem konfigurierbaren Schwellenwert liegt (z. B. 3%), und die Bandbreite größer als ein konfigurierbares Niveau ist (z. B. 2,2% des Schlusskurses).
Nach Eröffnung von Positionen werden konfigurierbare Stop Loss (z. B. -3%) und Take Profit (z. B. 10%) eingestellt, um Gewinne zu erzielen.
Die doppelten EMAs definieren den Haupttrend und vermeiden eine ungeordnete Eröffnung von Positionen, wenn der Haupttrend unklar ist.
Die adaptive Bollinger Bands setzen Eingangspunkte entlang des Trends.
Die Veränderungsrate und die Mindestbreitenanforderungen filtern falsche Ausbrüche effektiv.
Die Stop-Loss- und Take-Profit-Einstellungen sperren die Gewinne angemessen, während die Risiken unter Kontrolle bleiben.
Die doppelten EMAs sind nicht in der Lage, Trendumkehrpunkte genau zu lokalisieren und verpassen Gelegenheiten an Trendwendepunkten.
Die falsche Einstellung der BB-Parameter kann zu falschen Signalen führen.
Festgesetzte Stop-Loss- und Take-Profit-Verfahren können sich nicht an Marktschwankungen anpassen.
Einbeziehung anderer Indikatoren zur Ermittlung großer und sekundärer Trendumkehrungen.
Dynamische Anpassung der BB-Parameter.
Setzen Sie bedingte Aufträge für Stop Loss und Take Profit basierend auf spezifischen Kriterien.
Diese Strategie implementiert den Trendhandel, indem sie den Haupttrend mithilfe von doppelten EMAs beurteilt und Chancen mit Bollinger Bands identifiziert. Ihre Stärke liegt darin, angemessen Einstiegs-, Stop-Loss- und Gewinnbedingungen festzulegen, um Trendgewinne zu sichern. Es gibt auch einige Risiken, wie das Versagen, Trendwendepunkte und unsachgemäße BB-Parameter-Einstellungen zu erfassen. Weitere Optimierungen in diesen Aspekten ermöglichen es der Strategie, Trendgewinne besser zu nutzen.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 ////////////////////////////////////////////////////////////////////// // Component Code Start testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2039, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop strategy("Custom Band Strategy", overlay=true) source = close //종가 기준 //추세 조건 설정 emaLong = ema(source, input(200, minval=0)) emaShort = ema(source, input(30, minval=0)) trend = if emaShort>=emaLong 1 else -1 plot(emaLong, color=red, transp=0) plot(emaShort, color=blue, transp=0) //BB 계산(default 14/3.2) length = input(8, minval=1) basis = sma(source, length) plot(basis, color=green, transp=0) max=highest(abs(source-basis), length) factor1 = input(1.3, minval=0.5) factor2 = input(1.1, minval=0.5) upper = if trend==1 basis + max*factor1 else basis + max*factor2 lower = if trend==-1 basis - max*factor1 else basis - max*factor2 plot1 = plot(upper) plot2 = plot(lower) fill(plot1, plot2, transp=80, color=green) //밴드 이탈 후 재진입 조건 설정 cross_over = (low<=lower and close>=lower) or crossover(close,lower) cross_under = (high>=upper and close<=upper) or crossunder(close,upper) //변동율 계산 maxCandle=highest(abs(open-close), length) roc = abs(open-close)/open*100 changerate = input(3, minval=0.0) //수익률 계산 value = abs(strategy.position_size)*strategy.position_avg_price roe = strategy.openprofit/value * 100 expRoeL = (upper-lower)/lower*100 expRoeS = (upper-lower)/upper*100 exp = input(2.2, minval=0.0) target = input(10, minval=0.0) stop = input(-3, minval=-10.0) strategy.close_all(when=roc>=changerate and testPeriod()) strategy.close_all(when=roe>=target and testPeriod()) strategy.close_all(when=roe<=stop and testPeriod()) plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross") plotchar(roc>=changerate,color=red, transp=0, text="roc") plotchar(roe>=target,color=blue, transp=0, text="target") plotchar(roe<=stop,color=green, transp=0, text="stop") minroe = input(2, minval=0.0) strategy.close_all(when=cross_under and roe>minroe and testPeriod()) strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands", comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and //else strategy.close_all(when=cross_over and roe>minroe and testPeriod()) strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands", comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and