Analisis Strategi EMA Berganda

Penulis:ChaoZhang, Tarikh: 2024-02-28 18:07:59
Tag:

img

Ringkasan

Strategi EMA berganda adalah strategi trend berikut yang mengenal pasti arah trend harga dengan mengira EMA kitaran yang berbeza dan menggunakannya untuk menentukan kemasukan dan keluar.

Logika Strategi

Strategi ini terutamanya berdasarkan dua penunjuk EMA, EMA jangka pendek 9 hari dan EMA 21 hari yang lebih lama.

Apabila EMA pendek melintasi di atas EMA panjang, ia dilihat sebagai harga memasuki trend menaik. Strategi akan pergi panjang untuk mengikuti trend menaik. Apabila EMA pendek melintasi di bawah EMA panjang, ia dilihat sebagai harga memasuki trend menurun. Strategi akan pergi pendek untuk mengikuti trend menurun.

Indikator EMA dapat menapis bunyi bising dari data harga dengan berkesan dan mengenal pasti arah utama trend.

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Idea strategi adalah mudah dan mudah difahami dan dilaksanakan.
  2. Ia boleh mengenal pasti trend harga dengan berkesan dan masukkan kedudukan tepat pada masanya untuk mengikuti trend.
  3. Menggunakan EMA menapis bunyi bising dan mengelakkan gangguan dari turun naik harga jangka pendek.
  4. Parameter EMA boleh dikonfigurasi untuk menyesuaikan kepekaan strategi.

Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Ciri-ciri EMA yang tertinggal boleh meningkatkan kerugian apabila trend berbalik.
  2. Tetapan parameter EMA yang tidak betul meningkatkan kadar isyarat palsu.
  3. Strategi ini lebih sesuai untuk pasaran yang mempunyai trend yang kuat dan rentan dalam tempoh yang terhad.

Peningkatan

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Menggabungkan penunjuk lain untuk mengenal pasti pembalikan trend dan mengurangkan kerugian, contohnya MACD, KDJ, dll.
  2. Tambah logik stop loss. Strategi stop loss yang baik dapat mengurangkan pengeluaran maksimum.
  3. Mengoptimumkan parameter EMA untuk menjadikannya lebih sesuai dengan ciri harga produk yang berbeza.
  4. Gunakan algoritma pembelajaran mesin untuk mengotomatiskan pengoptimuman parameter EMA.

Ringkasan

Ringkasnya, strategi EMA berganda adalah strategi yang sangat berguna mengikut trend. Ia mudah dikendalikan, difahami, dan berfungsi dengan sangat baik di pasaran yang mempunyai trend yang kuat. Strategi ini juga mempunyai beberapa risiko yang dapat dikurangkan melalui pelbagai peningkatan untuk meningkatkan kestabihannya. Secara keseluruhan, EMA berganda berfungsi sebagai templat rujukan penting untuk perdagangan kuantitatif.


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

Lebih lanjut