モメント戦略は,価格動向に基づいて価格動向を追跡する取引戦略である.特定の期間における価格変化を計算することによって取引信号を生成する.価格上昇傾向が特定されると,購入信号を誘発する.価格下落傾向が特定されると,販売信号を誘発する.この戦略は,二重モメント指標クロスオーバーを使用して取引信号を生成する.
この戦略では,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 も含まれます.信号が消えたときに望ましくない注文を避けるために,注文を出す前に条件を再確認します.
リスクは,モメント期間を短縮し,トレンド決定を追加し,またはストップロスを設定することによって軽減できます. 追加的なフィルタリングのためにボリューム指標も検討できます.
モメント戦略は,価格レベルではなく価格変化の傾向を追跡し,上下向きの価格動きを捉えるための市場モメント方向を効果的に特定する.しかし,モメントには遅れの特徴があり,パラメータ選択と組み合わせ最適化は戦略のパフォーマンスに不可欠である.この戦略は,いくつかのノイズをフィルタリングする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")