
この戦略の主な考えは,EMA指標の金叉と死叉の信号を利用して買入と売却の操作を行うことです.それは同時に複数の快慢EMAを描画し,その交差点を利用して取引信号の判断を行うものです.
この戦略は,まず,快速EMA平均線ema1からema6と遅いEMA平均線ema7からema12を含む複数のEMA平均線を定義する.次に,買取信号buy_signalと売り込み信号sell_signalを定義する.
このように,短期EMA平均線上を長期EMA平均線に突破すると,市場が上昇傾向にあることを示し,買い;短期EMA平均線下を長期EMA平均線に突破すると,市場が下降傾向にあることを示し,売り.
戦略は,EMA平均線の交差を監視してトレンドの方向を判断し,そのために買入や売却の決定を作成する.
この戦略には以下の利点があります.
EMA平均線は,価格変動に対してより平滑であり,短期市場騒音をフィルターして取引信号をより信頼性のあるようにします.
同時に複数のEMA平均線を描画することで,トレンドの変化をより正確に判断できます.速いペースのEMA線の交差は,重要なトレンドの転換点を逃さないことができます.
戦略はシンプルで明快で,EMAクロスで取引シグナルを発信し,理解しやすい実装で,量化取引に適しています.
カスタマイズ可能なEMAサイクルパラメータ,異なる品種と市場に応じてパラメータを調整することができ,市場の変化に柔軟に対応します.
この戦略には以下のリスクもあります.
EMA平均線は遅滞性があり,取引信号の発送を遅らせることが考えられます.
間違ったEMAパラメータの組み合わせを選択すると,誤った取引シグナルが生成される可能性があります.
EMAの交差は,振動区間の偽信号を効果的にフィルターできない.
過剰適合のリスクがあり,EMAパラメータの最適化スペースは限られている.
対策として
他の指標と組み合わせたフィルタリングにより,振動区間の誤信号を回避する.
異なる周期パラメータの安定性をテストし,過適合を防止する.
戦略のパラメータの組み合わせを適切に調整するか,出口メカニズムを追加して,リスクを制御する.
この戦略は,以下の点で最適化できます.
損失を抑える戦略を増やし,損失が一定に達した後に損失を抑えて退出する.
市場復帰のメカニズムの追加で,再購入と売却のシグナルが設定されます.
買い売りのEMAクロスサイクルパラメータの組み合わせを最適化して,最適なパラメータを探します.
他の指標の判断,多要素検証,信号の質の向上.
異なる品種のパラメータを最適化して,最適の適用範囲を探します.
固定取引における滑点要因を考慮して,反測調整を行う.
この戦略は,EMA平均線の快慢な交差判断トレンド方向を利用し,交差信号に基づいて買い売りを行う.これは,より単純なトレンド追跡戦略である.これは,トレンドの変化判断の利点があるが,滞りや振動区間のリスクもある.止損,パラメータ最適化,多要素検証などの方法により,戦略の効果をさらに強化し,反測と实盤で継続的に改善することができる.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Companion Strategy script to my Cloud Study. Enjoy! -MP
// study("MP's Cloud Study", overlay=true)
strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05)
//bgcolor ( color=black, transp=20, title='Blackground', editable=true)
src = close, len1 = input(2, minval=1, title="Short EMA")
src2 = close, len3 = input(7, minval=1, title="Long EMA")
emaShort = ema(src, len1)
emaLong = ema(src2, len3)
StartYear = input(2018, "Start Year")
StartMonth = input(01, "Start Month")
StartDay = input(18, "Start Day")
StopYear = input(2018, "Stop Year")
StopMonth = input(12, "Stop Month")
StopDay = input(26, "Stop Day")
tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0)
//src = close,
//len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(3, minval=1, title="Fast EMA 2")
//len3 = input(8, minval=1, title="Fast EMA 3")
len4 = input(5, minval=1, title="Fast EMA 4")
len5 = input(8, minval=1, title="Fast EMA 5")
len6 = input(10, minval=1, title="Fast EMA 6")
//Slow EMA
len7 = input(30, minval=1, title="Slow EMA 7")
len8 = input(35, minval=1, title="Slow EMA 8")
len9 = input(40, minval=1, title="Slow EMA 9")
len10 = input(45, minval=1, title="Slow EMA 10")
len11 = input(50, minval=1, title="Slow EMA 11")
len12 = input(60, minval=1, title="Slow EMA 12")
//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
//Slow EMA
ema7 = ema(src, len7)
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)
//Fast EMA Color Rules
//colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6)
//Slow EMA Color Rules
//colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12
//colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12
//Fast EMA Final Color Rules
//colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray
//Slow EMA Final Color Rules
//colFinal2 = colslowL ? lime : colslowS ? red : gray
//Fast EMA Plots
p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver)
plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver)
plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver)
plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver)
plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver)
p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver)
fill(p1,p2,color=silver, transp=60)
//Slow EMA Plots
//p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2)
//plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2)
//plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2)
//plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2)
//plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2)
//p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2)
//fill(p3,p4, color=silver, transp=60)
//Plot the Ribbon
ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short")
ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long")
fcolor = emaShort>emaLong?green:red
fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill")
//fast = 4, slow = 16
//fastMA = ema(close, fast)
//slowMA = ema(close, slow)
//plot(fastMA, color=green, title = "buy/sell")
//plot(slowMA, color=red, title = "base")
//Conditions
buy_signal = crossover(ema1,ema3)
sell_signal = crossunder(ema1,ema3)
plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long")
alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Buy/Long', message = 'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')
//alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy/Long', message = 'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')
testStartYear = input(2018, "From Year")
testStartMonth = input(1, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true
if testPeriod()
if buy_signal
strategy.entry("Long", true)
if sell_signal
strategy.close("Long")