モメンタム戦略


作成日: 2023-09-26 15:16:56 最終変更日: 2023-09-26 15:16:56
コピー: 1 クリック数: 777
1
フォロー
1617
フォロワー

概要

動量戦略は,価格変化の傾向に基づいて取引する戦略である.この戦略は,一定の周期内の価格変化を計算して,価格運動の傾向を判断し,取引シグナルを生成する.価格が上昇傾向にあるとき,購入シグナルを生成する.価格が下降傾向にあるとき,販売シグナルを生成する.この戦略は,二重動量指標の交差を生成する.

戦略原則

この戦略は,特定の周期内の閉盘価格の変化を計算することによって,価格の動力を判断する.具体的には,閉盘価格のN周期前の閉盘価格の変化を計算する.

まず,最初の動量指数MOM0を計算し,公式は次のとおりである.

MOM0 = CLOSE - CLOSE[N]

CLOSEは,現在の周期終了価格を表します.[N]は,N周期前の閉盘価格を表す.MOM0>0は,N周期前の閉盘価格の上昇を,N周期前の閉盘価格の低下を表す.MOM0は,N周期前の閉盘価格の減少を,N周期前の閉盘価格の減少を表す.

次に,第2動量指標MOM1を計算すると,式は次のようになります.

MOM1 = MOM0 - MOM0[1]

つまり,MOM0の現在の周期の値と前の周期の値を減算する.MOM1>0はMOM0の上昇を示し,MOM1はMOM0の減少を示している.

3番目の動力指標MOM2を計算すると,式は:

MOM2 = CLOSE - CLOSE[1]

つまり,現在の周期の閉盘価格を計算し,前の周期の閉盘価格を減算する. MOM2>0は閉盘価格の上昇を示し,MOM2は閉盘価格の低下を示している.

MOM0>0とMOM1>0であるとき,動力が継続的に上昇することを表示し,買入シグナルを生成する.MOM0とMOM2であるとき,動力が継続的に低下することを表示し,売出シグナルを生成する.

また,コードに時間条件time_condが追加され,設定された反測時間内にのみ取引シグナルが生成されます.また,注文を掛ける前に条件がまだ成立しているかどうかを再確認し,信号が消えた後に注文を続ける状況を回避します.

優位分析

  • 動量戦略は,価格の変化の傾向を捉え,価格自体に影響を受けず,高殺低のリスクを回避します.
  • 双動量指標の交差を採用し,偽突破をフィルタリングし,誤信号を発生させない
  • 時間を増やして条件をチェックすることで,無効取引を減らすことができます.
  • シンプルでわかりやすい戦略の原則,実行しやすい
  • 柔軟に調整可能なパラメータ,異なる市場環境に適用

リスク分析

  • 動力の指標が遅れているため,転換点を逃している可能性がある.
  • 双指標の交差はフィルム効果を高めるが,機会の一部を逃す可能性がある.
  • 価格の上昇や下落の強さや速度を判断できない
  • 取引頻度や滑り場コストを増加させる可能性のある過度に敏感なパラメータを慎重に選択する必要があります.
  • 効果はパラメータによる最適化であり,異なる期間のパラメータは調整する必要があります.

動量周期を短くしたり,トレンド判断を導入したり,ストップを配置したりしてリスクを減らすことができます.また,取引量指数にフィードバックを加えることも考えられます.

最適化の方向

  • ROC,RSI,など,様々な動力の計算方法を試す
  • トレンド判断を高め,反転の危機を回避する
  • ストップ・ロース戦略を設定し,単発損失を制御する
  • 取引量指数と組み合わせて,取引量サポートを保証します.
  • 機械学習アルゴリズムを組み込み,パラメータの動的最適化を実現
  • 短期と長期のトレンドを区別する多時間枠戦略
  • 異なる市場価格関係を利用して,市場横断のレバレッジを考える

要約する

動量戦略は,価格の変化の傾向を追跡して,価格そのものではなく,市場のホットポイントの方向を効果的に判断し,価格の上昇と下落の機会を掴むことができます.しかし,動量には遅延性があり,パラメータ選択と組み合わせの最適化は戦略効果に不可欠です.この戦略は,二重動量指標の交差に基づいて,部分的なノイズをフィルターすることができます.パラメータを継続的に最適化し,新しい技術指標を追加し,機械学習などの方法を活用することで,戦略効果をさらに強化し,リスクを制御できます.

ストラテジーソースコード
/*backtest
start: 2022-09-25 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  = true

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE")
else
	strategy.cancel("MomSE")

plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")