移動平均回帰追跡戦略

作者: リン・ハーンチャオチャン開催日:2024年3月28日 18時05分
タグ:

img

概要

この戦略の主なアイデアは,市場引き下げ後のリバウンド機会を把握するために,異なる期間を持つ2つの移動平均を使用することです.価格が長期移動平均以上で短期移動平均に戻ると,戦略はロングポジションを開き,価格が短期移動平均以上に戻り,ストップロスの価格に達するとポジションを閉じます.トレンドの引き下げ中に購入機会を求めることで,戦略はトレンド市場から利益を得ることを目指します.

戦略原則

  1. 異なる期間の2つの移動平均値 (MA1とMA2) を計算します.MA1は長期移動平均値で,MA2は短期移動平均値です.
  2. 閉じる価格がMA1より高く,MA2より低く,現在のポジションがない場合,現在の時刻が指定された取引時間範囲内である場合,戦略はロングポジションを開く.
  3. 入場価格を buyPrice として記録し,ストップ・ロスの価格を stopPrice (つまり入場価格を下回る% i_stop) と計算する.
  4. 閉じる価格がMA2を上回り,i_lowerCloseが falseである場合,または閉じる価格がストップ・ロスの価格のストップPriceを下回る場合,ストラテジーはポジションを閉じる.
  5. i_lowerCloseが trueである場合,戦略は,閉じる価格がMA2を超え,前のキャンドルの閉じる価格がMA2を下回るとポジションを閉じる.

戦略 の 利点

  1. トレンドフォロー: 価格の相対的な位置と長期移動平均に基づいて全体的なトレンドを決定することで,戦略はトレンド内のエントリー機会を探します.
  2. 引き戻し買い: 上向きのトレンド中に価格が短期移動平均値に戻ったときに買い機会を探し出すことで,戦略はエントリーポイントのコスト効率を改善します.
  3. ストップ・ロスの保護:ストップ・ロスの価格を設定することで,価格が一定の大きさで不利な動きをする場合,ダウンサイドリスクを効果的に制御することができます.
  4. 柔軟なパラメータ:ユーザーは,移動平均期間,ストップロスの割合,前回のキャンドルの閉場価格が短期移動平均を下回った場合のポジションの閉場かどうかを,自分の好みに合わせて柔軟にパラメータを設定できます.

戦略リスク

  1. パラメータ最適化: 異なるパラメータ設定は戦略のパフォーマンスに大きく影響し,最適なパラメータ組み合わせを見つけるために,異なる市場環境でパラメータ最適化とバックテストが必要です.
  2. 不安定な市場: 不安定な市場では,価格が長期および短期移動平均値の間に頻繁に変動し,ポジションの頻繁な開設と閉じる可能性があり,取引コストが低下します.
  3. トレンド逆転:市場トレンドが逆転すると,戦略は連続した損失を経験する可能性があります.この時点で,トレンド逆転を判断し,戦略を適時に調整するために他の指標またはシグナルを組み合わせることが必要です.
  4. ブラック・スワン・イベント:市場が重大で予測不能な突然のイベントを経験すると,価格は急激に変動し,ストップ・ロスを引き出し,戦略を重大な損失にさらす可能性があります.

戦略の最適化方向

  1. トレンド判断: ポジションを開く前に ADX などのより多くのトレンド判断指標を導入し,現在のトレンドの強さと方向性を確認し,エントリー信号の精度を向上させる.
  2. ダイナミックストップ・ロース: 価格変動やATRなどの指標に基づいてストップ・ロースレベルをダイナミックに調整し,価格変動が高くなる場合ストップ・ロースを拡大し,価格変動が低くなる場合,ストップ・ロースを締めくくります.
  3. ポジションサイズ: 市場傾向の強さと価格変動などの要因に基づいて,それぞれのエントリのポジションサイズを動的に調整し,傾向が強く,変動が穏やかである場合,ポジションサイズを増加させ,傾向が弱または変動が過度に高い場合,ポジションサイズを減少させる.
  4. ロング・ショート・ヘージング: 戦略の全体的なリスクを減らすために,ロング・ショート・サイドからの信号と異なる市場や時間枠におけるヘージング・ポジションの両方を同時に監視することを検討する.

概要

移動平均プルバックトラッキング戦略は,異なる期間の2つの移動平均値の相対位置を使用して,上昇傾向の価格引き下がり中に長い取引機会を捕捉する.この戦略はトレンド市場に適しており,適切なパラメータ設定とストップロスの場合,トレンド条件で安定したリターンを生むことができます.しかし,この戦略は不安定な市場やトレンド逆転中に一定のリスクに直面しています.より多くの指標を導入し,ポジションサイズを最適化し,ダイナミックストップロスを実装し,その他の方法により,この戦略のパフォーマンスと安定性をさらに改善することができます.


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
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/
// © contapessoal_ivan
// @version=5
strategy("Pullback Strategy", 
     overlay=true, 
     initial_capital=1000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)


もっと