Strategi mengikuti tren berdasarkan rata-rata pergerakan EMA


Tanggal Pembuatan: 2024-02-05 14:21:18 Akhirnya memodifikasi: 2024-02-05 14:21:18
menyalin: 0 Jumlah klik: 629
1
fokus pada
1617
Pengikut

Strategi mengikuti tren berdasarkan rata-rata pergerakan EMA

Ringkasan

Strategi ini didasarkan pada rata-rata EMA dari 3 periode yang berbeda untuk menilai arah tren saat ini dengan menilai apakah harga berada di atas rata-rata EMA. Ini menghasilkan sinyal beli ketika garis EMA jangka pendek melintasi garis EMA jangka panjang. Ini menghasilkan sinyal jual ketika garis EMA jangka pendek melintasi garis EMA jangka panjang.

Prinsip Strategi

Strategi ini menggunakan 3 rata-rata EMA, yaitu garis 10, 20 dan 50 hari.

  1. Ketika garis 10 EMA dan garis 20 EMA pada saat yang sama berada di atas garis 50 EMA, didefinisikan sebagai tren naik;

  2. Ketika garis 10 EMA dan garis 20 EMA berada di bawah garis 50 EMA, ini didefinisikan sebagai tren turun;

  3. Sinyal beli dihasilkan ketika garis EMA jangka pendek (line 10 dan line 20) melewati garis EMA jangka panjang (line 50);

  4. Sinyal jual dihasilkan ketika garis EMA jangka pendek (line 10 dan line 20) melewati garis EMA jangka panjang (line 50);

  5. memegang posisi terbalik dalam tren naik, memegang posisi kosong dalam tren turun;

  6. Pada saat tren berbalik, posisi di mana garis pendek EMA dan garis panjang berpenetrasi akan dipadukan dengan arah sinyal saat ini.

Strategi ini dilakukan dengan cara capture profit, dengan cara lock-out profit melalui timely placement.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Peraturan-peraturan itu sederhana, jelas, mudah dipahami dan diterapkan.
  2. Menggunakan rata-rata EMA untuk menentukan arah tren dan menghindari gangguan dari fluktuasi pasar jangka pendek;
  3. Pada tahun 2010, perusahaan ini telah merilis sebuah aplikasi untuk mengidentifikasi dan memantau pergerakan harga saham.
  4. Tidak perlu memprediksi arah, mengikuti tren, dan memiliki tingkat kemenangan yang lebih tinggi.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Pada saat market reset, EMA rata-rata dapat mengalami beberapa kali penetrasi, dan sering melakukan posisi kosong dapat menyebabkan biaya transaksi;
  2. Setelah transaksi melonjak, penilaian tren EMA akan terpengaruh, dan kemungkinan kehilangan peluang untuk membuka posisi yang baik.

Untuk mengantisipasi risiko tersebut, dapat dioptimalkan dengan:

  1. Pada EMA yang lebih kecil, aturan untuk membuka posisi dapat dilonggarkan dengan tepat untuk menghindari terlalu sering berdagang;
  2. Untuk mengidentifikasi tren yang terkait dengan indikator lain, dan menghindari kegagalan penilaian EMA.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Optimasi parameter: Anda dapat menguji kombinasi parameter dari periode EMA yang berbeda untuk menemukan parameter yang optimal.

  2. Optimalkan biaya transaksi. Optimalkan aturan pembukaan posisi dengan tepat, mengurangi frekuensi transaksi yang tidak perlu;

  3. Optimalkan strategi stop loss. Tetapkan tingkat stop loss yang wajar dan kendalikan kerugian tunggal.

  4. Dalam kombinasi dengan indikator lainnya. Menggunakan MACD, KDJ dan indikator lain untuk penilaian tambahan, mengoptimalkan waktu masuk.

Meringkaskan

Strategi ini secara keseluruhan relatif sederhana dan praktis. Ini menggunakan EMA untuk menentukan arah tren, dengan strategi stop loss yang tepat, dapat mengontrol risiko secara efektif. Di samping itu, ada beberapa ruang untuk optimasi, jika digabungkan dengan optimasi parameter, strategi stop loss, dan indikator lainnya, efektivitas strategi ini juga memiliki ruang untuk peningkatan yang besar.

