EMA Slope Cross Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-10-17 17:02:30
Tag:

img

Gambaran umum

Strategi ini menggunakan persilangan lereng dua EMA dengan panjang yang berbeda untuk menghasilkan tren mengikuti sinyal.

Kondisi yang membuat strategi masuk ke pasar adalah:

  • EMA 200: Go Long
  • Fast Slope < Slow Slope dan harga < EMA 200: Go Short

Ketika lereng sederhana bersilang ke arah yang berlawanan, posisi ditutup.

Strategi ini bekerja dengan baik pada Bitcoin dan altcoin yang paling likuid dan dikapitalisasi, tetapi juga sangat baik pada aset yang tidak stabil, terutama jika mereka sering menjadi tren. Berfungsi dengan baik dalam jangka waktu 4 jam.

Ada juga filter Volatilitas opsional, yang membuka posisi hanya jika perbedaan antara dua kemiringan lebih dari nilai tertentu.

Nikmatilah!

Logika Strategi

Inti dari strategi ini adalah membandingkan kemiringan dua EMA dengan panjang yang berbeda.

Pertama, EMA dengan panjang 130 dan 400 dihitung, kemudian kemiringan masing-masing dihitung, kemudian EMA dengan panjang 3 dihitung pada setiap kemiringan untuk mendapatkan kurva kemiringan yang halus.

Ketika kemiringan EMA cepat melintasi di atas kemiringan EMA lambat, sinyal beli dihasilkan.

Untuk menyaring kebisingan, 200 periode EMA dapat digunakan sebagai filter tren, mempertimbangkan sinyal panjang hanya ketika harga di atas EMA, dan sinyal pendek hanya ketika di bawahnya.

Selain itu, filter volatilitas dapat digunakan, menghasilkan sinyal hanya ketika perbedaan antara dua kemiringan lebih besar dari ambang batas, untuk menghindari kasus di mana kemiringan bersilang tetapi volatilitas tidak cukup.

Ketika lereng cepat dan lambat bersilang secara berlawanan, posisi ditutup untuk menghentikan keuntungan/kerugian.

Analisis Keuntungan

  1. Menggunakan persilangan lereng untuk menghasilkan sinyal dapat secara efektif melacak tren

  2. Penyesuaian kombinasi periode EMA dapat beradaptasi dengan kondisi pasar yang berbeda

  3. Filter tren menghindari tertipu oleh aksi harga bergolak

  4. Filter volatilitas menyaring sinyal palsu

  5. Logika yang sederhana dan jelas, mudah dimengerti dan diterapkan

  6. Dapat digunakan pada beberapa kerangka waktu

Analisis Risiko

  1. Pembukaan dan penutupan yang sering dapat terjadi di pasar dengan kisaran besar

  2. Periode EMA yang tidak tepat dapat melewatkan titik balik tren

  3. Parameter harus disesuaikan dengan perubahan kondisi pasar

  4. Seperti sistem MA, tren besar dapat berbalik pada ekstrem

Arahan Optimasi

  1. Cobalah kombinasi periode EMA yang berbeda untuk menemukan parameter optimal

  2. Pilih parameter sesuai dengan karakteristik aset dan kondisi pasar

  3. Pertimbangkan untuk menambahkan strategi stop loss untuk mengendalikan risiko

  4. Pertimbangkan untuk menyesuaikan periode EMA secara dinamis

  5. Uji nilai ambang volatilitas yang berbeda

  6. Efektivitas pengujian di seluruh kerangka waktu

Ringkasan

Strategi ini memiliki logika yang jelas, mudah dimengerti, menggunakan persimpangan kemiringan EMA untuk menghasilkan sinyal dan melacak tren secara efektif. Filter tren dan volatilitas mengurangi perdagangan yang bising. Penyesuaian kombinasi periode EMA menyesuaikan dengan berbagai kondisi pasar. Secara keseluruhan, strategi tren sederhana dan praktis yang layak diuji dan dioptimalkan dalam perdagangan langsung.


/*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)

Lebih banyak