この戦略は,異なる期間の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)