Berdasarkan analisis strategi EMA ganda


Tanggal Pembuatan: 2024-02-28 18:07:59 Akhirnya memodifikasi: 2024-02-28 18:07:59
menyalin: 1 Jumlah klik: 550
1
fokus pada
1617
Pengikut

Berdasarkan analisis strategi EMA ganda

Ringkasan

Strategi EMA ganda adalah strategi pelacakan tren yang mengidentifikasi arah tren harga dengan menghitung EMA dari siklus yang berbeda, untuk memutuskan apakah untuk melakukan posisi terbuka atau posisi terbuka. Strategi ini sederhana dan praktis, dan cocok untuk pasar yang cenderung kuat.

Prinsip Strategi

Strategi ini didasarkan pada dua indikator EMA, yaitu EMA 9 hari periode pendek dan EMA 21 hari periode panjang.

Ketika EMA jangka pendek melewati EMA jangka panjang, dianggap sebagai harga masuk ke tren naik, strategi ini akan membuka lebih banyak pesanan dan melacak kenaikan harga. Ketika EMA jangka pendek melewati EMA jangka panjang, dianggap sebagai harga masuk ke tren turun, strategi ini akan membuka pesanan kosong dan melacak penurunan harga.

Indikator EMA dapat secara efektif menyaring kebisingan dari data harga dan mengidentifikasi arah utama dari tren harga. Oleh karena itu, strategi ini menggunakan indikator EMA ganda sebagai dasar untuk membangun posisi aman dengan harapan dapat menangkap siklus tren harga yang lebih lama.

Keunggulan Strategis

Strategi ini memiliki keuntungan sebagai berikut:

  1. Strategi ini sederhana dan jelas, mudah dipahami dan diterapkan.
  2. Untuk mengidentifikasi tren harga secara efektif, Anda dapat membangun posisi tepat waktu untuk melacak tren.
  3. Menggunakan indikator EMA untuk memfilter kebisingan dan menghindari gangguan dari pergerakan harga jangka pendek.
  4. Anda dapat mengkonfigurasi parameter EMA untuk menyesuaikan sensitivitas kebijakan.

Risiko Strategis

Strategi ini juga memiliki beberapa risiko:

  1. Pada saat trend berbalik, sifat lag dari indikator EMA dapat menyebabkan peningkatan kerugian.
  2. Parameter EMA yang tidak disetel pada saat yang tepat akan meningkatkan tingkat sinyal palsu.
  3. Strategi ini lebih cocok untuk pasar tren yang kuat dan rentan terhadap kerugian pada saat penutupan.

Optimasi Strategi

Strategi ini dapat dioptimalkan dengan:

  1. Kombinasi dengan indikator lain untuk menilai pembalikan tren, mengurangi kerugian. Misalnya MACD, KDJ, dll.
  2. Dengan menambahkan logika stop loss, strategi stop loss yang baik dapat secara signifikan mengurangi pengembalian maksimum strategi.
  3. Optimalkan parameter EMA agar lebih sesuai dengan karakteristik harga varietas yang berbeda.
  4. Optimalisasi otomatis parameter EMA dengan algoritma pembelajaran mesin.

Meringkaskan

Strategi double EMA secara keseluruhan adalah strategi pelacakan tren yang sangat praktis. Ini mudah dioperasikan, mudah dipahami, dan berkinerja baik di pasar tren yang kuat. Strategi ini juga memiliki beberapa risiko yang dapat dioptimalkan untuk meningkatkan stabilitas strategi dari berbagai dimensi.

Kode Sumber Strategi
/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// This can only draw so many lines. Use bar replay to go back further
strategy("Strategy Lines", shorttitle="Strategy Lines", overlay=true, max_lines_count=500)

//###########################################################################################################################################
// Replace your strategy here
//###########################################################################################################################################

shortEMA = ta.ema(close, input(9, title="Short EMA Length"))
longEMA = ta.ema(close, input(21, title="Long EMA Length"))

// Entry conditions for long and short positions
longCondition = ta.crossover(shortEMA, longEMA)
shortCondition = ta.crossunder(shortEMA, longEMA)

//###########################################################################################################################################
// Strategy Lines
//###########################################################################################################################################

var timeLow = bar_index
var line li = na
var openLPrice = 0.0000
var openSPrice = 0.0000

LongWColor = input.color(color.rgb(0,255,0,0),"Long Win Color", group="Strategy Lines")
LongLColor = input.color(color.rgb(0,0,255,0),"Long Loss Color", group="Strategy Lines")
ShortWColor = input.color(color.rgb(255,255,0,0),"Short Win Color", group="Strategy Lines")
ShortLColor = input.color(color.rgb(255,0,0,0),"Short Loss Color", group="Strategy Lines")
WinFontColor = input.color(color.rgb(0,0,0,0),"Win Font Color", group="Strategy Lines")
LossFontColor = input.color(color.rgb(255,255,255,0),"Loss Font Color", group="Strategy Lines")
LinesShowLabel = input(false,"Show Labels?",group = "Strategy Lines")

// // Start new line when we go long
// if strategy.position_size >0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)

// // Start new line when we go short
// if strategy.position_size <0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)

// //Delete Lines if we don't have a position open
// if strategy.position_size ==0
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=color.rgb(0,0,0,100))
//     line.delete(li)

if LinesShowLabel
    // Short Label
    if strategy.position_size>=0 and strategy.position_size[1] <0
        label.new(
             timeLow, na, 
             text=str.tostring((openSPrice-close[1])/(syminfo.mintick*10)), 
             color=close[1]<openSPrice?ShortWColor:ShortLColor, 
             textcolor=close[1]<openSPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)
    // Long Label
    if strategy.position_size<=0 and strategy.position_size[1] >0
        label.new(
             timeLow, na,
             text=str.tostring((close[1]-openLPrice)/(syminfo.mintick*10)), 
             color=close[1]>openLPrice?LongWColor:LongLColor, 
             textcolor=close[1]>openLPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)

// Open long position and draw line
if (longCondition)
    //strategy.entry("Long", strategy.long)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
    openLPrice := close

// Open short position and draw line
if (shortCondition)
    //strategy.entry("Short", strategy.short)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
    openSPrice := close

//###########################################################################################################################################
// Strategy Execution (Replace this as well)
//###########################################################################################################################################

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)