動的トレンド追跡マルチ期間移動平均クロスオーバー戦略

SMA EMA MA
作成日: 2024-12-13 10:40:30 最終変更日: 2024-12-13 10:40:30
コピー: 0 クリック数: 475
1
フォロー
1617
フォロワー

動的トレンド追跡マルチ期間移動平均クロスオーバー戦略

概要

この戦略は,多周期平均線に基づくトレンド追跡取引システムである.戦略は,89周期および21周期のシンプル移動平均 (SMA) を利用して,市場の全体的なトレンド方向を決定し,同時に,5周期インデックス移動平均 (EMA) の高点と低点と組み合わせて,特定の取引シグナルを探している.戦略は,二重ポジション管理方法を採用し,固定ストップと追跡ストップと組み合わせて,リスクを制御する.

戦略原則

戦略の中核となるロジックには、次の重要な要素が含まれます。

  1. トレンド判断: 89サイクルと21サイクルSMAの相対的な位置と価格位置を使用してトレンドを決定する.価格と5サイクルEMAが21サイクルSMAの上にあり,21サイクルSMAが89サイクルSMAの上にあり,上昇傾向と判断する.逆に下降傾向である.
  2. 入場シグナル:上昇傾向では,価格が5周期EMAの低点まで戻ったときに入場する.下降傾向では,価格が5周期EMAの高点まで反発したときに入場する.
  3. ポジション管理:シグナルがトリガーされるたびに2つの同じ数の契約ポジションを開く.
  4. リスク管理:第1のポジションに対して固定ストップと利益の目標を採用し,第2のポジションに対してトラッキングストップ方式を採用する.

戦略的優位性

  1. 複数のタイムサイクル確認:異なる周期の移動平均の組み合わせにより,市場動向をより全面的に判断し,偽信号を減らすことができます.
  2. 柔軟なストップ方式:固定ストップと追跡ストップを組み合わせて,短期的な変動で利益を得ることができ,大きなトレンドの動きを逃さない.
  3. リスク管理:明確なストップポジションを設定し,各取引シグナルのリスクは固定する.
  4. システム化された操作:取引規則が明確で,主観的な判断の影響を受けず,プログラム的に容易に実行される.

戦略リスク

  1. 振動市場のリスク:横盤整理の状況では,頻繁に均線交差が起こり,偽信号が多すぎます.
  2. スライドポイントリスク:市場の波動が大きいとき,実際の取引価格は理論信号価格から大きな偏差を生じることがあります.
  3. 資金管理のリスク: 固定契約数での取引は,すべての資金規模に適さない可能性があります.
  4. 参数感性:移動平均周期の選択は,戦略のパフォーマンスに大きな影響を及ぼし,異なる市場向けに最適化する必要があります.

戦略最適化の方向性

  1. ダイナミックなポジション管理:口座の純額と市場の変動率に応じて取引契約数を動的に調整することをお勧めします.
  2. 市場環境フィルター:トレンドの強度指標を増加させ (ADXなど),波動的な市場では取引頻度を低下させる.
  3. ストップ・オプティマイゼーション:異なる市場環境に対する戦略の適応性を高めるために,ATRを使用してストップ・距離を動的に調整することを検討することができます.
  4. 信号確認:取引量,動力などの補助指標を増加させ,取引信号の信頼性を向上させる.

要約する

この戦略は,多周期平均線配合によって市場動向を捉え,柔軟なポジション管理とストップ・ストップ・ロスの方法でリスクを制御する構造化されたトレンド追跡システムである.ある程度の最適化余地があるが,戦略の基本的枠組みは,優れた実用性と拡張性を持っている.異なる取引品種と市場環境のために,パラメータの調整とフィルタリング条件の追加によって戦略の安定性を向上させることができる.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tobiashartemink2

//@version=5
strategy("High 5 Trading Technique", overlay=true)

// --- Input parameters ---
sma89Length = input.int(title="SMA 89 Length", defval=89)
sma21Length = input.int(title="SMA 21 Length", defval=21)
ema5HighLength = input.int(title="EMA 5 High Length", defval=5)
ema5LowLength = input.int(title="EMA 5 Low Length", defval=5)
contracts = input.int(title="Aantal Contracten", defval=1)
stopLossPoints = input.int(title="Stop Loss Points per Contract", defval=25)
takeProfitPoints = input.int(title="Take Profit Points per Contract", defval=25)

// --- Calculate moving averages ---
sma89 = ta.sma(close, sma89Length)
sma21 = ta.sma(close, sma21Length)
ema5High = ta.ema(high, ema5HighLength)
ema5Low = ta.ema(low, ema5LowLength)

// --- Identify trend and order of moving averages ---
longSetup = close > sma89 and close > sma21 and ema5High > sma21 and sma21 > sma89
shortSetup = close < sma89 and close < sma21 and ema5Low < sma21 and sma21 < sma89

// --- Entry signals ---
longTrigger = longSetup and close <= ema5Low
shortTrigger = shortSetup and close >= ema5High

// --- Entry orders ---
if (longTrigger)
    strategy.entry("Long 1", strategy.long, qty=contracts)
    strategy.entry("Long 2", strategy.long, qty=contracts)

if (shortTrigger)
    strategy.entry("Short 1", strategy.short, qty=contracts)
    strategy.entry("Short 2", strategy.short, qty=contracts)

// --- Stop-loss and take-profit for long positions ---
if (strategy.position_size > 0)
    strategy.exit("Exit Long 1", "Long 1", stop=strategy.position_avg_price - stopLossPoints, limit=strategy.position_avg_price + takeProfitPoints)
    strategy.exit("Exit Long 2", "Long 2", stop=strategy.position_avg_price - stopLossPoints, trail_offset=takeProfitPoints, trail_points=takeProfitPoints)

// --- Stop-loss and take-profit for short positions ---
if (strategy.position_size < 0)
    strategy.exit("Exit Short 1", "Short 1", stop=strategy.position_avg_price + stopLossPoints, limit=strategy.position_avg_price - takeProfitPoints)
    strategy.exit("Exit Short 2", "Short 2", stop=strategy.position_avg_price + stopLossPoints, trail_offset=takeProfitPoints, trail_points=takeProfitPoints)

// --- Plot moving averages ---
plot(sma89, color=color.blue, linewidth=2)
plot(sma21, color=color.red, linewidth=2)
plot(ema5High, color=color.green, linewidth=2)
plot(ema5Low, color=color.orange, linewidth=2)