モメント・オシレーション・トレーディング・戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月21日 16:57:07
タグ:

img

概要

この戦略は,ボリンガーバンド指標をモメント指標と組み合わせて,ボリンガーバンドリバーションとモメントブレイクアウトの組み合わせの取引戦略を実装する.価格がボリンガーバンドの中央線を下から突破すると長行し,価格が上から中間線を突破すると短行する.また,目標リスク・リターン比率が満たされたとき,エントリー価格に基づいてストップロスを追跡し,利益を得てポジションを閉じる.

戦略の論理

この戦略は,ボリンジャーバンドの中央線 sma を移動平均指標として使用し,パラムマルト*ストデブを通じてバンド幅を動的に調整する.価格が下から中間線を突破すると,上向きの勢いが獲得され,したがってロングに行くことを示します.価格が上から中間線を突破すると,下向きの勢いが獲得され,したがってショートに行くことを示します.ロング/ショートポジションに入ると,ストップ・ロストとテイク・プロフィートパラメータは,利益を追跡し,リスクを制御するために設定されます.

具体的には,ボリンガー帯は長さとマルトという2つのパラメータで計算されます.長さは中間線の期間を決定し,マルトは帯幅を決定します. enterLongとenterShortはブレイクアウトタイミングを判断します. exitLongとexitShortはエントリー価格とターゲットパーセントに基づいてストップロスを計算し,利益率を計算します.

利点

この戦略は,平均値とモメンタム値へのリバースを組み合わせ,主要なトレンドを早期に把握することを可能にします.単に移動平均値を追跡するのと比較して,ボリンジャー帯幅に基づく追加モメンタム判断は,いくつかの偽ブレイクをフィルタリングすることができます.ストップ・ロストとテイク・プロフィートは,手動介入なしでエントリー価格に基づいて直接設定されます.

リスク

  • ボリンジャー・バンドの価格調整に遅れ,いくつかの動きを見逃す可能性があります
  • ストップロスの設定が幅が大きすぎると損失リスクが増加する可能性があります.
  • 牛市での短信信号はうまくいかないかもしれない.

期間,帯域幅,ストップ損失範囲などのパラメータを最適化して,戦略を異なる市場状況に適応させることができます.

強化

  • 取引量または変動を追加して,低量の偽ブレイクを避ける.
  • パラムグリッド検索 期間,幅係数,ストップ損失パーセントを最適化
  • 市場制度に基づいて,ただ長期または短期だけ
  • 傾向の方向性を決定するために機械学習モデルを追加します

結論

この戦略は,ボリンジャーバンドの逆転と勢力の強みを組み合わせ,早期にいくつかのトレンドを把握することを可能にします.パラメータチューニングを通じて,異なる市場段階に適応できます.直接ストップ損失/利益の計算は手動的介入を軽減します.より多くの補助指標を組み込むなど,まだ改善の余地があります.これらはさらなる研究と最適化で徐々に強化されます.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BURATINO", overlay=true)

// Входные параметры
length = input(20, minval=1, title="Length")
mult = input(2.0, minval=0.1, maxval=5, title="Multiplier")
target_percent = input(0.5, minval=0.1, title="Target Percent")
stop_loss_percent = input(95, minval=0.1, title="Stop Loss Percent")

// Расчет полос Боллинджера
basis = sma(close, length)
dev = mult * stdev(close, length)
upper = basis + dev
lower = basis - dev

// Переворот снизу вверх через среднюю линию Боллинджера для открытия лонга
enterLong = cross(close, basis) and close[1] < basis[1]

// Переворот сверху вниз через среднюю линию Боллинджера для открытия шорта
enterShort = cross(basis, close) and close[1] > basis[1]

// Закрытие лонга после роста цены на указанный процент или падения на указанный процент
exitLong = close >= strategy.position_avg_price * (1 + (target_percent / 100)) or close <= strategy.position_avg_price * (1 - (stop_loss_percent / 100))

// Закрытие шорта после падения цены на указанный процент или роста на указанный процент
exitShort = close <= strategy.position_avg_price * (1 - (target_percent / 100)) or close >= strategy.position_avg_price * (1 + (stop_loss_percent / 100))

// Управление позициями и ограничениями на открытие противоположных позиций
strategy.entry("Long", strategy.long, when = enterLong and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when = enterShort and strategy.position_size == 0)

strategy.close("Long", when = exitLong)
strategy.close("Short", when = exitShort)

// Визуализация полос Боллинджера
plot(basis, color=color.blue, title="Basis")
plot(upper, color=color.red, title="Upper")
plot(lower, color=color.green, title="Lower")

もっと