
この戦略は,通常の移動平均の交差戦略を最適化して,三つの異なる周期の移動平均を設定し,9周期,50,100周期の移動平均を用いて金叉形を構成し,中長線均線が上昇傾向にある条件下で,短期均線上での中長線均線を貫く金叉の買入信号を形成する.この戦略の名前は,移動平均の交差金叉の最適化取引戦略である.
この戦略は,9周期,50周期,および100周期の3つの移動平均を使用する. その中,9周期の移動平均は短期平均,50周期の移動平均は中線平均,100周期の移動平均は長期平均である. 戦略の取引シグナルは短期平均と中線平均の交差から来る. 具体的な論理は,長期平均が上昇傾向にあるという条件下において,短期平均線上の中線線線上線が中線上線よりも高い場合,短期平均線上線上線が中線上線を横切るときに買入シグナルが生じ,短期平均線下線が中線下線を横切るときに売り出しシグナルが生じ,取引が実現する.
従来型の双動平均交差策とは異なり,この策は取引信号が生じる前に中長期のトレンド判断条件を追加し,有効な信号の一部をフィルターすることができます.長期のトレンドが不明な場合,この策は信号を生じないので,套装を避けることができます.また,この策は,短期中期にトレンド性のある行動を捕捉するのに適しており,激進場に入る可能性を下げます.
この戦略は,パラメータを設定する際に均線の周期组合を調整する必要があり,異なる周期组合は戦略の効果に影響を与える.周期パラメータを正しく設定しなければ,過剰な偽信号の発生のリスクに直面する.さらに,トレーダーは潜在的システミックリスクに警戒し,リスクを回避するために間に合うように止めておく必要があります.
市場動向を判断するのに役立つ他の指標,例えばMACD,BOLLなどと組み合わせて,より厳しい入場条件を設定することも考えられます.または,波動率指標と組み合わせて自律的な移動平均を構築することで,市場環境に応じてパラメータが自動的に調整され,さらに戦略を最適化することができます.
この戦略は,通常の二重移動平均の交差に基づいて,長期平均線判断とフィルター条件を追加し,偽信号を効果的にフィルターし,短期中期トレンドの動きを捕捉するのに適しており,簡単な実用的なトレンド追跡戦略である.しかし,トレーダーは,パラメータ最適化とシステミックなリスクに注意を払い,scientの資金管理戦略を策定する必要があります.
/*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)