
この戦略は,2つの異なる長さの指数移動平均 ((EMA) の斜率交差を利用してトレンドフォロー信号を生成する. 130と400の長さのEMAをデフォルトで使用し,この2つのパラメータの組み合わせがうまく機能する.
快線EMA斜率上は慢線EMA斜率を貫通し,価格が200周期以上のEMAであるとき,多行する.快線EMA斜率下は慢線EMA斜率を貫通し,価格が200周期以下のEMAであるとき,空きする.
斜率方向の逆の交差時に平仓する.
この戦略は,ビットコインと流動性の高い,市場価値の高いアルトコインに最適ですが,特にトレンドが頻繁に見られる場合,波動性の高い資産にもうまく機能します.
4時間枠で最適です
また,選択可能な波動率フィルターが付属し,価格横軸の振動が信号よりもはるかに大きいときにポジションを開くのを避けるために,特定の値よりも大きな差がある場合にのみポジションを開きます.
効果は素晴らしいです 楽しんでください
この戦略の核心は,2つの異なる長さのEMA指数移動平均の傾斜を比較することである.
まず,長さ130と400のEMAを計算し,それぞれの斜率を計算し,それぞれの斜率の長さ3のEMAを計算し,平らな斜率曲線を得る.
ショートラインEMA斜面上から慢線EMA斜面を通るときに買信信号を生成し,ショートラインEMA斜面下から慢線EMA斜面を通るときに売信信号を生成する.
振動をフィルターするために,200周期のEMAをトレンドフィルターとして選択し,価格がEMAより高い場合にのみ多信号を考慮し,空白信号を考慮するよりも低い場合にのみ考慮する.
さらに,斜率の交差がデフォルトの値より大きい場合にのみ信号を生成する波動率フィルタをオプションで装備して,斜率の交差が不十分な波動率をフィルタリングすることができます.
傾きが逆の交差点になると,ポジションを平らにして損をするのをやめます.
斜率交差を用いて信号を生成し,トレンドを効果的に追跡する.
異なる市場環境に対応するために,EMAサイクルパラメータの組み合わせを調整
トレンドフィルターは,揺れ動向の誤導を防ぐことができます.
波動率フィルターは偽信号をフィルターする
規則はシンプルでわかりやすく,理解しやすい.
複数のタイムフレームで使用できます.
大規模な震動が頻繁に起こりうる.
EMA周期パラメータが不適切で,トレンドの転換点を逃す可能性があります.
市場環境の変化に適したパラメータの組み合わせを調整する
MAシステムと同様に,大トレンドの終わりには損失を逆戻す可能性があります.
EMA周期の組み合わせのパラメータを試し,最適なパラメータを探します.
異なる通貨の特性および市場環境による選択パラメータ
リスクコントロールのストップ・ストラトジーを追加することも考えられます.
EMA周期パラメータを動的に調整することも考慮できます.
異なる波動率の値パラメータを試す
異なる時間枠でのテスト
この戦略の全体的な構想は明快で分かりやすい. EMAの斜率交差を利用して信号を生成し,トレンドを効果的に追跡することができる.トレンドフィルターと波動率フィルターを配合することで,ノイズ取引を減らすことができる. EMA周期パラメータの組み合わせを調整することで,異なる市場環境に適応することができる.
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)
//definizione input
start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)
average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")
smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")
trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")
//variabili
m1 = if average == "EMA"
ema(close,len1)
else
sma(close,len1)
m2=if average == "EMA"
ema(close,len2)
else
sma(close,len2)
slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2
e1=if smoothingavg == "EMA"
ema(slp1,smoothingavglen)
else
sma(slp1,smoothingavglen)
e2=if smoothingavg == "EMA"
ema(slp2,smoothingavglen)
else
sma(slp2,smoothingavglen)
plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)
//variabili accessorie e condizioni
TrendConditionL=if trendfiltertype =="EMA"
close>ema(close,trendfilterperiod)
else
close>sma(close,trendfilterperiod)
TrendConditionS=if trendfiltertype =="EMA"
close<ema(close,trendfilterperiod)
else
close<sma(close,trendfilterperiod)
VolatilityCondition = abs(e1-e2) > volatilitydelta
ConditionEntryL= if trendfilter == true
if volatilityfilter == true
e1>e2 and TrendConditionL and VolatilityCondition
else
e1>e2 and TrendConditionL
else
if volatilityfilter == true
e1>e2 and VolatilityCondition
else
e1>e2
ConditionEntryS= if trendfilter == true
if volatilityfilter == true
e1<e2 and TrendConditionS and VolatilityCondition
else
e1<e2 and TrendConditionS
else
if volatilityfilter == true
e1<e2 and VolatilityCondition
else
e1<e2
ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)
if true
if ConditionExitS
if strategy.position_size < 0
strategy.close("SLPShort")
if true
if ConditionExitL
if strategy.position_size > 0
strategy.close("SLPLong")
if true
if ConditionEntryL
strategy.entry ("SLPLong",long=true)
if true
if ConditionEntryS
strategy.entry("SLPShort",long=false)