資源の読み込みに... 荷物...

2つの移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2024年5月17日 15:48:04
タグ:エイマSMA

img

概要

戦略原則

この戦略の核心は,動向平均値とクロスオーバー信号のトレンド特性を用いてトレンド方向とエントリータイミングを決定することである.まず,パラメータを通じて高速動向平均値 (デフォルト50) と遅動平均値 (デフォルト200) の期間を設定し,SMAまたはEMAを使用することを選択する.次に,2つの動向平均値を計算し,そのクロスオーバー状況を決定する.

  1. スロー・ムービング・メアダーの上を快速移動平均値が越えると (黄金十字) 現在のポジションがない場合はロングポジションを開き,ストップ・ロスの価格 (ストップ・ロスの割合に基づいて計算される) を設定します.
  2. スロー・ムービング・平均値を下回ると (デッド・クロス) 現在のポジションがない場合はショートポジションを開き,ストップ・ロスを設定します.
  3. 既存のショートポジションがある場合は,ゴールデンクロスが発生するとポジションを閉じる. 移動平均のクロスオーバー信号に基づいてポジションを開き,ストップ・ロスを設定して,中長期の価格動向をトレンドフォローで把握する.

戦略 の 利点

  1. 論理は単純で明快で 分かりやすく 実行しやすく トレンドフォロー戦略の基盤です
  2. 異なる期間の2つの移動平均値のクロスオーバーを用いて,トレンドの形成と逆転をより正確に判断できます.
  3. ストップ・ロスを設定することで ある程度損失リスクを制御できます
  4. 中期から長期のトレンドを捉えるのに適しています

戦略リスク

  1. パラメータの不正な選択 (不適切な移動平均期など) は,頻繁に信号を発し,傾向判断が遅くなる可能性があります.
  2. 傾向が逆転したり 止まったりすると 引き上げが大きくなるかもしれません
  3. 固定パーセントのストップ・ロスはリスクをうまくコントロールできないかもしれない.

戦略の最適化方向

  1. 安定性とリスク・リターン比を向上させるため,移動平均期間,ストップ・ロスの割合などを含むパラメータを最適化する.
  2. ストップ・ロスのポジションを動的に調整するために,ATRなどの変動関連指標を導入することを検討する.
  3. ポジションの追加や削減などのマネーマネジメント戦略によって改善できる.
  4. 他の信号と組み合わせて 多要素戦略を考える

概要


/*backtest
start: 2023-05-11 00:00:00
end: 2024-05-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//==============================================================================
// A baseline strategy with a well known concept, golden cross & death cross.
// Support for both Simple & Exponential moving averages.
// Support for long & short stop losses as a percentage.:well
//==============================================================================
strategy("Basic Moving Average Crosses", overlay=true)

//------------------------------------------------------------------------------
// configuration
//------------------------------------------------------------------------------
maQuickLength = input(50, title="Quick MA Length") 
maSlowLength  = input(200, title="Quick MA Length") 
useSma        = input(true, title="Use SMA? If false, EMA is used.")

maQuick = useSma ? ta.sma(close, maQuickLength) : ta.ema(close, maQuickLength)
maSlow  = useSma ? ta.sma(close, maSlowLength) : ta.ema(close, maSlowLength)

stop_loss_percentage = input(2.0, title="Stop Loss (%)")

var float longStopLevel = na
var float shortStopLevel = na

bool isGoldenCross = ta.crossover(maQuick, maSlow)
bool isDeathCross  = ta.crossunder(maQuick, maSlow)

//------------------------------------------------------------------------------
// position opening logic
//------------------------------------------------------------------------------

if(strategy.position_size == 0)
    // Golden cross, enter a long position
    if(isGoldenCross)
        strategy.entry("Buy", strategy.long)
        longStopLevel := close - close * stop_loss_percentage/100.0
        strategy.exit("StopLossLong", "Buy", stop=longStopLevel)
    // Death cross, enter short position
    else if(isDeathCross)
        strategy.entry("Sell", strategy.short)
        shortStopLevel := close + close * stop_loss_percentage/100.0
        strategy.exit("StopLossShort", "Sell", stop=shortStopLevel)

//------------------------------------------------------------------------------
// position closing logic
//------------------------------------------------------------------------------
else
    // Close long position on death cross
    if(strategy.position_size > 0 and isDeathCross)
        strategy.close("Buy")
    
    // Close short position on golden cross
    else if(strategy.position_size < 0 and isGoldenCross)
        strategy.close("Sell")

//------------------------------------------------------------------------------
// ploting
//------------------------------------------------------------------------------
plot(maQuick, color=color.yellow)
plot(maSlow, color=color.blue)

関連性

もっと