資源の読み込みに... 荷物...

推進戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-26 15:16:56
タグ:

概要

モメント戦略は,価格動向に基づいて価格動向を追跡する取引戦略である.特定の期間における価格変化を計算することによって取引信号を生成する.価格上昇傾向が特定されると,購入信号を誘発する.価格下落傾向が特定されると,販売信号を誘発する.この戦略は,二重モメント指標クロスオーバーを使用して取引信号を生成する.

戦略の論理

この戦略では,N 期間の前の閉店価格と比較して閉店価格の変化を測定することによって,価格の動向を計算します.

第"のモメント指標MOM0は以下のように計算される.

MOM0 = CLOSE - CLOSE [N]

CLOSE は現在の期間の閉じる価格であり,CLOSE[N] はN期間の前の閉じる価格である.MOM0 > 0 は現在の閉じる価格がN期間の前の価格よりも高く,MOM0 < 0 は現在の閉じる価格がN期間の前の価格よりも低いことを示している.

第2のモメント指標MOM1は以下のように計算される.

MOM1 = MOM0 - MOM0 [1]

MOM1 > 0 は MOM0 が増加していることを示し,MOM1 < 0 は MOM0 が減少していることを示します.

第3のモメント指標MOM2は以下のように計算される.

MOM2 = CLOSE - CLOSE [1]

MOM2 > 0 は閉店価格が上昇していることを示し,MOM2 < 0 は閉店価格が下がっていることを示します.

MOM0 > 0 と MOM1 > 0 のとき,モメントが一貫して上昇していることを示し,購入信号を誘発する.MOM0 < 0 と MOM2 < 0 のとき,モメントが一貫して低下していることを示し,販売信号を誘発する.

このコードには,指定されたバックテスト時間範囲内でのみ信号を生成するための時間条件 time_cond も含まれます.信号が消えたときに望ましくない注文を避けるために,注文を出す前に条件を再確認します.

利点分析

  • 価格レベル自体に関係なく価格変化の傾向を把握し,高値を追いかけて低値殺すのを避ける
  • ダブルモメントインジケータークロスオーバーは,偽ブレイクをフィルターし,間違った信号を避ける
  • 余計な時間や条件のチェックは,不必要な取引を避ける
  • シンプルで理解しやすい論理,実行しやすい
  • 柔軟なパラメータ,異なる市場環境に調整可能

リスク分析

  • モメントインジケーターは遅延し,ターニングポイントを逃す可能性があります
  • 二重指標のクロスオーバーはフィルタリングを増やしますが,いくつかの機会を逃すこともあります
  • 価格の強さと速度を判断できない
  • パラメータは慎重に選択する必要があります.過度に敏感な設定は取引頻度と滑りコストを増加させる可能性があります.
  • パラメータの最適化によって性能が向上し,パラメータは異なる期間で調整する必要があります.

リスクは,モメント期間を短縮し,トレンド決定を追加し,またはストップロスを設定することによって軽減できます. 追加的なフィルタリングのためにボリューム指標も検討できます.

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

  • ROC,RSIなどの異なるモメント計算方法をテストします.
  • トレンド決定を追加して,市場変動のウィップソウを回避する
  • 単一の取引損失を制御するためにストップ損失戦略を使用する
  • 音量サポートを確保するために音量指標と組み合わせる
  • 動的パラメータ最適化のための機械学習アルゴリズムを導入する
  • 短期と長期の動向を区別するための多時間枠戦略
  • 市場間の価格関係を利用するクロスマーケット・アービタージ戦略を検討する

概要

モメント戦略は,価格レベルではなく価格変化の傾向を追跡し,上下向きの価格動きを捉えるための市場モメント方向を効果的に特定する.しかし,モメントには遅れの特徴があり,パラメータ選択と組み合わせ最適化は戦略のパフォーマンスに不可欠である.この戦略は,いくつかのノイズをフィルタリングする2つのモメント指標クロスオーバーをベースとして使用する. パラメータの継続的な最適化,新しい技術指標の統合,機械学習技術の活用によりパフォーマンスをさらに向上させ,リスクを制御することができる.


/*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")

もっと