Hệ thống giao dịch Ichimoku Keltner tích hợp dựa trên chiến lược trung bình động

Tác giả:ChaoZhang, Ngày: 2023-12-20 13:40:08
Tags:

img

Tổng quan

Chiến lược này tích hợp chiến lược trung bình động, biểu đồ đám mây Ichimoku và các chỉ số kỹ thuật kênh Keltner để đạt được xu hướng theo dõi và giao dịch đột phá, phù hợp với giao dịch thuật toán tần số cao.

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

  1. Sử dụng kênh Keltner để đánh giá liệu giá cổ phiếu có vượt quá đường ray trên và dưới của kênh như một tín hiệu để mở các vị trí
  2. Biểu đồ mây Ichimoku đánh giá hướng xu hướng và sử dụng kênh Keltner
  3. Chiến lược trung bình động gửi tín hiệu đóng cửa

Phân tích lợi thế

  1. Tích hợp nhiều chỉ số kỹ thuật để đánh giá toàn diện để cải thiện độ chính xác quyết định
  2. Keltner kênh đánh giá quá mua và quá bán điều kiện để tránh theo đuổi cao và giết chết thấp khi mở các vị trí
  3. Các biểu đồ đám mây Ichimoku đánh giá các xu hướng chính để tránh giao dịch chống lại xu hướng
  4. Chiến lược trung bình động lọc các cú sốc và ngăn ngừa sự nhạy cảm quá mức

Phân tích rủi ro

  1. Sự tích hợp của nhiều chỉ số làm cho cài đặt tham số phức tạp hơn và đòi hỏi kiểm tra cẩn thận
  2. Việc vượt qua đường chuyển đổi và đường cơ sở của biểu đồ đám mây không phải lúc nào cũng là một tín hiệu giao dịch đáng tin cậy
  3. Kênh Keltner cần điều chỉnh các tham số để thích nghi với các đặc điểm của các cổ phiếu khác nhau

Hướng dẫn tối ưu hóa

  1. Đánh giá hiệu suất máy chủ và rút ngắn đúng chu kỳ trung bình động để tăng tần suất giao dịch
  2. Kiểm tra độ nhạy của các cổ phiếu khác nhau đối với các thông số và thiết lập các thông số thích nghi
  3. Tăng chiến lược dừng lỗ để giảm lỗ đơn

Tóm lại

Chiến lược này tích hợp các biểu đồ đám mây Ichimoku, các kênh Keltner và các chiến lược trung bình động với nhiều chỉ số kỹ thuật để đạt được theo dõi xu hướng và giao dịch đột phá hiệu quả. So với một chỉ số duy nhất, phán đoán của chiến lược này toàn diện và chính xác hơn, tránh một số tín hiệu sai. Đồng thời, cũng có những vấn đề rằng cài đặt tham số phức tạp hơn và cần được tối ưu hóa cho các cổ phiếu riêng lẻ. Nói chung, chiến lược này phù hợp với giao dịch thuật toán tần số cao với hiệu ứng đáng kể.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading 
strategy("Ichimoku Keltner Strategy", overlay=true) 

// -- Keltner ------------------------------------------------------------------
source = close

useTrueRange = input(true)
length = input(18, minval=1) 
mult = input(1.8)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)

//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source  < lower

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

// ---------------------------------------------------------------------


// -- Ichimoku

ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)

ATR = rma(tr(true), ATRlength)

len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)

emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)

conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)

donchian(len) => avg(lowest(len), highest(len))

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

p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver) 

longCond    = crossover(conversionLine, baseLine)
shortCond   = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------

if (crossUpper and (conversionLine > baseLine))
    strategy.entry("long", strategy.long, stop=bprice, comment="LONG")

if (crossLower and (conversionLine < baseLine))
    strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
    
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))

Thêm nữa