Momentum Balance Channel Trendfolgestrategie


Erstellungsdatum: 2023-12-12 18:07:31 zuletzt geändert: 2023-12-12 18:07:31
Kopie: 0 Klicks: 621
1
konzentrieren Sie sich auf
1621
Anhänger

Momentum Balance Channel Trendfolgestrategie

Überblick

Die Strategie erlaubt es, Trends zu verfolgen, indem sie Kanal- und Dynamikanalysen berechnet, Trends erkennen und Trends verfolgen. Konkret kombiniert sie Dynamikanalysen und Gleichgewichtskanal-Analysen, wobei die beiden in Kombination verwendet werden, um gleichzeitig in langfristige Trends einzugreifen und gleichzeitig die Gleichgewichtskanäle zu nutzen, um mehrere Gewinnbereiche zu locken.

Strategieprinzip

Die Strategie basiert auf zwei Hauptindikatoren:

  1. Dynamischer Indikator (DMI): Der Indikator erzeugt Handelssignale, wenn die Markttrends zu hoher Leerheit sind, als wenn der Schwellenwert gesetzt wird.

  2. Gleichgewichtskanal (Keltner Channel): Beurteilung der Trendzonen, Kaufzeiten bei einem Kursbruch und Stillstandssignale bei einem Kursbruch.

Die spezifische Handelslogik lautet: Wenn der +DI-Dynamik-Indikator größer ist als der eingestellte Schwellenwert (default 32), wird er als mehrköpfiger Trend beurteilt, wobei der Preis den Gleichgewichtskanal überschreitet und ein Kaufsignal erzeugt. Anschließend wird der Gleichgewichtskanal als Stop-Line genutzt, um den Stop-Loss zu verfolgen und den Gewinn zu schützen.

Die Strategie kombiniert die Vorteile von zwei Indikatoren, nutzt die Dynamik-Indikatoren, um die Richtung des Trends zu bestimmen, und nutzt die Balance-Channel, um die Einstiegszeit und die Stop-Loss-Region zu bestimmen. Die Kombination aus zwei Indikatoren ermöglicht es der Strategie, die Trends frühzeitig zu entdecken und gleichzeitig die Gewinn- und Stop-Loss-Indikatoren zu nutzen.

Analyse der Stärken

  1. Die Strategie nutzt Dynamikindikatoren, um die Markttrends frühzeitig zu ermitteln, und ist effektiver als rückständige Indikatoren wie einfache gleitende Durchschnitte.

  2. Der Einsatz von Gleichgewichtskanälen, um bestimmte Handelsbereiche zu bestimmen, ermöglicht eine effektive Sperrung von Gewinnbereichen.

  3. Die Indikatorparameter und die Handelsregeln sind streng und vernünftig, die Rückmeldedaten haben sich gut entwickelt und die Wirksamkeit wurde in der Praxis überprüft.

  4. Die Strategie ist einfach, klar und leicht zu verstehen und eignet sich für Anfänger, die mit Quantitative Trading beginnen.

  5. Die Strategie ist risikokontrollierbar, mit mittlerer, linearer und dynamischer Stop-Loss-Strategie, um Einzelschäden effektiv zu kontrollieren.

Risikoanalyse

  1. Die Strategie gilt nur für Trendbewegungen und nicht für die Korrektur von volatilen Märkten, wenn der QtCore-Kanal größer wird und der mittlere Stop-Loss zu locker ist, um den Verlust zu kontrollieren.

  2. Der DMI-Indikator ist etwas zurückgeblieben, und es ist unmöglich, eine Trendbestätigung zu bestimmen, und ein früher Eintritt in den Trend kann zu Verlusten führen.

  3. Es besteht die Gefahr, dass ein fester Prozentsatz Stop-Loss-Methode nach einem starken Schlag nicht in den Trend zurückdrängt und die Folge verpasst.

  4. Die Daten sind ausreichend, aber die Festplatte benötigt noch lange Zeit, um die Parameterstabilität zu überprüfen.

Optimierungsrichtung

  1. Verschiedene Stop-Methoden können getestet werden, z. B. ATR-Stopp, Mobile Stop und andere Methoden, um die Festprozentsatz-Stopp zu ersetzen.

  2. Es können auch untergeordnete Bestätigungskennzahlen hinzugefügt werden, wie z. B. die Erhöhung der Umsätze, um die Einreise nach der Trendbestätigung zu gewährleisten.

  3. Tests mit verschiedenen Parameterkombinationen können optimiert werden, um die optimale Parameterkombination zu finden.

  4. Die Parameterbeständigkeit kann durch schrittweise Optimierung und Bewegungsfeedback überprüft werden.

Zusammenfassen

Diese Strategie verwendet eine doppelte Indikator-Urteilsverwendung, um eine effiziente Erfassung der Trendlage zu erreichen. Die Strategie ist einfacher, intuitiver, logischer, klarer und kann als eine der Einstiegsstrategien für quantifizierte Geschäfte verwendet werden.

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

//Original Idea by: @Wunderbit


//@version=4
strategy("Keltner Channel [LINKUSDT] 1H", overlay=true, initial_capital=3000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.1)


/// TREND
trend_cond = input(true, title="Enable Ribbon Filter")
ribbon_period = input(30, "Ribbon 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(80, "KELTNER Period", step=1, minval=1)
mult         = input(3.0,"KELTNER Multiple", step=0.1)

// Calculate Keltner Channel
ma      = ema(source, length)
range   = useTrueRange ? tr : high - low
rangema = ema(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 //

lensig = input(14, title="ADX Smoothing", minval=1, maxval=50)
len = input(14, minval=1, title="DI Length")
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / trur)
minus = fixnan(100 * rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)

trig_level=input(title="+DI Trigger Level", defval=32, minval=1,step=1)
//trig_level_adx=input(title="ADX Trigger Level", defval=30, minval=1,step=1)

//plot(adx, color=#FF006E, title="ADX")
//plot(plus, color=#0094FF, title="+DI")
//plot(minus, color=#FF6A00, title="-DI")
// plot(trig_level, 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(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
    
///// Component Code Stop //////////////////////////////////////////

//////////////// STRATEGY EXECUTION //////////////////////////

// STRATEGY CONDITION
// LONG

long = ((open > lower and open < upper) and close > upper) and plus > minus and plus > trig_level and volume[0] > volume[1]
entry_long = trend_cond ? long and UT : long
exit_long = (close < ma) //or low < SL_long

//LONG SET UP
// Take Profit / Stop Loss

entry_price_long=valuewhen(entry_long,close,0)
//SL_long = entry_price_long * (1 - long_sl_inp)

long_tp1_inp = input(8, title='Long Take Profit 1 Target %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty %", step=1)

long_tp2_inp = input(16, title='Long Take Profit 2 Target %', step=0.1)/100
long_tp2_qty = input(30, 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 EXECUTION
if testPeriod()

    // LONG
    
    strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTRY 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")