移動平均ターニングポイントクロスオーバー取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-29 11:15:42
タグ:

img

概要

移動平均ターニングポイントクロスオーバー・トレーディング戦略は,クラシックな技術指標戦略である.この戦略の主な考え方は,異なる期間の移動平均を組み合わせて買い売り信号を生成し,移動平均ターニングポイントを使用して取引終了をさらに最適化することである.この戦略は,さまざまなタイムフレームや製品に適しており,安定した収益を達成することができる.

戦略原則

この戦略は主に2つの移動平均値を使用しており,一つは短期間が速いラインであり,もう一つは長い期間がスローラインである.速いラインがスローラインを上向きに突破すると,購入信号が生成される.速いラインがスローラインを下向きに突破すると,販売信号が生成される.これは古典的な移動平均クロスオーバー戦略の取引信号生成メカニズムである.

さらに,戦略は移動平均値のターニングポイントを使用して取引を終了する. 急速線が上昇から低下に転移すると,ロングポジションが終了する. 急速線が低下から上昇に転移すると,ショートポジションが終了する. 移動平均値のターニングポイントは短期間の市場逆転点を捉えることができ,戦略が損失を削減したり利益を得たりするのに役立ちます. これにより,全体的な利益が向上します.

利点分析

移動平均ターニングポイントクロスオーバー取引戦略には以下の利点があります.

  1. 実行が簡単です.この戦略は2つの指標のみを使用します.移動平均値とROC指標.コードは複雑ではありません.

  2. 連続した損失に耐える強固な能力.移動平均の固有の遅れと価格平滑の特徴は,いくつかのノイズをフィルタリングし,トレンドの範囲であまりにも多くの無効な取引を生むのを避けることができます.

  3. 移動平均のターニングポイントを用いた時効的なストップ損失は,大きな一方的な損失を減らすことができます.

  4. 広範囲に適用可能. 戦略原理はシンプルで,日間および時間バーなどの異なる製品および取引タイムフレームに適用できます. 広いパラメータ最適化空間.

  5. 安定したリターン 市場ホットスポットを追求する戦略と比較して,この戦略は超高いリターンを追求するのではなくリスク管理に焦点を当てていますが,安定したポジティブなリターンを得ることができます.

リスク分析

移動平均ターニングポイントクロスオーバー・トレーディング戦略には,主に次の側面で,いくつかのリスクがあります.

  1. 移動平均値の遅延. 急速な市場が来ると,移動平均値のクロスオーバー信号は遅れて,おそらく最良のエントリーポイントを逃すでしょう.

  2. 長期の空き保持期間.この戦略は,タイムリーな出口が有りますが,遅い入力信号があります.これは過度の空き保持期間につながる可能性があります.空き保持期間中に利益の機会が逃れます.

  3. 難しいパラメータ最適化.移動平均長さとROCサイクルのようなパラメータの選択は,戦略のパフォーマンスに大きな影響を与えます.しかしパラメータ最適化は,バックテストのために多くの歴史的データを必要とし,最適化に困難を伴う.

  4. 高波動性トレンドにおける不良パフォーマンス.高波動性トレンドでは,移動平均値は複数の無効クロスオーバーを生成し,戦略のパフォーマンスを低下させる.

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

取引戦略は,次の側面でさらに最適化できます.

  1. 傾向フィルタリング指標を組み込む. ADX や ATR などの指標を追加してトレンドの状態を判断する. 無駄な取引を避けるために明確なトレンドがないとき戦略を無効にする.

  2. 複数のタイムフレームを組み合わせます.主要なトレンドに対して取引を避けるために,より高いタイムフレームで主要なトレンドの方向性を特定します.

  3. アダプティブパラメータ最適化 移動平均長さのようなパラメータをリアルタイム市場変動に基づいて適応的に調整してパラメータの安定性を向上させる

  4. パターン認識を導入する.誤った信号をフィルタリングするために,MAクロスオーバーポイントでキャンドルスタイクパターンを識別する.

概要

総合的に見ると,移動平均ターニングポイントクロスオーバー取引戦略はリスクと収益をバランスする.実装の容易さ,連続損失に対する抵抗性,安定した収益などの利点があります.また,MAsの遅延発行や過度の空き保持期間などのデメリットもあります.パラメータを最適化し,トレンド判断,パターン認識などを取り入れることで,戦略のパフォーマンスをさらに改善することができます.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("SMA", "1st MA Type", options=["SMA", "EMA"])

ma2 = input(50, title="2nd MA Length")
type2 = input("SMA", "2nd MA Type", options=["SMA", "EMA"])

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    ema(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    ema(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



もっと