Momentum-Preistrend-Tracking-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-13 16.44:58
Tags:

img

Übersicht

Die Momentum-Preistrend-Tracking-Strategie verwendet mehrere Momentum-Indikatoren, um Preistrends zu identifizieren, Positionen zu Beginn von Trends zu etablieren und durch Stop-Profit- und Stop-Loss-Einstellungen Gewinne zu erzielen, um Preistrends zu verfolgen.

Strategie Logik

Die Strategie zur Verfolgung des Momentumpreistendens bezieht sich hauptsächlich auf folgende technische Indikatoren:

  1. ROC-Indikator: Dieser Indikator berechnet die prozentuale Preisänderungsrate über einen bestimmten Zeitraum, um die Preisdynamik zu bestimmen. Wenn ROC positiv ist, bedeutet dies, dass die Preise steigen. Wenn ROC negativ ist, bedeutet dies, dass die Preise sinken. Die Strategie verwendet den ROC-Indikator, um die Richtung des Preistrends zu bestimmen.

  2. Bulls Power und Bears Power Indikator: Dieser Indikator spiegelt den Machtvergleich zwischen Bullen und Bären wider. Bulls Power > 0 zeigt an, dass die Macht der Bullen größer ist als die der Bären und die Preise steigen. Die Strategie verwendet diesen Indikator, um die Kursrichtung vorherzusagen, indem sie die Macht von Bullen und Bären vergleicht.

  3. Divergenz: Dieser Indikator identifiziert eine Trendwende, indem er die Preis- und Volumendivergenz berechnet.

  4. Donchian Channel: Dieser Indikator konstruiert einen Kanal mit den höchsten und niedrigsten Preisen, und die Kanalgrenzen können als Unterstützung und Widerstand dienen.

  5. Beweglicher Durchschnitt: Dieser Indikator gleicht Preisschwankungen aus, um die allgemeine Trendrichtung zu ermitteln.

Die Strategie bestimmt Preistrends und Umkehrpunkte auf der Grundlage der oben genannten Indikatoren und setzt nach Indikatorsignalen zu Beginn der Trends lange oder kurze Positionen ein. Sie schließt dann Positionen rechtzeitig basierend auf Stop-Profit- und Stop-Loss-Punkten, um Preistrends zu erfassen.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Verwendung mehrerer Indikatoren zur Ermittlung von Trends verringert die Wahrscheinlichkeit von Fehleinschätzungen.

  2. Die Verwendung von Indikatordivergenzen ermöglicht eine genaue Erfassung von Trendumkehrpunkten.

  3. Die Kombination von Kanälen und gleitenden Durchschnitten hilft, den allgemeinen Trend zu bestimmen.

  4. Die Festlegung von Stop-Profit und Stop-Loss sichert die Gewinnrate rechtzeitig und vermeidet eine Erhöhung der Abzüge.

  5. Durch anpassbare Parameter kann die Strategie an verschiedene Zeiträume und Produkte angepasst werden.

  6. Die klare Logik erleichtert eine weitere Optimierung.

Risikoanalyse

Zu den potenziellen Risiken dieser Strategie gehören:

  1. Die mehrfachen Indikatoren können die Wahrscheinlichkeit eines fehlerhaften Signals erhöhen.

  2. Zu geringe Stop-Loss-Punkte können die Wahrscheinlichkeit eines Stop-Loss erhöhen, während zu breite Stop-Loss-Punkte die Drawdowns erhöhen können.

  3. Eine blinde Anwendung in unterschiedlichen Marktperioden kann zu einer Anpassungsunfähigkeit führen.

  4. Um übermäßige Renditen zu erzielen, ist ausreichend Kapital zur Unterstützung von Einheiten mit hoher Position erforderlich.

  5. Es bestehen Risiken, dass der Backtest übermäßig geeignet ist, und die tatsächliche Handelsleistung ist unsicher.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimierung der Indikatorparameter, um die optimalen Kombinationen für verschiedene Zeiträume und Produkte zu finden.

  2. Einführung von Algorithmen für maschinelles Lernen, um automatisch die optimalen Parameter zu finden.

  3. Einbau anpassungsfähiger Stop-Loss-Mechanismen auf Basis der Marktbedingungen.

  4. Einbeziehen Sie hochfrequente Faktoren und Grundlagen, um Alpha zu verbessern.

  5. Entwicklung automatisierter Prüfrahmen für die Optimierung von Parametern und die Leistungsüberprüfung.

  6. Einführung von Risikomanagement-Modulen zur Kontrolle der Positionsgröße und zur Verringerung von Drawdowns.

  7. Um die Stabilität zu verbessern, simulierte und Live-Handel und Tests hinzuzufügen.

Schlussfolgerung

Diese Strategie kombiniert mehrere Momentum-Indikatoren, um Preistrends zu bestimmen, und verwendet Stop-Profit/Loss, um Gewinne zu erzielen. Sie kann Trends mit starker Stabilität effektiv erfassen. Weitere Verbesserungen bei Parameter-Tuning, Strukturoptimierung und Risikokontrolle werden ihre Leistung und das Risikomanagement verbessern. Die Strategie bietet eine zuverlässige und einfach zu bedienende Trendfolgelösung für den quantitativen Handel.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")






Mehr