Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch của Ichimoku Kumo

Tác giả:ChaoZhang, Ngày: 2024-05-29 17:23:36
Tags:

img

Tổng quan

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.

Nguyên tắc chiến lược

  1. Sử dụng các đường Kijun-sen, Tenkan-sen và Senkou Span từ chỉ số Ichimoku để xác định xu hướng thị trường.
  2. Tạo tín hiệu dài khi giá đóng dưới đường Senkou Span và đường Kijun-sen nằm trên đám mây Kumo.
  3. Tạo tín hiệu ngắn khi giá đóng cửa nằm trên đường Senkou Span và đường Kijun-sen nằm dưới đám mây Kumo.
  4. Tính toán vị trí dừng lỗ bằng cách sử dụng chỉ số ATR, đó là điểm cao nhất / thấp nhất của 5 ngọn nến cuối cùng trừ/trước 3 lần ATR.
  5. Đóng vị trí khi giá vượt mức dừng lỗ.

Ưu điểm chiến lược

  1. Chiến lược dựa trên chỉ số Ichimoku, cung cấp một phân tích toàn diện về xu hướng thị trường.
  2. Chiến lược xem xét mối quan hệ giữa giá, đường Kijun-sen và đường Senkou Span, cải thiện độ tin cậy của tín hiệu nhập cảnh.
  3. Sử dụng ATR để dừng lỗ cho phép điều chỉnh năng động vị trí dừng lỗ, kiểm soát rủi ro tốt hơn.
  4. Việc thiết lập stop-loss tính đến sự biến động của thị trường, thích nghi với các điều kiện thị trường khác nhau.

Rủi ro chiến lược

  1. Chiến lược có thể tạo ra nhiều tín hiệu sai trong thị trường hỗn loạn, dẫn đến giao dịch thường xuyên và mất vốn.
  2. Hiệu suất của chiến lược phụ thuộc vào sự lựa chọn các thông số chỉ số Ichimoku, và các thông số khác nhau có thể tạo ra kết quả giao dịch khác nhau.
  3. Trong các thị trường biến động, giá có thể nhanh chóng phá vỡ vị trí dừng lỗ, gây ra sự trượt và thua lỗ đáng kể.

Hướng dẫn tối ưu hóa chiến lược

  1. Đưa ra các chỉ số kỹ thuật khác hoặc phân tích giá khối lượng để hỗ trợ xác định xu hướng và thời gian nhập cảnh, cải thiện độ chính xác tín hiệu.
  2. Tối ưu hóa cài đặt dừng lỗ, chẳng hạn như xem xét dừng lại hoặc dừng lỗ di chuyển, để bảo vệ tốt hơn an toàn tài khoản.
  3. Kết hợp kích thước vị trí vào chiến lược, điều chỉnh kích thước của mỗi giao dịch dựa trên biến động thị trường và rủi ro tài khoản.
  4. Thực hiện tối ưu hóa tham số trên chiến lược để tìm sự kết hợp tham số phù hợp nhất cho điều kiện thị trường hiện tại.

Tóm lại

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")


Thêm nữa