Chiến lược này sử dụng chỉ số Ichimoku Kumo để xác định xu hướng thị trường và tín hiệu giao dịch. Chiến lược này đi dài khi giá dưới đám mây Kumo và đi ngắn khi giá trên đám mây Kumo. Chiến lược sử dụng chỉ số ATR để dừng lỗ và xác nhận tín hiệu nhập cảnh với sự đột phá của các đường Kijun-sen và Senkou Span. Chiến lược nhằm mục đích nắm bắt các cơ hội giao dịch trong xu hướng mạnh trong khi kiểm soát rủi ro.
Chiến lược này sử dụng nhiều thành phần của chỉ số Ichimoku để phân tích toàn diện xu hướng thị trường. Đồng thời, chiến lược sử dụng ATR stop-loss để kiểm soát rủi ro, tăng cường độ bền của chiến lược. Tuy nhiên, chiến lược có thể hoạt động kém hơn ở các thị trường khác nhau và dựa trên lựa chọn tham số. Trong tương lai, hiệu suất của chiến lược có thể được cải thiện hơn nữa bằng cách giới thiệu các phương pháp phân tích khác, tối ưu hóa stop-loss và kích thước vị trí và các phương tiện khác.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © muratatilay //@version=5 strategy( "Kumo Trade Concept", overlay=true, initial_capital=10000, currency=currency.USDT, default_qty_type=strategy.percent_of_equity, default_qty_value=30, commission_type=strategy.commission.percent, commission_value=0.1, margin_long=10, margin_short=10) // ICHIMOKU Lines // INPUTS tenkanSenPeriods = input.int(9, minval=1, title="Tenkan-sen") kijunSenPeriods = input.int(26, minval=1, title="Kijun-sen") senkouBPeriod = input.int(52, minval=1, title="Senkou span B") displacement = input.int(26, minval=1, title="Chikou span") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) tenkanSen = donchian(tenkanSenPeriods) kijunSen = donchian(kijunSenPeriods) senkouA = math.avg(tenkanSen, kijunSen) senkouB = donchian(senkouBPeriod) // Other Indicators float atrValue = ta.atr(5) // Calculate Senkou Span A 25 bars back senkouA_current = math.avg(tenkanSen[25], kijunSen[25]) // Calculate Senkou Span B 25 bars back senkouB_current = math.avg(ta.highest(senkouBPeriod)[25], ta.lowest(senkouBPeriod)[25]) // Kumo top bottom senkou_max = (senkouA_current >= senkouB_current) ? senkouA_current : senkouB_current senkou_min = (senkouB_current >= senkouA_current) ? senkouA_current : senkouB_current // Trade Setups long_setup = (kijunSen > senkou_max) and (close < senkou_min) short_setup = (kijunSen < senkou_min ) and ( close > senkou_max ) // Check long_setup for the last 10 bars long_setup_last_10 = false for i = 0 to 50 if long_setup[i] long_setup_last_10 := true short_setup_last_10 = false for i = 0 to 50 if short_setup[i] short_setup_last_10 := true closeSenkouCross = (close > senkou_max) and barstate.isconfirmed closeKijunCross = (close > kijunSen ) senkouCloseCross = close < senkou_min kijunCloseCross = close < kijunSen // Handle Trades // Enter Trade var float trailStopLong = na var float trailStopShort = na if ( closeSenkouCross and long_setup_last_10 and closeKijunCross ) strategy.entry(id="Buy", direction = strategy.long) trailStopLong := na if senkouCloseCross and short_setup_last_10 and kijunCloseCross strategy.entry(id="Sell", direction = strategy.short) trailStopShort := na // Update trailing stop float temp_trailStop_long = ta.highest(high, 5) - (atrValue * 3) float temp_trailStop_short = ta.lowest(low, 5) + (atrValue * 3) if strategy.position_size > 0 if temp_trailStop_long > trailStopLong or na(trailStopLong) trailStopLong := temp_trailStop_long if strategy.position_size < 0 if temp_trailStop_short < trailStopShort or na(trailStopShort) trailStopShort := temp_trailStop_short // Handle strategy exit if close < trailStopLong and barstate.isconfirmed strategy.close("Buy", comment="Stop Long") if close > trailStopShort and barstate.isconfirmed strategy.close("Sell", comment="Stop Short") // PRINT ON CHART plot(kijunSen, color=color.rgb(214, 58, 30), title="Kijun-sen", linewidth=2) p1 = plot(senkouA, offset=displacement - 1, color=#A5D6A7, title="Senkou span A") p2 = plot(senkouB, offset=displacement - 1, color=#EF9A9A, title="Senkou Span B") fill(p1, p2, color=senkouA > senkouB ? color.rgb(67, 160, 71, 90) : color.rgb(244, 67, 54, 90)) // PRINT SETUPS plotshape(long_setup , style=shape.circle, color=color.green, location=location.belowbar, size=size.small) plotshape(short_setup, style=shape.circle, color=color.red, location=location.abovebar, size=size.small) // Trail Stop plot(strategy.position_size[1] > 0 ? trailStopLong : na, style=plot.style_linebr, color=color.purple, title="Stop Loss") plot(strategy.position_size[1] < 0 ? trailStopShort : na, style=plot.style_linebr, color=color.purple, title="Stop Loss")