2つの移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2023年9月17日 22:35:07
タグ:

この戦略は,異なる期間の2つの移動平均値のクロスオーバーに基づいて取引信号を生成します.

戦略の論理

この戦略は,ユーザーに移動平均の種類と長さを選択することを可能にします.タイプにはSMA,EMA,VWMAなどが含まれます.長さは移動平均の期間を決定します.

2つの移動平均値は,ユーザの選択に基づいて計算されます. 速い線が遅い線の上を横切ると,黄金十字が形成され,買い信号が生成されます. 速い線が遅い線下を横切ると,死十字が形成され,売り信号が生成されます.

短期間の平均価格が長期間の平均価格を上回る場合,上昇傾向とみなされ,ロングポジションを取るべきである.短期間の価格が長期価格を下回る場合,下落傾向とみなされ,ショートポジションを取るべきである.

利点分析

  • 戦略の論理は シンプルで明快で 分かりやすく実行できます
  • 移動平均値は,市場の騒音を効果的にフィルターし,トレンドを特定することができます.
  • 許可の種類とパラメータは,異なる製品と時間枠に合わせて柔軟に選択できます.
  • 様々な指標を組み合わせることで最適化が容易です

リスク分析

  • 市場が変動しているときに 複数の誤った信号を生む可能性があります
  • 不適切なパラメータ選択は戦略の不良なパフォーマンスにつながる可能性があります.
  • 信号は遅れており ターニングポイントを間に合わない
  • 価格の急激なショックにさらされています

パラメータを最適化したり,信号生成のための他の指標を組み合わせたり,ストップ・ロース/テイク・プロフィートなどを実装することによってリスクを管理することができます.

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

  • 最適なパラメータを見つけるために MA の種類と長さをテストする.
  • 信号フィルタリングのための他の指標,例えばボリューム,変動指標を追加します.
  • ストップ・ロスト/テイク・プロフィートのロジックを追加して 引き上げを減らす
  • 不適切な市場条件を避けるために傾向評価を組み込む.
  • ポジションサイズやリスク予算など 資金管理を最適化します

結論

この戦略は,デュアルMAのクロスオーバーで信号を生成するシンプルで明確な論理を持っています.柔軟なパラメータチューニングと最適化のための他の戦略との組み合わせを可能にしますが,市場範囲のリスクを監視し,マネーマネジメントは重要です.全体的には検討に値する戦略です.


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

//@version=2
strategy(title = "Noro's MAs Tests", shorttitle = "MAs tests", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)


len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0

plot(ma, color = blue, linewidth = 3, transp = 0)

trend = low > ma ? 1 : high < ma ? -1 : trend[1]

longCondition = trend == 1 and trend[1] == -1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
    
    
    

もっと