ゴールデンクロス最適化移動平均クロスオーバー取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月19日 13:37:33
タグ:

img

概要

この戦略は,異なる期間の3つの移動平均を設定して,従来の移動平均クロスオーバー戦略を最適化し,9期,50期,100期移動平均を持つゴールデンクロスパターンを構築する. 短期MAが中期MAを超越し,長期MAが上昇傾向にあるときに購入信号を生成する. 戦略名は最適化されたゴールデンクロス移動平均クロスオーバー取引戦略である.

戦略の論理

この戦略は9,50および100の期間を持つ3つの移動平均値を使用する. 9期MAは短期MA,50期MAは中期MA,100期MAは長期MAである. 取引シグナルは短期MAと中期MAのクロスオーバーによって生成される. 具体的には,長期MAが上昇傾向にあるとき (中期MA以上),短期MAが中期MAを超えると買い信号が起動する. 短期MAが中期MAを下回ると売り信号が起動する.

利点分析

この戦略は,従来の二重移動平均クロスオーバー戦略と比較して,取引信号を生成する前に中期および長期的トレンドを判断する条件を追加し,いくつかの無効な信号を効果的にフィルタリングすることができます.長期的トレンドが不明確である場合,戦略は信号を生成せず,統合に囚われないようにします.同時に,この戦略は,短期および中期にトレンド動きを捉えるのに適しており,攻撃的なエントリーの可能性を軽減します.

リスク分析

この戦略のパラメータを設定する際に,移動平均期間の組み合わせを調整する必要がある.異なる期間の組み合わせは,戦略の有効性に影響を与える. 期間のパラメータが正しく設定されていない場合,誤った信号があまりにも多く発生する危険性があります. さらに,トレーダーは潜在的なシステムリスクに気づき,リスクを軽減するために,損失を間に合うようにする必要があります.

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

市場動向を判断するのに役立つ他の指標 (MACD,BOLLなど) を組み込むことを検討し,より厳格なエントリー条件を設定するか,変動性指標を組み込むことを検討し,適応性移動平均を構成し,パラメータが市場状況に基づいて自動的に調整され,戦略をさらに最適化することができます.

結論

この戦略は,従来の二重移動平均クロスオーバーに基づいている.この戦略は,長期間のMA判断とフィルタ条件を追加し,誤った信号を効果的にフィルタリングすることができ,短期から中期間のトレンド動きを捕捉するのに適しています.これはシンプルで実践的なトレンドフォロー戦略です.しかし,トレーダーは依然としてパラメータ最適化とシステムリスクに注意を払い,科学的リスク管理戦略を策定する必要があります.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Input
switch1=input(true, title="Enable Bar Color?")
switch2=input(false, title="Show Fast Moving Average")
switch3=input(true, title="Show Slow Moving Average")

//Calculate Moving Averages
movingaverage_fast = sma(close, input(9))
movingaverage_slow = sma(close, input(100))
movingaverage_normal= sma(close, input(50))

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// Calculation
bullish_cross = crossover(movingaverage_fast, movingaverage_normal)
bearish_cross = crossunder(movingaverage_fast, movingaverage_normal)

//Entry and Exit
if bullish_cross and window() and movingaverage_slow > movingaverage_normal
    strategy.entry("long", strategy.long)

strategy.close("long", when = bearish_cross and window())

// Colors
bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue
barcolor(switch1?bartrendcolor:na)

// Output
plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)

もっと