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