ビットコイン・モメンタム トレイリング・ストップ戦略

作者: リン・ハーンチャオチャン,日付: 2024-03-08 16:20:16
タグ:

img

戦略の概要

ビットコイン・モメンタム・トレーリング・ストップ戦略は,ダイナミックに調整されたストップ・ロスを通して,ダウンサイドリスクを軽減しながらビットコインの上昇傾向を把握するために設計された長時間のみのモメンタムベースの戦略である.この戦略は,非常に下落する変動の際にオープン利益を保護するためにストップ・ロスを緊縮し,持続的な上昇するモメンタム中にストップ・ロスを緩め,利益を追放するためにシンプルでスマートなモメンタム・トレーリング・ストップテクニックを使用している.ビットコイン価格が20週間の指数関数移動平均線 (EMA) を上回る限り投資され,価格がそれ以下に閉じるときに退出する.これは1つのポジションのみを取引し,ショートしないが,あなたが何をしているのか知っている場合,あなたが好きなことを簡単に調整することができます.

戦略原則

  1. ビットコインの現在の価格は,より高いタイムフレームEMA (20週間のEMA) よりも上にある必要があります.
  2. ビットコインは,最近のスウィング・ハイマイナス現在のバー・ローがATRの1.5倍以上のもの,または日々の閉じるが日々の20 EMAよりも低いものとして定義される"注意"状態にはなりません.
  3. ストップ・ロスは,最近のスウィング・ハイでマイナス1ATR,または注意状態の場合,ATRのマイナス20% (つまり0.2ATR) に設定されます.
  4. ストップ・ロスの値を下回ると次のバーの出口が開きます.

この戦略は,毎週チャートと20週間のEMAをトレンドフィルターとして使用し,価格は20週間のEMAを超える場合にのみ入力する. 5期ATRは,注意状態で緊縮するトレーリングストップの距離を動的に調整するために使用される.注意状態は,2つの条件で定義される:最近のスイング高から現在の低点までの距離がATRの1.5倍以上,または日々の閉じるが日々の20EMAを下回る.この動的なストップ・ロスの調整アプローチは,トレンドが強くなったときにより大きな引き戻し余地を提供し,トレンドが弱くなったときに迅速に利益をロックする.

戦略 の 利点

  1. シンプルさと有効性: 戦略論理はシンプルで明確で,理解し実行しやすいが,Bitcoinの主要な上昇傾向を効果的に把握している.

  2. ダイナミックストップ・ロース:ストップ・ロースポジションは,市場の変動状況に基づいて動的に調整され,引き下げを制御し,利益を稼働させる.これはストップ・ロース管理の比較的バランスのとれた堅牢なアプローチです.

  3. トレンドフィルタリング:より高いレベル (20週間のEMA) の移動平均値でフィルタリングすることで,戦略は明確な上昇傾向の間にのみ入力され,戦略の勝利率とリスク/報酬比を大幅に改善します.

  4. ポジションサイズ: 既定は,資本利用を最大化し,資本効率を向上させ,完全なポジションで取引することです. ポジションサイズも柔軟に調整できます.

  5. 広範囲に適用可能: 戦略論理は,一般化が良好であるため,他の資産や市場にも簡単に移植できる.

戦略リスク

  1. パラメータ適用性: 戦略パラメータはビットコイン市場の特徴に基づいて設定され,他の市場への適用性は検証され,異なる資産のためのパラメータ最適化が必要かもしれません.

  2. トレンド識別: この戦略は,傾向を判断するために,主に上級EMAやATRなどの技術指標に頼ります.これは市場状況の把握における基本分析ほど包括的で,市場の転換点ではエラーに易いものです.

  3. ストップ・ロスのリスク: ダイナミックストップ・ロスはある程度リスクをコントロールできるが,極端な市場状況 (急落や急激な深層変動など) でも,重大な引き下げが起こりうる.さらに,ストップ・ロスのポジションは比較的狭いため,不安定な市場で頻繁なストップ・アウトにつながる可能性がある.

  4. 利益の可能性: 戦略は片方向の上昇傾向ではうまく機能するが,範囲内市場では頻繁にストップ・ロスのジレンマに陥る可能性が高いため,全体的な利益の可能性を制限する可能性がある.

  5. ライブパフォーマンス: バックテストでは戦略がうまく機能するが,ライブ取引はスリップや手数料などの要因の影響を受け,実際の結果は理論的リターンとは異なる可能性があり,慎重に評価する必要がある.

オプティマイゼーションの方向性

  1. トレンド決定: トレンド識別の正確性と信頼性を向上させるために,より高いレベルの移動平均値,変動指標,または根本データさえ導入することを検討する.

  2. ダイナミックパラメータ: ストップロスのポジションとATRパラメータは,異なる市場状態に適応するために,価格や変動に関連するダイナミック調整メカニズムを導入することによってさらに最適化することができます.

  3. ポジションサイズ: 傾向の強さや波動性などの指標に基づいてポジションサイズを動的に調整し,傾向が強いときにポジションサイズを増やし,波動性が高い場合,リスク/リターン比を改善するためにポジションサイズを小さくします.

  4. ロング/ショートメカニズム: 戦略の適用可能性と潜在的な収益性を拡大するために,熊市場でのショートセールメカニズムを導入する.しかし,エントリーとストップロスのルールは再設計する必要があります.

  5. 戦略の組み合わせ: この戦略を他の戦略 (平均逆転など) と組み合わせて,お互いの強みを補完し,戦略の安定性と収益性を向上させる.

戦略の概要

ビットコイン・モメンタム・トレーリング・ストップ戦略 (Bitcoin Momentum Trailing Stop Strategy) は,ダイナミック調整されたストップ・ロスを通してダウンサイドリスクを制御しながら,より高いレベルの移動平均値とATR指標を使用して,ビットコインの強い上昇傾向を把握するシンプルで効果的なモメンタム戦略である.戦略論理は明確で,実装し最適化するのが簡単で,安定したリターンを求める中長期投資家に適している.しかし,全体的な利益の可能性が限られている範囲内市場では平均的にパフォーマンスする. この戦略は基本的なテンプレートとして機能し,投資家はトレンド決定,パラメータ最適化,ポジション管理,ロング/ショートメカニズムなどの分野における自身のニーズと経験に基づいてさらに改良したり,より高いリスク/リターン比を達成するために他の戦略と組み合わせたりすることができます.しかし,戦略のライブパフォーマンスがバックテストの結果と異なる可能性があることに注意する必要があります.注意深くリスク評価と制御が必要です.いかなる戦略も,歴史的なデータに基づいて徹底的にバックテストされ,使用前に動的にテストされ,市場の変化に基づいて調整する必要があります.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

もっと