速くて遅い移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2024年2月27日16時06分30秒
タグ:

img

概要

快速・スロー・ムービング・平均クロスオーバー戦略は,単純な移動平均ベースの戦略である. 移動平均は,快速・遅い2つを使用する. 移動平均が下からゆっくり移動平均を上回ると,価格が上昇する可能性があることを示唆する. 移動平均が上からゆっくり移動平均を下に回ると,価格が下がる可能性があることを示唆する位置を退場する. これは将来の価格の動きを予測するための指標として役立つ.

原則

この戦略は,2つの移動平均値,一つは高速,一つは遅い.具体的には,デフォルトの長さは高速移動平均値の25期と遅い平均値の62期である.この戦略は,SMA,EMA,WMA,RMA,VWMAを含むさまざまな種類の移動平均値を選択することを可能にします.

急速移動平均線が,下からゆっくり移動平均線を越えると,短期価格が長期価格を突破し始めていることを示し,これは典型的な黄金十字信号であり,価格が上昇傾向に入ることを示します.この時点で戦略は長くなります.高速移動平均線が上からゆっくり移動平均線を下に突破すると,短期価格が長期価格を崩し始めていることを示し,これは死亡十字信号で,価格は下落傾向に入ることを示します.この時点で戦略はポジションを出します.

価格の動向と方向を決定するために,高速移動平均と遅い移動平均のクロスオーバーを使用して,対応するロングまたはクローズポジションを取ることで,利益を実現することができます.

利点分析

この戦略には以下の利点があります.

  1. このアイデアはシンプルで 理解し実行しやすい
  2. 柔軟なパラメータ設定,調整可能な期間と移動平均の種類
  3. 移動平均のクロスオーバーを用いて価格動向を正確に決定する信頼できる指標
  4. 自動化が実現し,手動的な判断なしに心理的な要因の影響を減らす
  5. 複数の製品に適用可能で,インデックス,外為,暗号通貨などに広く使用できます
  6. 楽に最適化,パラメータは,より良い構成を見つけるために調整することができます
  7. 拡張性が高く,他の指標や戦略と組み合わせられる

要するに,高速で遅い移動平均クロスオーバーがコア取引信号であるため,この戦略は将来の価格動向を判断する強力な能力を有しています.その傾向に基づいて,正当な利益を実現することができ,ライブ取引アプリケーションに価値があります.

リスク分析

この戦略にはいくつかの潜在的なリスクもあります.

  1. クロスオーバー信号は誤った信号を出すこともあり,価格は長期的トレンド逆転ではなく短期的修正のみを示します.
  2. 短く,長く移動平均の長さの不適切な選択は,取引の頻度が高すぎたり,良い機会を逃すこともあります.
  3. クロスオーバー・シグナルは,激烈な価格変動の間には重要ではない可能性があります.
  4. 高額な取引コストは,クロスオーバー・シグナルが頻繁に取引を誘発した場合,利益を損なう可能性があります.
  5. 拡張性も過度に最適化されるリスクも

これらのリスクを制御し軽減するために,次の方法が採用できます.

  1. 信号をフィルタリングし,誤った信号を避けるために他の指標を使用する.例えば,価格・量差指標.
  2. 最適な組み合わせを見つけ,誤った取引を減らすために移動平均パラメータを調整する
  3. 市場変動の時に戦略を一時停止する
  4. 余計な損失を減らすため,ストップ損失範囲を適度に緩和する.
  5. リスクを評価し,過度に最適化するのを防ぐために,複数の製品にわたる強度試験を実施する.

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

戦略の最適化のための主な方向性には,以下が含まれます.

  1. 急速な移動平均値と遅い移動平均値の期間選択:デフォルトパラメータが最適ではない場合もあるが,最適な設定を見つけるために異なる期間をテストすることができる.

  2. 移動平均の種類を選択する:複数の種類が提供され,特定の製品に最も有効なものをテストできます

  3. 他の指標または戦略との組み合わせ: 変動指標,ボリューム価格指標,または傾向を追跡する戦略と組み合わせてパフォーマンスを向上させることができます.

  4. パラメータ適応最適化: 安定性を向上させるため,移動平均の期間が市場の変動と流動性に基づいて自動的に調整できるようにする.

  5. AIモデル支援: 大量のデータを分析し,最適な取引ルールを自動的に検索するために機械学習アルゴリズムを使用する

これらの最適化方法によって,戦略の収益性と安定性がさらに向上することが期待できます.

概要

概要すると,高速・スロー・ムービング・平均クロスオーバー戦略は,トレンドフォロー戦略として非常に実用的なものです. 異なる時間枠における価格変化パターンを把握し,将来の価格傾向と方向性を決定するためにスロー・ムービング・平均の高速・移動平均のクロスオーバーを使用します. 戦略のアイデアはシンプルで明確で,理解し,実装しやすく,柔軟なカスタマイズ可能なパラメータを提供し,高い信頼性,自動化程度,広範な適用性,強力な拡張性があります. もちろん,誤った信号のリスクがあり,最大効果を達成するために他の指標と組み合わせることが必要です. 継続的なテストと最適化により,戦略はライブ取引で適正な安定した利益を達成する可能性があります.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Fast v Slow Moving Averages Strategy', shorttitle = 'Fast v Slow', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

fastBars = input.int(25, "Fast moving average length", minval=1)
slowBars = input.int(62, "Slow moving average length", minval=1)
strategy = input.string("EMA", "MA type", options = ["EMA", "VWMA", "SMA", "RMA", "WMA"])

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, fastBars) >= ta.ema(close, slowBars)) ? 1 : -1
    "SMA" => (ta.sma(close, fastBars) >= ta.sma(close, slowBars)) ? 1 : -1
    "RMA" => (ta.rma(close, fastBars) >= ta.rma(close, slowBars)) ? 1 : -1
    "WMA" => (ta.wma(close, fastBars) >= ta.wma(close, slowBars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, fastBars) >= ta.vwma(close, slowBars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

fastMA = switch strategy
    "EMA" => ta.ema(close, fastBars)
    "SMA" => ta.sma(close, fastBars)
    "RMA" => ta.rma(close, fastBars)
    "WMA" => ta.wma(close, fastBars)
    "VWMA" => ta.vwma(close, fastBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
slowMA = switch strategy
    "EMA" => ta.ema(close, slowBars)
    "SMA" => ta.sma(close, slowBars)
    "RMA" => ta.rma(close, slowBars)
    "WMA" => ta.wma(close, slowBars)
    "VWMA" => ta.vwma(close, slowBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? fastMA : na, title = "Fast Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
plot(series = maOn == "On" ? slowMA : na, title = "Slow Moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

もっと