この戦略は,快線EMAと遅線EMAの交差状況を計算することによって,黄金交差と死亡交差の取引信号の生成を実現する.快線EMAが遅線EMAを横切ると買い信号が生成され,快線EMAが遅線EMAを横切ると売れ信号が生成される.この戦略は,移動平均線の優位性を充分活用し,トレンド開始段階で取引信号を効果的に追跡し,市場傾向を追跡することができる.
この戦略の核心指標は,高速EMA線と遅速EMA線である.この戦略は,2つの異なるパラメータのEMA線を設定することによって,高速EMA線を10に設定し,遅速EMA線を20に設定する.そのうちの,10日EMA線は価格変動により早く反応し,20日EMA線はより遅く反応する.短期EMA線が長期EMA線を横切ると,短期平均線が長期平均線を上向きにリードし,市場が強勢状態に入ることができることを示唆し,買い信号を発信する.逆に,短期平均線が長期平均線を横切ると,市場が強勢状態に入ることができることを示唆し,売り信号を発信する.
急速なEMAの交差原理により,この戦略は市場のトレンドの転換時刻を充分に把握し,適切なタイミングで取引信号を生成することができる.同時に,EMA指標自体は,市場の波動時に頻繁に取引を開くのを避けるための偽波信号をフィルタリングする能力を持っています.これは,間違った取引を減らすと同時に,市場の転換点を捉えることができ,高い収益性を有します.
上記のリスクに対して,追加指標の導入によって最適化することができる.例えば,取引のフィルタリング条件を拡大し,MACD指標を組み合わせて誤信号を回避し,自律的なEMA加速指標の応答速度を使用するなど.さらに,合理的なストップ損失と積極的なストップ抑制も必要である.
この戦略のさらなる最適化には,以下の要素が含まれます.
この戦略は,双 EMA の快速スローライン交差原理により,市場の重要な転換点を捕捉し,実物効果が強い. 補助指標と停止損失を最適化することで,戦略の安定性をさらに強化することができます. この戦略の考え方はシンプルで明確で,交易者が学ぶと使用する価値のある量化であり,拡張および最適化の大きな可能性もあります.
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Backtest single EMA cross", overlay=true)
qty = input(100000, "Buy quantity")
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, testStartMin)
testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ?
#00FF00 : na
testPeriod() => true
ema1 = input(10, title="Select EMA 1")
ema2 = input(20, title="Select EMA 2")
expo = ema(close, ema1)
ma = ema(close, ema2)
avg_1 = avg(expo, ma)
s2 = cross(expo, ma) ? avg_1 : na
//plot(s2, style=plot.style_line, linewidth=3, color=color.red, transp=0)
p1 = plot(expo, color=#00FFFF, linewidth=2, transp=0)
p2 = plot(ma, color=color.orange, linewidth=2, transp=0)
fill(p1, p2, color=color.white, transp=80)
longCondition = crossover(expo, ma)
shortCondition = crossunder(expo, ma)
if testPeriod()
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor =#FFFFFF , style=shape.labelup, size = size.normal, location=location.belowbar, color = #1B8112, transp = 0)
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = #FFFFFF, style=shape.labeldown, size = size.normal, location=location.abovebar, color = #FF5733, transp = 0)