Octa-EMA dan Ichimoku Cloud Strategi Perdagangan Kuantitatif

Penulis:ChaoZhang, Tanggal: 2023-12-11 14:52:05
Tag:

img

Gambaran umum

Strategi ini menggunakan 8 rata-rata bergerak eksponensial (EMA) dari periode yang berbeda dan awan Ichimoku sebagai sinyal perdagangan utama, yang dapat berjalan secara efektif dalam jangka waktu satu jam, 4 jam atau harian.

Prinsip Strategi

Prinsip-prinsip inti dari strategi ini didasarkan pada dua bagian berikut:

  1. 8 Rata-rata Gerak Eksponensial (Octa-EMA)

    Strategi ini menggunakan 8 EMA dengan periode yang berbeda, khususnya 5 hari, 11 hari, 15 hari, 18 hari, 21 hari, 24 hari, 28 hari dan 34 hari.

  2. Awan Ichimoku

    Awan Ichimoku berisi garis konversi, garis dasar, rentang tertinggal dan rentang utama A / B. Awan terutama menilai arah tren dan memberikan dukungan / resistensi. Ketika harga di atas awan, itu menunjukkan tren naik, dan ketika di bawah awan, itu menunjukkan tren turun.

Sinyal perdagangan untuk strategi ini berasal dari kombinasi dari dua komponen di atas. Sinyal beli dihasilkan ketika semua 8 EMA berada dalam pengaturan uptrend (EMA pendek di atas EMA panjang) dan harga berada di atas awan Ichimoku. Sinyal jual dihasilkan ketika pengaturan EMA membalik ke downtrend (EMA pendek melintasi di bawah EMA panjang).

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Mengurangi sinyal palsu melalui penyaringan indikator ganda
  2. Awan Ichimoku menilai arah tren, menghindari perdagangan kontra-tren
  3. 8 EMA crossovers menggabungkan untuk menentukan tren dengan akurasi yang lebih tinggi
  4. Dapat berjalan pada beberapa kerangka waktu
  5. Ruang pengaturan parameter besar, dapat disesuaikan untuk produk yang berbeda

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Dapat menghasilkan lebih banyak sinyal jual palsu selama pasar yang terikat rentang
  2. Kondisi pembelian yang ketat dapat kehilangan beberapa peluang pembelian
  3. Mungkin gagal ketika tren jangka pendek dan jangka menengah bertentangan
  4. Penyesuaian parameter EMA yang buruk dapat menyebabkan lag sinyal

Untuk mengatasi risiko ini, parameter dapat disesuaikan atau kondisi masuk dioptimalkan untuk mengurangi risiko.

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam beberapa aspek:

  1. Sesuaikan parameter EMA untuk menemukan periode optimal
  2. Menambahkan indikator penentu tren untuk memastikan penilaian tren yang akurat
  3. Menggabungkan indikator tambahan seperti MACD, KDJ untuk meningkatkan waktu masuk
  4. Tambahkan stop loss/take profit ke kontrol per risiko perdagangan
  5. Parameter pengujian pada produk yang berbeda untuk menemukan pencocokan terbaik
  6. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara otomatis

Kesimpulan

Secara keseluruhan, strategi cloud Octa-EMA dan Ichimoku adalah sistem trend berikut yang relatif stabil dan dapat diandalkan. Ini menggunakan EMA crossover untuk menentukan tren dan Ichimoku untuk menyaring sinyal, memberikan sinyal palsu rendah ketika dioptimalkan. Strategi ini dapat diterapkan secara luas pada indeks, forex, logam dll pada beberapa kerangka waktu. Dengan menggabungkan stop loss / take profit dan mengkonfirmasi indikator, tingkat menang dan profitabilitas dapat ditingkatkan lebih lanjut.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Fukuiz

strategy(title='Fukuiz Octa-EMA + Ichimoku', shorttitle='Fuku octa strategy', overlay=true, process_orders_on_close=true, 
     default_qty_type= strategy.cash , default_qty_value=1000, currency=currency.USD, initial_capital=10000 ,commission_type = strategy.commission.percent,commission_value=0.25)


//OCTA EMA ##################################################


// Functions
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

