この戦略は,移動平均をベースとしたトレンドトレーディング戦略である. 異なるパラメータを持つ3つの移動平均を使用して,取引信号を生成する. 価格が移動平均を上回るとロングになり,価格が下回るとショートする. この戦略には,段階的なエントリーロングまたはショートのための3つの移動平均線があり,トレンドを追跡することができます.
この戦略は,短距離関数 sma を使って,移動平均線 ma と長さ len を計算します.次に,移動平均線 longline1, longline2, longline3 の3つを計算します.これらの線は,ma に基づいてそれぞれ -4%, -5%, -6% 移動します.
ロングシグナル生成では,現在のポジションがフラットである場合,価格がロングラインを超えると1ロットでロングになります. すでに1ロットが長い場合,価格がロングラインを超えると1ロットを追加します. すでに2ロットが長い場合,価格がロングラインを超えると1ロットを追加します. 最大ロングポジションは3ロットです.
ショート信号生成の場合,既にロングであれば,価格がmaを下回るとすべてのロングポジションを終了します.
段階的なエントリにより 戦略はトレンドをたどることができます
リスク対策
戦略は以下の側面で最適化できます.
トレンド強さを決定するためにMACDのような他の指標を追加します.
最適な組み合わせを見つけるために移動平均パラメータを最適化
高価格を追いかけるのを防ぐために段階的な入荷バッチサイズと比率を調整する
ATR をベースにした移動ストップ損失メカニズムを追加する
市場変動に基づいてポジションサイズを動的に調整し,変動が高い場合,サイズを小さくします
最適なシンボルを探すために,異なる製品での試験パラメータ
特定のパターンで利益を得ることを検討するための退出モジュールを開発する
一般的に,戦略は,移動平均値によって決定されるトレンド方向,および段階的なエントリによるトレンドからの利益に基づいています. しかし,いくつかの遅れの問題と高い価格を追求するリスクがあります. 補助指標を追加し,パラメータを最適化し,ポジションサイズ調整し,ストップロスを追加し,さまざまな市場状況に適応し,安定した利益を達成することで最適化することができます.
/*backtest start: 2022-10-02 00:00:00 end: 2023-10-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's ShiftMA-multi Strategy v1.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(3, minval = 1, title = "MA Lenghs") src = input(ohlc4, title = "MA Source") longlevel1 = input(-4.0, title = "Long line 1") longlevel2 = input(-5.0, title = "Long line 2") longlevel3 = input(-6.0, title = "Long line 3") needoffset = input(true, title = "Offset") //Variables size = strategy.position_size mult = 1 / syminfo.mintick //MA ma = sma(src, len) longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult //Lines offset = needoffset ? 1 : 0 plot(ma, color = color.blue) plot(longline1, offset = offset, color = color.lime) plot(longline2, offset = offset, color = color.lime) plot(longline3, offset = offset, color = color.lime) //Trading lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] lots = 0.0 if ma > 0 lots := round(size / lot) strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0)) lots := round(size / lot) strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1)) lots := round(size / lot) strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2)) if size > 0 strategy.entry("TP", strategy.short, 0, limit = ma)