Die Ressourcen sind geladen. Beförderung...

Doppel gleitender Durchschnittskanaltrend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2024-09-26 16:28:19
Tags:SMAEMARSIMACD

img

Übersicht

Diese Strategie ist ein Trend-following-System, das auf doppelten gleitenden Durchschnitten und Kanälen basiert. Es nutzt Crossover-Signale von kurz- und langfristigen gleitenden Durchschnitten, kombiniert mit Kanälen, die durch exponentielle gleitende Durchschnitte (EMA) gebildet werden, um Markttrends zu erfassen und Trades auszuführen. Die Strategie ist sowohl für lange als auch für kurze Positionen anwendbar und verwendet Stop-Loss- und Take-Profit-Mechanismen für das Risikomanagement und das Gewinnmanagement.

Strategieprinzip

Die Kernlogik der Strategie umfasst folgende Schlüsselelemente:

  1. Zwei einfache gleitende Durchschnitte (SMA) als primäre Trendindikatoren: 55- und 300-Perioden-SMA.
  2. Zwei exponentielle gleitende Durchschnitte (EMAs), die einen Handelskanal bilden: 576-Perioden- und 676-Perioden-EMA.
  3. Lange Eintrittssignale werden ausgelöst, wenn die kurzfristige SMA über die langfristige SMA oder EMA überschreitet; kurze Eintrittssignale treten auf, wenn die kurzfristige SMA unter die langfristige SMA oder EMA überschreitet.
  4. Festpunkt-Stop-Loss- und Take-Profit-Strategie mit einem Stop-Loss von 1/70 des Einstiegspreises und einem Take-Profit von 1/140 des Einstiegspreises.
  5. Ein Trailing-Stop-Mechanismus wird aktiviert, wenn der Gewinn 300 Punkte erreicht, um die angesammelten Gewinne zu schützen.
  6. Die Strategie beinhaltet Ausstiegsbedingungen, wie z. B. automatisches Schließen der Position, wenn der Preis ein Stop-Loss- oder ein Take-Profit-Niveau erreicht.

Strategische Vorteile

  1. Integration mehrerer Indikatoren: Die Kombination mehrerer gleitender Durchschnitte und EMA-Kanäle verbessert die Genauigkeit der Trendenkennung.
  2. Zwei-Wege-Handel: Die Strategie kann sowohl auf bullischen als auch auf bärischen Märkten profitieren und die Kapitaleffizienz verbessern.
  3. Risikomanagement: Verwendet festgelegte Stop-Loss- und Take-Profit-Verfahren, um das Risiko für jeden Handel effektiv zu kontrollieren.
  4. Gewinnschutz: Verwendet einen Trailing Stop-Mechanismus, um bei anhaltenden Trends teilweise Gewinne zu erzielen.
  5. Flexibilität: Die Strategieparameter können an unterschiedliche Marktbedingungen angepasst werden.

Strategische Risiken

  1. Das Risiko liegt im Bereich des Marktes: In Seitenmärkten können häufige falsche Signale zu aufeinanderfolgenden Verlusten führen.
  2. Schwankungsrisiko: In stark volatilen Märkten können sich die tatsächlichen Ausführungspreise erheblich von den idealen Preisen abwenden.
  3. Übertrading: Häufige Handelssignale können zu übermäßigen Transaktionskosten führen.
  4. Parameterempfindlichkeit: Die Strategieleistung kann sehr empfindlich auf die Parameter-Einstellungen reagieren und möglicherweise häufige Anpassungen für verschiedene Marktumgebungen erfordern.

Strategieoptimierungsrichtlinien

  1. Einbeziehung von Volatilitätsindikatoren: Erwägen Sie, ATR (Average True Range) hinzuzufügen, um die Stop-Loss- und Take-Profit-Level dynamisch anzupassen und sich an die unterschiedliche Marktvolatilität anzupassen.
  2. Verbesserung der Filterung der Trendstärke: Einführung von ADX (Average Directional Index), um schwache Trendsignale auszufiltern und Verluste durch falsche Ausbrüche zu reduzieren.
  3. Optimieren Sie den Einstiegszeitplan: Erwägen Sie, RSI (Relative Strength Index) oder MACD (Moving Average Convergence Divergence) zu kombinieren, um den Einstiegszeitplan zu verbessern und die Gewinnrate zu erhöhen.
  4. Verfeinerung des Geldmanagements: Implementierung einer dynamischen Positionsgröße, Anpassung der Handelsgrößen anhand des Kontokapitals und der Marktvolatilität.
  5. Verlängern Sie die Backtestdauer: Führen Sie längerfristige Backtests durch, um die Stabilität der Strategie in verschiedenen Marktumgebungen zu überprüfen.

Schlussfolgerung

Diese doppelte gleitende Durchschnittskanal-Trendfolgestrategie bietet ein umfassendes Handelssystem, indem sie mehrere technische Indikatoren kombiniert. Sie erfasst nicht nur wichtige Trends, sondern beinhaltet auch Risikomanagement- und Gewinnschutzmechanismen. Während einige potenzielle Risiken bestehen, hat die Strategie durch kontinuierliche Optimierung und Parameteranpassung das Potenzial, unter verschiedenen Marktbedingungen gut zu funktionieren. Zukünftige Optimierung sollte sich auf die Verbesserung der Signalqualität, die Verbesserung des Risikomanagements und die Steigerung der Anpassungsfähigkeit der Strategie konzentrieren.


