モメンタムベースのスイングトレード戦略


作成日: 2024-02-05 10:44:19 最終変更日: 2024-02-05 10:44:19
コピー: 1 クリック数: 678
1
フォロー
1617
フォロワー

モメンタムベースのスイングトレード戦略

概要

この戦略は,動力技術に基づく日間振動トレード戦略で,ATRのストップを用いています.この戦略は,StablyのKory Hoangによって作成されています.

戦略は,動力の指標を使用してトレンドの方向を識別し,ATR指標と組み合わせてストップ・ローンを設定し,低価格で高価格で売るショッキング取引戦略を実現します.

戦略原則

このコードでは,まず,測定の時間帯を設定します.

統計の部分では,以下の指標を計算します.

  • atr ((): ストップを設定するためのATR指数を計算する.
  • max/min“K線”の最高値/最低値を記録する.
  • is_uptrend: 上昇傾向にあるかどうかを判断する
  • ストップ・ローンの入口

この傾向を判断する主な論理は:

もし,close が前回の下落のストップラインvstopより高いなら,上昇傾向と判断する. もし,close が前回の上昇のストップラインvstopより低いなら,下降傾向と判断する.

トレンドが変化したときにストップラインの位置を調整する.

具体的には,上昇傾向の場合,ストップラインは,前K線最高価格減算ATRの値として設定され,下降傾向の場合,ストップラインは,前K線最低価格加算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