移動平均トレンド取引戦略

作者: リン・ハーンチャオチャン開催日:2023年10月9日16時02分
タグ:

概要

この戦略は,移動平均をベースとしたトレンドトレーディング戦略である. 異なるパラメータを持つ3つの移動平均を使用して,取引信号を生成する. 価格が移動平均を上回るとロングになり,価格が下回るとショートする. この戦略には,段階的なエントリーロングまたはショートのための3つの移動平均線があり,トレンドを追跡することができます.

戦略の論理

この戦略は,短距離関数 sma を使って,移動平均線 ma と長さ len を計算します.次に,移動平均線 longline1, longline2, longline3 の3つを計算します.これらの線は,ma に基づいてそれぞれ -4%, -5%, -6% 移動します.

ロングシグナル生成では,現在のポジションがフラットである場合,価格がロングラインを超えると1ロットでロングになります. すでに1ロットが長い場合,価格がロングラインを超えると1ロットを追加します. すでに2ロットが長い場合,価格がロングラインを超えると1ロットを追加します. 最大ロングポジションは3ロットです.

ショート信号生成の場合,既にロングであれば,価格がmaを下回るとすべてのロングポジションを終了します.

段階的なエントリにより 戦略はトレンドをたどることができます

利点

  • トレンドの方向性を決定するために移動平均を使用することで,市場の騒音をフィルターし,安定した利益を実現します
  • 段階的な長/短入札は,傾向からより多くの利益を得ることができます
  • 移動平均値をエントリーポイントとして使用することで,傾向がよりよく把握できます
  • 比較的少ない利用量,最大利用量は20%程度

リスク

  • 純粋なトレンドフォロー戦略は,レンジ・バインド市場では,クチコミされる傾向があります.
  • 移動平均値から遅れている信号は,トレンドターニングポイントを見逃す可能性があります.
  • 段階的なロングエントリーは高価格を追いかけてリスクを増やす可能性があります
  • ストップ・ロスのメカニズムは突然の出来事から大きな損失をもたらすことができません

リスク対策

  • トレンドターニングポイントを決定するために他の指標を追加
  • 移動平均パラメータを合理的に設定し,遅すぎない信号を避けるために,長すぎない
  • 高価格を追いかけるのを避けるために,段階的な長入荷を減らす
  • 損失を制限するために移動ストップ損失を追加します.

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

戦略は以下の側面で最適化できます.

  1. トレンド強さを決定するためにMACDのような他の指標を追加します.

  2. 最適な組み合わせを見つけるために移動平均パラメータを最適化

  3. 高価格を追いかけるのを防ぐために段階的な入荷バッチサイズと比率を調整する

  4. ATR をベースにした移動ストップ損失メカニズムを追加する

  5. 市場変動に基づいてポジションサイズを動的に調整し,変動が高い場合,サイズを小さくします

  6. 最適なシンボルを探すために,異なる製品での試験パラメータ

  7. 特定のパターンで利益を得ることを検討するための退出モジュールを開発する

概要

一般的に,戦略は,移動平均値によって決定されるトレンド方向,および段階的なエントリによるトレンドからの利益に基づいています. しかし,いくつかの遅れの問題と高い価格を追求するリスクがあります. 補助指標を追加し,パラメータを最適化し,ポジションサイズ調整し,ストップロスを追加し,さまざまな市場状況に適応し,安定した利益を達成することで最適化することができます.


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

もっと