/*backtest
start: 2024-08-26 00:00:00
end: 2024-09-24 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RC BTC Vegas 5min free ", overlay=true )

// 定义输入参数
short_ma_length = input.int(55, title="Short MA Length")
long_ma_length = input.int(300, title="Long MA Length")

ema1_length = input.int(576, title="EMA 1 Length")
ema2_length = input.int(676, title="EMA 2 Length")
// 计算移动平均线 
short_ma = ta.sma(close, short_ma_length)
long_ma = ta.sma(close, long_ma_length)
ema1 = ta.ema(close, ema1_length)
ema2 = ta.ema(close, ema2_length)
// 确定买入和卖出信号 
enter_long = ta.crossover(short_ma +5 , ema1)
enter_long2 = ta.crossover(short_ma +5 , long_ma)
enter_long3 =ta.crossover(long_ma+5  , ema1)

exit_long = ta.crossunder(short_ma -5, ema1) 
exit_long2 = ta.crossunder(short_ma -5, long_ma) 
exit_long3 = ta.crossunder(long_ma-5 , ema1)

// 记录进场价格
var float long_stop_loss = na
var float long_take_profit = na

if (enter_long or exit_long  )
    long_stop_loss := close

if (enter_long or exit_long)
    long_take_profit := close

// 根据进场价格计算止损和止盈点数 
stop_loss_points = long_stop_loss /70
take_profit_points  = long_take_profit /140
// 设置固定点数的止损和止
Along_stop_loss = close - stop_loss_points
Along_take_profit = close + take_profit_points
short_stop_loss = close + stop_loss_points
short_take_profit = close - take_profit_points

// 检查持仓利润是否达到300点
long_profit_target_reached = (strategy.position_size > 0 and (close - strategy.position_avg_price) >= take_profit_points)
short_profit_target_reached = (strategy.position_size < 0 and (strategy.position_avg_price - close) >= take_profit_points)

// 即时止损和止盈检查
long_stop_loss_hit = (strategy.position_size > 0 and close <= strategy.position_avg_price - stop_loss_points)
long_take_profit_hit = (strategy.position_size > 0 and close >= strategy.position_avg_price + take_profit_points)
short_stop_loss_hit = (strategy.position_size < 0 and close >= strategy.position_avg_price + stop_loss_points)
short_take_profit_hit = (strategy.position_size < 0 and close <= strategy.position_avg_price - take_profit_points)
// 上一根K棒的止盈止损检查
long_stop_loss_hit_prev = (strategy.position_size > 0 and low[1] <= strategy.position_avg_price - stop_loss_points)
long_take_profit_hit_prev = (strategy.position_size > 0 and high[1]>= strategy.position_avg_price + take_profit_points)
short_stop_loss_hit_prev = (strategy.position_size < 0 and high[1] >= strategy.position_avg_price + stop_loss_points)
short_take_profit_hit_prev = (strategy.position_size < 0 and low[1] <= strategy.position_avg_price - take_profit_points)

// 创建警报条件
alertcondition(long_stop_loss_hit, title="Long Stop Loss Hit", message="Long position stop loss hit")
alertcondition(long_take_profit_hit, title="Long Take Profit Hit", message="Long position take profit hit")
alertcondition(short_stop_loss_hit, title="Short Stop Loss Hit", message="Short position stop loss hit")
alertcondition(short_take_profit_hit, title="Short Take Profit Hit", message="Short position take profit hit")
// 移动止损输入
initialProfitLevel = input.float(9, title="Initial Profit Level (points)")
trailingStopIncrement = input.float(3, title="Trailing Stop Increment (points)")
if (close - long_take_profit >= 150)
    strategy.exit("多單移平", from_entry="Buy", trail_price=close+5 , trail_offset=5  )
if (close - long_take_profit <= -150)
    strategy.exit("空單移平", from_entry="Sell", trail_price=close-5 , trail_offset=5)

// 执行多单交易
if (enter_long or enter_long2  )
    strategy.entry("Buy", strategy.long, qty=1 , comment = "做多")

if (long_stop_loss_hit or long_take_profit_hit  ) 
    strategy.close("Buy",comment = "多單平倉")
//死亡交叉才跟著做空就打開
if (exit_long  or exit_long2  )
    strategy.entry("Sell" ,strategy.short, qty=1 , comment = "做空")

// 执行空单交易
if ( short_take_profit_hit or short_stop_loss_hit ) 
    strategy.close("Sell",comment = "空單平倉")

// 绘制移动平均线
plot(short_ma, title="Short MA", color=color.blue)
plot(long_ma, title="Long MA", color=color.red)

// 绘制进场和出场点
plotshape(series=enter_long, location=location.belowbar, color=color.green, style=shape.labelup, text="做多")
plotshape(series=exit_long , location=location.abovebar, color=color.red, style=shape.labeldown, text="做空") 
plotshape(series=long_take_profit_hit , location=location.abovebar, color=color.yellow, style=shape.labeldown, text="多單止盈")  
plotshape(series=short_take_profit_hit , location=location.abovebar, color=color.yellow, style=shape.labeldown, text="空單止盈") 
plotshape(series=short_stop_loss_hit , location=location.abovebar, color=color.black, style=shape.labeldown, text="空單止損") 
plotshape(series=long_stop_loss_hit , location=location.abovebar, color=color.black, style=shape.labeldown, text="多單止損") 
 
// 绘制止盈和止损点
plot(series=enter_long ? Along_take_profit : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)
plot(series=enter_long ? Along_stop_loss : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)


Verwandt

Mehr