移動平均、単純移動平均、移動平均傾斜、トレーリングストップ、再エントリー

MA SMA MA
作成日: 2024-06-07 16:41:53 最終変更日: 2024-06-07 16:41:53
コピー: 0 クリック数: 891
1
フォロー
1617
フォロワー

移動平均、単純移動平均、移動平均傾斜、トレーリングストップ、再エントリー

概要

この戦略は,移動平均の斜率 ((MA) と価格とMAの相対的な位置に基づいて取引決定を行う.MAの斜率が最小斜率の値より大きく,価格がMAより高いとき,戦略は買いをする.同時に,戦略は,トラッキングストップ (Trailing Stop Loss) を採用してリスクを管理し,特定の条件下で再入場 (Re-Entry) を行う.この戦略は,上昇傾向の機会を捉え,同時にダイナミックストップと再入場機構を使用して利益とリスクを最適化することを目的としている.

戦略原則

  1. 主なトレンド指標として指定周期の単純移動平均 ((SMA)) を計算する.
  2. 現在のトレンドの強さを判断するために,指定されたウィンドウ期間のSMAの傾斜を計算します.
  3. SMA斜率が最小斜率の値より大きく,価格がSMAより高いとき,市場が上昇傾向にあると考え,戦略は買いだ.
  4. 入場すると,ストップ・トラッキング・メカニズムを使用して,現在の価格と指定されたパーセントに応じてストップ・価格を動的に調整する.
  5. 価格が追跡ストップ価格に触れた場合,戦略的に平仓し,ストップが発生したことを示します.
  6. ストップが発生した後に,価格がSMAの下の特定のパーセントまで引き戻されれば,戦略は再開されます.
  7. 価格がSMAを下回ると,戦略は直接平仓する.

優位分析

  1. トレンド追跡:SMAの斜率と価格とSMAの相対的な位置によってトレンドを判断し,上向きのトレンドで戦略を有利にするために役立ちます.
  2. ダイナミックストップ:ストップを追跡するメカニズムを採用し,価格変化のダイナミックに合わせてストップポジションを調整することで,利益をより保護し,損失を制限することができます.
  3. 再入場:ストップが発生した後,潜在的な反発の機会をキャプチャするために,価格がSMAの下部に特定のパーセントまで戻ったときに,戦略は再入場します.
  4. パラメータの柔軟性:戦略は,SMA周期,最小傾斜の値,トラッキングストップ損失パーセントなどの複数の調整可能なパラメータを提供し,異なる市場条件に応じて最適化することができます.

リスク分析

  1. パラメータの感受性: 策略のパフォーマンスは,パラメータの設定に敏感であり,不適切なパラメータの選択は,策略の不良なパフォーマンスを引き起こす可能性があります.
  2. トレンド認識:戦略は,SMAの傾きと価格とSMAの相対的な位置を主に依存してトレンドを判断し,特定の市場条件では誤ったシグナルが発生する可能性があります.
  3. ストップの頻度:ストップを追跡するメカニズムは,特に市場の変動が大きい場合に,ストップの頻度をもたらし,戦略の全体的なパフォーマンスを影響する可能性があります.
  4. 再入場リスク:再入場メカニズムは,ある状況では,戦略の再入場後にさらなる下落を経験し,損失を拡大する可能性があります.

最適化の方向

  1. トレンド確認: トレンドを判断する際に,他の技術指標または価格行動パターンの組み合わせで,トレンド識別の正確性を向上させることができる.
  2. ストップ・オプティミゼーション: 変動率やサポート/レジスタンス位置に基づくストップなどの他のストップ方法を探求し,異なる市場状況により良く適応することができます.
  3. 再入場条件: 再入場条件を最適化して,価格の引き戻しの幅,時間長などの要因を考慮して,いくつかの不利な再入場信号をフィルターすることができます.
  4. ポジション管理:ポジション管理の仕組みを導入し,市場変動または他のリスク指標に応じて各取引のポジションサイズを調整し,全体的なリスクを制御する.

要約する

この戦略は,移動平均線の傾きと価格と移動平均線の相対的な位置によってトレンドを判断し,ストップと条件付き再入場を追跡する仕組みを使用して取引を管理する.戦略の優点は,トレンド追跡能力,ダイナミックなストップ保護と再入場機会のキャプチャにある.しかし,戦略にはパラメータの感受性,トレンド認識誤差,ストップの頻度,再入場リスクなどの潜在的な問題もあります.

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

//@version=5
strategy("MA Incline Strategy with Trailing Stop-Loss and Conditional Re-Entry", overlay=true, calc_on_every_tick=true)

// Input parameters
windowSize = input.int(10, title="Window Size")
maLength = input.int(150, title="Moving Average Length")
minSlope = input.float(0.001, title="Minimum Slope")
trailingStopPercentage = input.float(2.8, title="Trailing Stop Percentage (%)") / 100
reEntryPercentage = input.float(4.2, title="Re-Entry Percentage Above MA (%)") / 100

// Calculate the moving average
ma = ta.sma(close, maLength)

// Calculate the slope of the moving average over the window size
previousMa = ta.sma(close[windowSize], maLength)
slopeMa = (ma - previousMa) / windowSize

// Check conditions
isAboveMinSlope = slopeMa > minSlope
isAboveMa = close > ma

// Variables to track stop loss and re-entry condition
var bool stopLossOccurred = false
var float trailStopPrice = na
// Buy condition
buyCondition = isAboveMinSlope and isAboveMa and ((not stopLossOccurred) or (stopLossOccurred and low < ma * (1 + reEntryPercentage)))

// Execute strategy
if (buyCondition and strategy.opentrades == 0)
    if (stopLossOccurred and close < ma * (1 + reEntryPercentage))
        strategy.entry("Long", strategy.long)
        stopLossOccurred := false
    else if (not stopLossOccurred)
        strategy.entry("Long", strategy.long)

// Trailing stop-loss
if (strategy.opentrades == 1)
    // Calculate the trailing stop price
    trailStopPrice := close * (1 - trailingStopPercentage)
    // Use the built-in strategy.exit function with the trailing stop
    strategy.exit("Trail Stop", "Long", stop=close * (1 - trailingStopPercentage))

// Exit condition
sellCondition = ta.crossunder(close, ma)
if (sellCondition and strategy.opentrades == 1)
    strategy.close("Long")

// Check if stop loss occurred
if (strategy.closedtrades > 0)
    lastExitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1)
    if (not na(trailStopPrice) and lastExitPrice <= trailStopPrice)
        stopLossOccurred := true

// Reset stop loss flag if the price crosses below the MA
if (ta.crossunder(close, ma))
    stopLossOccurred := false