showRibbon = input(true, 'Show Ribbon (EMA)')
ema1Len = input(5, title='EMA 1 Length')
ema2Len = input(11, title='EMA 2 Length')
ema3Len = input(15, title='EMA 3 Length')
ema4Len = input(18, title='EMA 4 Length')
ema5Len = input(21, title='EMA 5 Length')
ema6Len = input(24, title='EMA 6 Length')
ema7Len = input(28, title='EMA 7 Length')
ema8Len = input(34, title='EMA 8 Length')

[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

//Plot

ribbonDir = ema8 < ema2
p1 = plot(ema1, color=showRibbon ? ribbonDir ? #1573d4 : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 1')
p2 = plot(ema2, color=showRibbon ? ribbonDir ? #3096ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 2')
plot(ema3, color=showRibbon ? ribbonDir ? #57abff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 3')
plot(ema4, color=showRibbon ? ribbonDir ? #85c2ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 4')
plot(ema5, color=showRibbon ? ribbonDir ? #9bcdff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 5')
plot(ema6, color=showRibbon ? ribbonDir ? #b3d9ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 6')
plot(ema7, color=showRibbon ? ribbonDir ? #c9e5ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 7')
p8 = plot(ema8, color=showRibbon ? ribbonDir ? #dfecfb : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 8')
fill(p1, p2, color.new(#1573d4, 85))
fill(p2, p8, color.new(#1573d4, 85))

//ichimoku##################################################

//color
colorblue = #3300CC
colorred = #993300
colorwhite = #FFFFFF
colorgreen = #CCCC33
colorpink = #CC6699
colorpurple = #6633FF

//switch
switch1 = input(false, title='Chikou')
switch2 = input(false, title='Tenkan')
switch3 = input(false, title='Kijun')

middleDonchian(Length) =>
    lower = ta.lowest(Length)
    upper = ta.highest(Length)
    math.avg(upper, lower)

//Functions
conversionPeriods = input.int(9, minval=1)
basePeriods = input.int(26, minval=1)
laggingSpan2Periods = input.int(52, minval=1)
displacement = input.int(26, minval=1)
Tenkan = middleDonchian(conversionPeriods)
Kijun = middleDonchian(basePeriods)
xChikou = close
SenkouA = middleDonchian(laggingSpan2Periods)
SenkouB = (Tenkan[basePeriods] + Kijun[basePeriods]) / 2

//Plot
A = plot(SenkouA[displacement], color=color.new(colorpurple, 0), title='SenkouA')
B = plot(SenkouB, color=color.new(colorgreen, 0), title='SenkouB')
plot(switch1 ? xChikou : na, color=color.new(colorpink, 0), title='Chikou', offset=-displacement)
plot(switch2 ? Tenkan : na, color=color.new(colorred, 0), title='Tenkan')
plot(switch3 ? Kijun : na, color=color.new(colorblue, 0), title='Kijun')
fill(A, B, color=color.new(colorgreen, 90), title='Ichimoku Cloud')

//Buy and Sell signals
fukuiz = math.avg(ema2, ema8)
white = ema2 > ema8
gray = ema2 < ema8
buycond = white and white[1] == 0
sellcond = gray and gray[1] == 0
bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)
buy = bearish[1] and buycond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell = bullish[1] and sellcond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell2=ema2 < ema8
buy2 = white and fukuiz > SenkouA[displacement] and fukuiz > SenkouB

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//Back test

startYear = input.int(defval=2017, title='Start Year', minval=2000, maxval=3000)
startMonth = input.int(defval=1, title='Start Month', minval=1, maxval=12)
startDay = input.int(defval=1, title='Start Day', minval=1, maxval=31)
endYear = input.int(defval=2023, title='End Year', minval=2000 ,maxval=3000)
endMonth = input.int(defval=12, title='End Month', minval=1, maxval=12)
endDay = input.int(defval=31, title='End Day', minval=1, maxval=31)

start = timestamp(startYear, startMonth, startDay, 00, 00)
end = timestamp(endYear, endMonth, endDay, 23, 59)
period() => time >= start and time <= end ? true : false

if buy2 
    strategy.entry(id='long', direction=strategy.long, when=period(), comment='BUY')

if sell2
    strategy.close(id='long', when=period(), comment='SELL')





Lebih banyak