ICHIMOKU KUMO TWIST STRATEGY

Tác giả:ChaoZhang, Ngày: 2023-10-27 16:36:59
Tags:

img

Tổng quan

Chiến lược Ichimoku Kumo Twist sử dụng đường chuyển đổi, đường cơ sở và đường trải dài hàng đầu của chỉ số Ichimoku để xây dựng các tín hiệu giao dịch như một chiến lược theo xu hướng. Nó xác định các điểm đảo ngược xu hướng ngắn hạn và trung hạn bằng cách theo dõi các bước ngoặt trong đám mây Ichimoku để tìm các điểm thoát rủi ro thấp hơn và cơ hội mua quá mức / bán quá mức. Chiến lược có thể được sử dụng cho giao dịch trong ngày cũng như giao dịch trung hạn nhiều tuần.

Chiến lược logic

Chiến lược này chủ yếu sử dụng ba đường Ichimoku đường chuyển đổi, đường cơ bản và khoảng dẫn đầu 1, cùng với giá cao và thấp của các ngọn nến để tính toán ranh giới đám mây phía trên và phía dưới. Đường chuyển đổi tính toán điểm trung bình của mức cao và thấp trong 9 ngọn nến trước đây, đại diện cho mức trung bình ngắn hạn. Đường cơ bản tính toán điểm trung bình của mức cao và thấp trong 26 ngọn nến trước đây như mức trung bình dài hạn.

Các tín hiệu mua được tạo ra khi phạm vi dẫn đầu 1 vượt qua phạm vi dẫn đầu 2, trong khi các tín hiệu bán được tạo ra khi phạm vi dẫn đầu 1 vượt qua dưới phạm vi dẫn đầu 2. Chiến lược giao dịch chỉ đơn giản theo dõi các đường chéo tăng và giảm của các phương tiện ngắn và trung hạn để nắm bắt những thay đổi xu hướng.

Phân tích lợi thế

  • Chiến lược xoay mây Ichimoku kết hợp cả xu hướng ngắn hạn và trung hạn, có thể xác định hiệu quả các điểm đảo ngược xu hướng.

  • Các chiến lược dựa trên sự đảo ngược trung bình có một số sự chậm trễ được xây dựng để lọc ra tiếng ồn.

  • Sử dụng các đám mây để đo lường sức mạnh xu hướng cho phép cải thiện các bước vào và ra.

  • Không cần tối ưu hóa tham số - các tham số Ichimoku tiêu chuẩn hoạt động tốt.

Phân tích rủi ro

  • Ichimoku có nội bộ khá phức tạp và không quá nhạy cảm với các điều chỉnh tham số làm cho việc tối ưu hóa quá mức trở nên khó khăn.

  • Có thể có nhiều tín hiệu sai trong các thị trường giới hạn phạm vi.

  • Sự khác biệt giữa xu hướng ngắn hạn và trung hạn có thể gây ra sự cố chiến lược.

  • Stop loss là điều cần thiết để kiểm soát rủi ro, nếu không có thể rút tiền lớn.

Cơ hội cải thiện

  • Kiểm tra các kết hợp khác nhau của các khoảng thời gian chuyển đổi và cơ sở để tìm sự cân bằng tối ưu.

  • Thêm các bộ lọc với các chỉ số khác để tránh nhận tín hiệu trong các hình thành không thuận lợi.

  • Kết hợp các chiến lược dừng lỗ như dừng động hoặc dừng lại.

  • Tối ưu hóa kích thước vị trí dựa trên điều kiện thị trường.

  • Thêm hoa hồng giao dịch trong backtests cho kết quả thực tế hơn.

Tóm lại

Nhìn chung, chiến lược chuyển hướng đám mây Ichimoku là một chiến lược theo xu hướng vừa phải. Nó có thể xác định hiệu quả các biến đổi trong xu hướng và nắm giữ các vị trí phù hợp với hướng xu hướng. Nhưng cần theo dõi và kiểm soát rủi ro nghiêm ngặt để sử dụng lâu dài. Những cải tiến liên tục trong điều chỉnh tham số, bộ lọc nhập cảnh, cơ chế dừng lỗ và nhiều hơn nữa có thể tăng cường sự ổn định và lợi nhuận của chiến lược này.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Crypto Doubled"
        20
    else
        if presets == "Crypto Singled"
            10
        else
            if presets == "Standard Doubled"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Crypto Doubled"
        60
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Crypto Doubled"
        120
    else
        if presets == "Crypto Singled"
            60
        else
            if presets == "Standard Doubled"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Crypto Doubled"
        30
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets",  options=["Crypto Doubled", "Crypto Singled", "Standard Doubled", "Standard Singled"], defval="Crypto Doubled")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=golong, stop=(stoploss ? high+syminfo.mintick : na))
strategy.entry("Sell", strategy.short, when=goshort, stop=(stoploss ? low-syminfo.mintick : na))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


Thêm nữa