複数ターゲット移動平均クロスオーバートレンドフォロー戦略

EMA SL TP
作成日: 2025-02-08 15:22:15 最終変更日: 2025-02-08 15:22:15
コピー: 6 クリック数: 391
1
フォロー
1617
フォロワー

複数ターゲット移動平均クロスオーバートレンドフォロー戦略

概要

この戦略は,均線 (EMA) 交差信号に基づくトレンド追跡システムである. 34周期EMAを主要トレンド指標として採用し,分期リターンとリスク制御機構を組み合わせて,完全自動取引を実現する. 戦略の核心は,価格とEMAの交差を介してトレンドの出発点を捕捉し,複数のリターン目標を設定することによって利益の機会を最大化することです.

戦略原則

戦略は以下の基本原則に基づいています.

  1. 34周期EMAをトレンド判断指標として使用
  2. 価格がEMAを上方へ突破すると,EMA価格の位置に多額のポジションを入れます.
  3. 三重利益目標 ((5%, 10%, 15%) を採用して,分批の止を実現
  4. リスクのコントロールに 7%のストップを設定します.
  5. 10%のポジションを長期保有してトレンドを把握する
  6. 8時間の最小取引間隔で過剰取引を避ける
  7. 固定取引量とダイナミックポジションの規模を支える2つの方法

戦略的優位性

  1. 多重利益目標のデザインで,さまざまな市場環境でうまく機能します.
  2. 長期保有として部分的なポジションを保持することで,大トレンドの利益を得ることができます.
  3. レバレッジ取引がサポートされ,リスク偏向に合わせて調整できます.
  4. 過剰取引を防止するメカニズム
  5. ポジション管理の柔軟性,固定または動的なポジションの選択
  6. 完全に自動化され,人間による介入は不要です.
  7. パラメータは,異なる取引スタイルに適応し,調整可能

戦略リスク

  1. EMAは遅滞の指標であり,入場のタイミングを遅らせる可能性があります.
  2. 変動する市場では複数のストップが発生する可能性があります.
  3. 利子を使うと損失が大きくなる
  4. 固定パーセンテージのストープは,波動の激しい市場では柔軟性がない可能性があります.
  5. 多重利益目標が強気なトレンドから早めに脱却する可能性がある 対策:
  • 傾向がはっきりした市場での使用が推奨されています.
  • 市場変動に応じて調整されたストップレッシング
  • を慎重に使うこと
  • 定期的な最適化パラメータの反測

戦略最適化の方向性

  1. トレンド強度のフィルターを増やして入場品質を向上させる
  2. ATR ストップなどのダイナミック・ストップ・メカニズムを導入する
  3. 取引量確認指標に追加
  4. 適応的な収益目標の仕組みを開発する
  5. 市場環境判断モジュールを追加
  6. 取引間隔を最適化するダイナミック調整メカニズム これらの最適化は,戦略の安定性と収益性を高め,偽信号の影響を軽減します.

要約する

これは,合理的で論理的に明確なトレンド追跡戦略を設計したものです. 均線交差捕捉のトレンド,多重利益目標の利用によるリスク管理,および大きなトレンドを把握するための部分的なポジションの保持です. 戦略の調整性が強く,異なるリスク嗜好のトレーダーの使用に適しています.

ストラテジーソースコード
/*backtest
start: 2024-02-08 00:00:00
end: 2025-02-06 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA25 Long Strategy", overlay=true)

// Inputs
initial_capital = input.float(50000, title="Initial Capital ($)")
leverage = input.int(1, title="Leverage")
mode = input.string("Fixed Volume", title="Position Sizing Mode", options=["Fixed Volume", "Current Balance"])
ema_length = input.int(34, title="EMA Length")
stop_loss_percent = input.float(7, title="Stop Loss (%)", step=0.1) / 100
take_profit_1_percent = input.float(5, title="Take Profit 1 (%)", step=0.1) / 100
take_profit_2_percent = input.float(10, title="Take Profit 2 (%)", step=0.1) / 100
take_profit_3_percent = input.float(15, title="Take Profit 3 (%)", step=0.1) / 100
position_size_percent = input.float(100, title="Position Size (%)", step=1) / 100
long_term_hold_percent = input.float(10, title="Long Term Hold (%)", step=1) / 100
trade_delay = input.int(8, title="Trade Delay (hours)", minval=1) * 60  // Convert hours to minutes

// Calculate EMA
ema = ta.ema(close, ema_length)
// Plot EMA
plot(ema, title="EMA25", color=color.blue)

// Determine if a new trade can be placed
var float last_trade_time = na
can_trade = na(last_trade_time) or (time - last_trade_time) > trade_delay * 60 * 1000

// Determine position size based on selected mode
var float position_size = na
if (mode == "Fixed Volume")
    position_size := initial_capital * leverage * position_size_percent / close
else
    position_size := strategy.equity * leverage * position_size_percent / close

// Entry Condition
var float entry_price = na
price_crossed_ema_up = ta.crossover(close, ema)
price_crossed_ema_down = ta.crossunder(close, ema)

if ((price_crossed_ema_up or price_crossed_ema_down) and can_trade)
    entry_price := ema
    strategy.entry("Long", strategy.long, qty=position_size, limit=entry_price)
    last_trade_time := time
    label.new(bar_index, entry_price, text="Entry", color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

// Stop Loss
strategy.exit("Stop Loss", from_entry="Long", stop=entry_price * (1 - stop_loss_percent))

// Take Profits
take_profit_1_price = entry_price * (1 + take_profit_1_percent)
take_profit_2_price = entry_price * (1 + take_profit_2_percent)
take_profit_3_price = entry_price * (1 + take_profit_3_percent)

strategy.exit("Take Profit 1", from_entry="Long", limit=take_profit_1_price, qty=position_size / 3)
strategy.exit("Take Profit 2", from_entry="Long", limit=take_profit_2_price, qty=position_size / 3)
strategy.exit("Take Profit 3", from_entry="Long", limit=take_profit_3_price, qty=position_size / 3)

// Long Term Hold (10% of position)
hold_qty = position_size * long_term_hold_percent
if (strategy.position_size > hold_qty)
    strategy.close("Long Term Hold")