Strategi Perdagangan Kuantitatif Grafik Awan Octa-EMA dan Ichimoku


Tanggal Pembuatan: 2023-12-11 14:52:05 Akhirnya memodifikasi: 2023-12-11 14:52:05
menyalin: 1 Jumlah klik: 737
1
fokus pada
1621
Pengikut

Strategi Perdagangan Kuantitatif Grafik Awan Octa-EMA dan Ichimoku

Ringkasan

Strategi ini menggunakan indeks bergerak rata-rata dari 8 periode yang berbeda dengan grafik Ichimoku sebagai sinyal perdagangan utama, dan dapat bekerja secara efektif dalam 1 jam, 4 jam, atau kerangka waktu garis matahari.

Prinsip Strategi

Prinsip-prinsip inti dari strategi ini didasarkan pada dua hal:

  1. 8 Indeks Rata-rata Bergerak (Octa-EMA)

Strategi ini menggunakan 8 EMA dengan periode yang berbeda, yaitu garis 5, 11, 15, 18, 21, 24, 28, dan 34. EMA ini dikenal sebagai Octa-EMA. EMA dengan periode yang lebih pendek menunjukkan tren multi-kepala, sedangkan EMA dengan periode yang lebih panjang menunjukkan tren overhead.

  1. Indikator Ichimoku

Ichimoku Cloud Graph berisi garis konversi, garis acuan, garis keterlambatan, dan garis terdepan A/B. Cloud Graph terutama menentukan arah tren dan memberikan resistensi dukungan. Ketika harga berada di atas Cloud Graph, maka harga berada di atasnya.

Strategi ini menghasilkan sinyal beli ketika semua 8 EMA berada di urutan multihead ((EMA pendek di atas EMA panjang) dan harga lebih tinggi dari grafik awan Ichimoku. Sinyal jual dihasilkan ketika EMA di urutan kosong (EMA pendek di bawah EMA panjang).

Analisis Keunggulan Strategi

Strategi ini memiliki beberapa keuntungan utama:

  1. Filter ganda dapat mengurangi sinyal palsu
  2. Ichimoku Cloud Graph Mengindikasikan Trend, Menghindari Perdagangan Berlawanan
  3. 8 EMA meningkatkan akurasi penilaian tren cross-portfolio
  4. Dapat berjalan dalam berbagai siklus waktu
  5. Optimasi parameter luas, dapat disesuaikan untuk varietas yang berbeda

Analisis Risiko Strategi

Strategi ini juga memiliki beberapa risiko:

  1. Pada saat terjadi gempa, sinyal udara mungkin lebih banyak dihasilkan.
  2. Kondisi pembelian lebih ketat, mungkin akan melewatkan beberapa titik pembelian
  3. Mungkin tidak berlaku jika tren jangka pendek dan jangka menengah tidak konsisten
  4. Setting parameter EMA yang tidak tepat dapat menyebabkan sinyal lag

Untuk risiko di atas, risiko dapat dikurangi dengan menyesuaikan parameter EMA atau mengoptimalkan persyaratan masuk, atau dapat dikombinasikan dengan indikator lain sebagai tambahan.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Menyesuaikan parameter EMA untuk mengoptimalkan siklus yang sesuai
  2. Menambahkan indikator penilaian rata-rata lebih kosong untuk memastikan keakuratan penilaian tren
  3. Menggabungkan MACD, KDJ, dan indikator lainnya untuk mengoptimalkan waktu masuk
  4. Meningkatkan strategi stop loss dan pengendalian kerugian tunggal
  5. Uji efek parameter dari berbagai varietas untuk menemukan kombinasi parameter terbaik
  6. Menggunakan algoritma pembelajaran mesin untuk mencari parameter yang optimal secara otomatis

Meringkaskan

Octa-EMA adalah strategi pelacakan tren yang lebih stabil dan andal dibandingkan dengan strategi perdagangan kuantitatif awan Ichimoku secara keseluruhan. Strategi ini menggunakan kombinasi EMA untuk menilai tren dan sinyal filter Ichimoku, dan dapat memperoleh tingkat kesalahan yang lebih rendah setelah pengoptimalan parameter. Strategi ini dapat diterapkan secara luas pada varietas seperti indeks saham, forex, dan logam mulia, dan dapat berjalan dalam beberapa siklus waktu.

Kode Sumber Strategi
/*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')