Diese Strategie basiert auf drei Hauptindikatoren: dem Trendindikator, dem Keltner-Kanal und dem DM-Indikator.
Der Trendindikator besteht aus SMA und EMA. Der Keltner-Kanal wird verwendet, um den Öffnungs- und Schlusskurs von Kerzen zu bestimmen. Der DM-Indikator dient zur Beurteilung der Richtung von Long und Short.
Das Eingangssignal wird ausgelöst, wenn
Die Strategie hat zwei Gewinnspielstufen und einen Stop-Loss-Spielstufen.
Bei der Ermittlung der Trendrichtung werden SMA- und EMA-Kreuzungen verwendet.
Der Kanal hat drei Linien: mittlere, obere und untere. Die mittlere Linie ist SMA des Schlusskurses mit einer Länge von 81. Die oberen und unteren Bande werden an einem Vielfachen des wahren Bereichs oberhalb und unterhalb der mittleren Linie platziert. Hier verwenden wir 2,5 Mal den wahren Bereich.
Der Keltner-Kanal zeigt Unterstützungs- und Widerstandsniveaus.
Der DM-Indikator enthält ADX, +DI und -DI. +DI misst die Stärke des Aufwärtstrends, während -DI die Stärke des Abwärtstrends misst.
Wenn +DI über die Benchmark (Standard 27) geht, signalisiert dies einen starken Aufwärtstrend und ist gut für einen Long-Entry.
Diese Strategie kombiniert Trend-, Kanal- und Dynamikindikatoren, um die Kursbewegungen und die Long/Short-Richtung effektiv zu bestimmen.
Die Trendidentifizierung ist relativ genau, um Gegentrendgeschäfte zu vermeiden.
Der Keltner-Kanal zeigt klare Unterstützungs- und Widerstandsniveaus.
Der DM-Indikator misst den langen/kurzen Impuls, um die Richtung sicherzustellen.
Strenge Eintrittsregeln helfen, falsche Ausbrüche zu filtern.
Profit- und Stop-Loss-Punkte ermöglichen die Gewinngewinnung.
Es gibt auch einige Risiken, die zu berücksichtigen sind:
Der Trend kann umgekehrt sein, wenn die EMA unterhalb der SMA überschreitet, also gehen Sie rechtzeitig aus.
Der Kanal kann bei starken Trends versagen, nicht bei strengen Unterstützungs-/Widerstandsraten.
DM kann falsche Signale erzeugen, die Preisbewegung überprüfen.
Ein falscher Ausbruch kann einen Einstieg auslösen, aber schnell zurück, mit einem angemessenen Stop-Loss.
Profit- und Stop-Loss-Anwendungen müssen kontinuierlich optimiert werden, um sich an sich ändernde Marktbedingungen anzupassen.
Einige Möglichkeiten zur weiteren Optimierung der Strategie:
Anpassung der Parameter und Prüfung verschiedener Methoden zur Identifizierung von Trends.
Optimieren Sie die Kanalparameter, damit sie besser zur wahren Reichweite passen.
Testen Sie verschiedene DM-Parameter und finden Sie die optimale Kombination.
Fügen Sie mehr Eingabefilter wie Lautstärke hinzu.
Versuchen Sie, den Stop-Loss zu verfolgen, um mehr Gewinne zu erzielen.
Versuche für verschiedene Produkte getrennt, um die besten Parametermengen zu finden.
Die Strategie integriert mehrere Indikatoren zur Bestimmung von Trend, Support/Resistance und Momentum, was es ermöglicht, Trends effektiv zu erfassen und Risiken zu kontrollieren.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Original Idea by: Wunderbit Trading //@version=4 strategy("Keltner Channel ETH/USDT 1H", overlay=true, initial_capital=1000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.07) /// TREND ribbon_period = input(46, "Period", step=1) leadLine1 = ema(close, ribbon_period) leadLine2 = sma(close, ribbon_period) // p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1) // p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1) // fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c) //Upward Trend UT=leadLine2 < leadLine1 DT=leadLine2>leadLine1 ///////////////////////////////////////INDICATORS // KELTNER // source = close useTrueRange = input(true) length = input(81, step=1, minval=1) mult = input(2.5, step=0.1) // Calculate Keltner Channel ma = sma(source, length) range = useTrueRange ? tr : high - low rangema = sma(range, length) upper = ma + rangema * mult lower = ma - rangema * mult plot(ma, title="Middle", color=color.orange) p1=plot(upper, title="Upper", color=color.orange) p2=plot(lower, title="Lower", color=color.orange) fill(p1,p2) // DMI INDICATOR // adxlen = 10 // input(10, title="ADX Smoothing") dilen = input(19, title="DI Length") keyLevel = 23// input(23, title="key level for ADX") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) benchmark=input(title="DMI Benchmark", defval=27, minval=1,step=1) // plot(sig, color=color.red, title="ADX") // plot(up, style=plot.style_histogram, color=color.green, title="+DI") // plot(down, style=plot.style_histogram, color=color.red, title="-DI") // plot(keyLevel, color=color.white, title="Key Level") /////////////////////////////////////////////////////////// ////////////////////////////////////////////////////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(9999, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => true ///// Component Code Stop ////////////////////////////////////////// //////////////// STRATEGY EXECUTION ////////////////////////// //LONG SET UP // Take Profit / Stop Loss long_tp1_inp = input(4.5, title='Long Take Profit 1 %', step=0.1)/100 long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1) long_tp2_inp = input(20, title='Long Take Profit 2%', step=0.1)/100 long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1) long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp) long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp) long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100 long_stop_level = strategy.position_avg_price * (1 - long_sl_inp) // STRATEGY CONDITION // LONG entry_long = ((open > lower and open < upper) and close > upper) and up > down and up > benchmark // and volume[0] > volume[1] entry_price_long=valuewhen(entry_long,close,0) SL_long = entry_price_long * (1 - long_sl_inp) exit_long = (close < lower) or low < SL_long // STRATEGY EXECUTION if testPeriod() // LONG if UT strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTER LONG COMMAND") strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND") //PLOT FIXED SLTP LINE // LONG POSITION plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit") plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit") plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")