Kode Sumber Strategi
/*backtest
start: 2024-01-28 00:00:00
end: 2024-01-31 04:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mattehalen

//@version=4
//study("EMA 10,20 59",overlay=true)
strategy("EMA 10,20 59",overlay=true)
infoBox     = input(true, title="infoBox", type=input.bool)
infoBox2    = input(false, title="infoBox2", type=input.bool)
BuySellSignal_Bool = input(false, title="Buy & SellSignal", type=input.bool)
infoBoxSize = input(title="infoBoxSize", defval=size.large, options=[size.auto, size.tiny, size.small, size.normal, size.large, size.huge])
ema1Value   = input(10)
ema2Value   = input(20)
ema3Value   = input(59)
maxLoss = input(3000)
ema1        = ema(close,ema1Value)
ema2        = ema(close,ema2Value)
ema3        = ema(close,ema3Value)
objcnt      = 0
buyTitle    = tostring(close[1])
myProfit    = float(0)

plot(ema1,title="ema1",color=color.red,linewidth=2)
plot(ema2,title="ema2",color=color.green,linewidth=2)
plot(ema3,title="ema3",color=color.black,linewidth=2)

Buytrend = (ema1 and ema2 > ema3) and (ema1[1] and ema2[1] > ema3[1])
BarssinceBuyTrend = barssince(Buytrend)
BarssinceSellTrend = barssince(not Buytrend)
closeAtBuyTrend = close[1]
bgcolor(Buytrend ? color.green : color.red,transp=70)

BuySignal = Buytrend and not Buytrend[1] and BuySellSignal_Bool

BuySignalOut = Buytrend and (crossunder(ema1,ema2)) and BuySellSignal_Bool
BarssinceBuy = barssince(BuySignal)
bgcolor(BuySignal ? color.green : na , transp=30)
bgcolor(BuySignalOut ? color.black : na , transp=30)
plot(BarssinceBuy,title="BarssinceBuy",display=display.none)


SellSignal = not Buytrend and Buytrend[1] and BuySellSignal_Bool
SellSignalOut = not Buytrend and (crossover(ema1,ema2)) and BuySellSignal_Bool
BarssinceSell = barssince(SellSignal)
bgcolor(SellSignal ? color.red : na , transp=30)
bgcolor(SellSignalOut ? color.black : na , transp=30)
plot(BarssinceSell,title="BarssinceSell",display=display.none)


buyProfit   = float(0)
cntBuy      =0
sellProfit  = float(0)
cntSell     =0
buyProfit   := Buytrend and not Buytrend[1]? nz(buyProfit[1]) + (close[BarssinceBuyTrend[1]]-close) : nz(buyProfit[1])
cntBuy      := Buytrend and not Buytrend[1]? nz(cntBuy[1]) + 1: nz(cntBuy[1])
sellProfit  := not Buytrend and Buytrend[1]? nz(sellProfit[1]) + (close-close[BarssinceSellTrend[1]]) : nz(sellProfit[1])
cntSell     := not Buytrend and Buytrend[1]? nz(cntSell[1]) + 1 : nz(cntSell[1])
totalProfit = buyProfit + sellProfit

// if (Buytrend and not Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceBuyTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuyTrend[1]]) + "\n" + "Profit = "+tostring(close[BarssinceBuyTrend[1]]-close) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.red,size=infoBoxSize)
// if (not Buytrend and Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceSellTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSellTrend[1]]) + "\n" + "Profit = "+tostring(close-close[BarssinceSellTrend[1]]) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.green,size=infoBoxSize)

// if (BuySignalOut and not BuySignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceBuy[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.purple,size=infoBoxSize
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.lime,size=infoBoxSize)
// if (SellSignalOut and not SellSignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceSell[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.purple,size=infoBoxSize)
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.fuchsia,size=infoBoxSize)


// l2 = label.new(bar_index, na, 'buyProfit in pip = '+tostring(buyProfit)+"\n"+  'cntBuy = '+tostring(cntBuy) +"\n"+  'sellProfit in pip = '+tostring(sellProfit)+"\n"+  'cntSell = '+tostring(cntSell) +"\n"+  'totalProfit in pip = '+tostring(totalProfit)     , 
//   color=totalProfit>0 ? color.green : color.red, 
//   textcolor=color.white,
//   style=label.style_labeldown, yloc=yloc.abovebar,
//   size=size.large)

// label.delete(l2[1])



//--------------------------------------------------
//--------------------------------------------------
if (Buytrend)
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

//if BuySignalOut
   // strategy.close("long", comment = "Exit Long")
if (not Buytrend)
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
//if SellSignalOut
    // Force trade exit.
    //strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------