EMA移動平均双方向ダイナミックストップロスに基づくクロスマーケットトレンド追跡戦略


作成日: 2024-01-29 09:57:20 最終変更日: 2024-01-29 09:57:20
コピー: 0 クリック数: 587
1
フォロー
1617
フォロワー

EMA移動平均双方向ダイナミックストップロスに基づくクロスマーケットトレンド追跡戦略

概要

この戦略は,EMA平均の金叉死叉を二方向に追跡し,動的な長短ストップ・ローンを設定して,トレンドの動きを捕捉します.

戦略原則

  1. 計算速度のEMA線 ((5日) と遅いEMA線 ((20日)
  2. 速行線が下からゆっくりとした線を横切るときは,多めに;速行線が上からゆっくりとした線を横切るときは,空いて
  3. スタート価格として動的ストップラインを設定します.*(1-長期ポジションのストップ・パーセンテージ) ダウン後,入場価格として動的ストップ・ラインを設定する*ショートポジションのストップ・パーセンテージ
  4. 価格が相応のストップラインを触発すると,ストップアウトされます.

優位分析

  1. EMA平均線はトレンドを追跡する能力が強く,双方向のクロス形成タイマーで,トレンドの機会を効果的にロックできます.
  2. ダイナミックなストップラインの計算,利益の実現後に市場に出る,最大限のトレンド利益をロックする
  3. VWPを追加フィルタリング条件として採用し,遮断を回避し,信号の質を向上させる.

リスク分析

  1. 純トレンド策略で,市場の揺れに巻き込まれる
  2. ストップダメージが緩やかすぎると,損失が拡大する恐れがあります.
  3. EMA平均線生成信号の遅滞により,市場最適位を逃している可能性がある

ATRを活用してリスク管理,短期停止戦略の最適化,または他の指標のフィルターノイズ取引と組み合わせることで最適化することができる.

最適化の方向

  1. ATRやDONCHなどのダイナミックストップインジケータと組み合わせて,市場に適したストップラインを設定します.
  2. MACD,KDJなどの他の技術指標のフィルター信号を追加し,誤入誤出を減らす
  3. 最適な速行平均線長組み合わせを探し出すための最適化パラメータ
  4. 機械学習で最適なパラメータを探してみましょう.

要約する

この戦略は全体的に非常に典型的なトレンド追跡戦略である。双EMAが金叉死叉を形成し,動的ストップは,トレンドを有効にロックして利益を得ることができる。一方で,一定の遅れのリスクとストップが過幅されるリスクもある。パラメータ最適化,リスク管理,信号フィルタリングなどの方法によって,より良い戦略パフォーマンスを得ることができる。

ストラテジーソースコード
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("EMA Crossover Strategy", shorttitle="EMAC", overlay=true,calc_on_every_tick=true)

// Input parameters
shortEmaLength = input(5, title="Short EMA Length")
longEmaLength = input(20, title="Long EMA Length")
priceEmaLength = input(1, title="Price EMA Length")

// Set stop loss level with input options (optional)
longLossPerc = input.float(0.05, title="Long Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

shortLossPerc = input.float(0.05, title="Short Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

// Calculating indicators
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
//priceEma = ta.ema(close, priceEmaLength)
vwap = ta.vwap(close)

// Long entry conditions
longCondition = ta.crossover(shortEma, longEma) and close > vwap
// Short entry conditions
shortCondition = ta.crossunder(shortEma, longEma) and close > vwap

// STEP 2:
// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


if (longCondition)
    strategy.entry("Enter Long", strategy.long)
    strategy.exit("Exit Long",from_entry = "Enter Long",stop= longStopPrice)
plotshape(series=longCondition, title="Long Signal", color=color.green, style=shape.triangleup, location=location.belowbar)


if (shortCondition)
    strategy.entry("Enter Short", strategy.short)
    strategy.exit("Exit Short", from_entry = "Enter Short",stop = shortStopPrice)
plotshape(series=shortCondition, title="Short Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Stop loss levels
//longStopLoss = (1 - stopLossPercent) * close
//shortStopLoss = (1 + stopLossPercent) * close

// Exit conditions
//strategy.exit("Long", from_entry="Long", loss=longStopLoss)
//strategy.exit("Short", from_entry="Short", loss=shortStopLoss)

// Plotting indicators on the chart
plot(shortEma, color=color.yellow, title="Short EMA")
plot(longEma, color=color.green, title="Long EMA")
plot(close, color=color.black, title="Close")
plot(vwap, color=color.purple, title="VWAP")

// Plot stop loss values for confirmation
plot(strategy.position_size > 0 ? longStopPrice : na,
     color=color.red, style=plot.style_line,
     linewidth=2, title="Long Stop Loss")

plot(strategy.position_size < 0 ? shortStopPrice : na,
     color=color.blue, style=plot.style_line,
     linewidth=2, title="Short Stop Loss")
// Plotting stop loss lines
//plot(longStopLoss, color=color.red, title="Long Stop Loss", linewidth=2, style=plot.style_line)
//plot(shortStopLoss, color=color.aqua, title="Short Stop Loss", linewidth=2, style=plot.style_line)