モメントスウィング・トレーディング戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-05 10:44:19
タグ:

img

概要

これは,ATRストップを用いたモメントテクニックに基づいた日間スウィング・トレーディング戦略です.これはStablyのKory Hoangによって作成されました.

この戦略は,モメンタム指標を用いてトレンド方向を特定し,ATRに基づくストップ・ロスのラインを設定し,低買い高売りスウィング・トレーディングを実施する.

戦略の論理

テストの時間帯を設定します

次に,指標のセクションでは,次の指標が計算されます.

  • atr (():ストップ損失のATRを計算する.
  • max_/min_:前のバーの最高/最低価格
  • is_uptrend:上昇傾向にあるかどうかを判断する.
  • ストップ・ロストライン

トレンドを判断する主な論理は

閉じる値が前回のダウンストップ・ロースラインより高ければ,上昇傾向とみなされ,閉じる値が前回のアップストップ・ロースラインより低い場合,下落傾向とみなされます.

トレンドが変わると,ストップ・ロスの位置を調整します.

具体的には,上昇傾向では,ストップ損失線は,前のバーの最高価格マイナスATR値に設定され,ダウントレンドでは,ストップ損失線は,前のバーの最低価格プラスATR値に設定されます.

ストップ・ロスの後,トレンドが実現します.

取引規則のセクションでは,価格がストップ・ロスの線を突破したとき,ロング/ショートポジションを開きます.

利点分析

この戦略の利点は

  1. 動力技法を使って トレンド方向を判断し ターニングポイントをタイミングで把握し 誤ったブレイクを避ける
  2. ATRのストップロスは 最高値/最低値を追跡し リスクをうまくコントロールできます
  3. シンプルで明快な戦略論理 分かりやすく実行できます
  4. 低価格で高価格で売れる

リスク分析

リスクもあります:

  1. ATR パラメータが正しくない場合,ストップ・ロスは緩すぎたり,狭すぎたりすることがあります.
  2. 激烈なストップ・ロスは 連続的なストップ・ロスを引き起こします
  3. 取引頻度が高ければ 佣金も高くなります

いくつかの最適化:

  1. ATRのパラメータをテストして 最適値を見つけます
  2. ストップ・ロスを最適化して ATR の上に 変動指標を組み合わせます
  3. トレンドフィルターを追加して 不安定な市場中に不必要な取引を避ける.

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

この戦略を最適化するためのいくつかの方向性:

  1. ATRの異なるパラメータをテストし,最適なものを見つけ,複数のパラメータセットをバックテストし,リターン/リスク比を評価する.

  2. ATR の上に波動度指標を組み合わせてストップロスを最適化します.波動度指標を追加し,波動性が増加する期間中にストップロスを適切に緩和します.

  3. トレンド判断指標を追加し,トレンドが明確であるときにのみ取引します.

  4. ポジションサイズメカニズムを追加します.アカウント利用率,連続ストップ損失時間などに基づいてポジションサイズを調整します.

  5. オブナイトギャップリスク管理を追加します. オブナイトギャップリスクを避けるために市場閉じる前に積極的に損失を削減します.

結論

基本的な日々のスウィング・トレード戦略として,全体的な論理は明確です. 動力技術でトレンドを判断し,リスクを効果的に制御するために ATR を利用します.

トレンド判断,ストップ損失方法,ポジションサイジングなどの側面から改善することができます. 全体的にこの戦略は定量的な取引のための堅牢な枠組みを提供します.


/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)

/////////////////////////////////////////////////////////////
//START - SET DATE RANGE

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2010, title = "From Year")
ToMonth   = input(defval = 12, title = "To Month", minval = 1)
ToDay     = input(defval = 31, title = "To Day", minval = 1)
ToYear    = input(defval = 2020, title = "To Year")

startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true

/////////////////////////////////////////////////////////////
//END - SET DATE RANGE



/////////////////////////////////////////////////////////////
//START - INDICATORS

length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)

/////////////////////////////////////////////////////////////
//END - INDICATORS



/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange

strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)

/////////////////////////////////////////////////////////////
//END - TRADING RULES

もっと