
Chiến lược này sử dụng đường trung bình di chuyển chỉ số 8 chu kỳ khác nhau với biểu đồ đám mây Ichimoku làm tín hiệu giao dịch chính và có thể hoạt động hiệu quả trong khung thời gian 1 giờ, 4 giờ hoặc ngày.
Các nguyên tắc cốt lõi của chiến lược này dựa trên hai phần:
Chiến lược này sử dụng 8 EMA có chu kỳ khác nhau, 5 ngày, 11 ngày, 15 ngày, 18 ngày, 21 ngày, 24 ngày, 28 ngày và 34 ngày. 8 EMA này được gọi là Octa-EMA. Khi EMA có chu kỳ ngắn hơn biểu thị xu hướng đa đầu trên EMA có chu kỳ dài hơn, thì ngược lại biểu thị xu hướng không đầu.
Đồ họa đám mây Ichimoku bao gồm các đường chuyển đổi, đường chuẩn, đường chậm và đường dẫn A / B. Đồ họa đám mây chủ yếu xác định hướng xu hướng và cung cấp sức đề kháng hỗ trợ. Khi giá ở phía trên của biểu đồ đám mây là xu hướng đa đầu, ở phía dưới của biểu đồ đám mây là xu hướng không đầu.
Các tín hiệu giao dịch của chiến lược này được tạo ra từ hai thành phần lớn trên. Một tín hiệu mua được tạo ra khi tất cả 8 EMA nằm ở nhiều đầu (tức là EMA ngắn nằm trên EMA dài) và giá cao hơn biểu đồ đám mây của Ichimoku. Một tín hiệu bán được tạo ra khi EMA xếp hàng chuyển sang đầu không (tức là EMA ngắn đi qua EMA dài).
Chiến lược này có những lợi thế chính như sau:
Chiến lược này cũng có một số rủi ro:
Đối với các rủi ro trên, bạn có thể làm giảm rủi ro bằng cách điều chỉnh các tham số EMA hoặc tối ưu hóa các điều kiện nhập học, hoặc kết hợp với các chỉ số khác như hỗ trợ.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Octa-EMA là một chiến lược theo dõi xu hướng ổn định và đáng tin cậy hơn so với chiến lược giao dịch định lượng đám mây Ichimoku. Nó sử dụng cả hai xu hướng phán đoán EMA và tín hiệu lọc Ichimoku, có thể đạt được tỷ lệ sai lầm thấp hơn sau khi tối ưu hóa các tham số. Chiến lược này có thể được áp dụng rộng rãi cho các loại như chứng khoán, ngoại hối, kim loại quý, và có thể hoạt động trong nhiều chu kỳ.
/*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')