Chiến lược giao dịch định lượng Triple Super Trend Ichimoku Cloud


Ngày tạo: 2023-12-27 15:22:40 sửa đổi lần cuối: 2023-12-27 15:22:40
sao chép: 1 Số nhấp chuột: 1074
1
tập trung vào
1623
Người theo dõi

Chiến lược giao dịch định lượng Triple Super Trend Ichimoku Cloud

Tổng quan

Chiến lược này là một chiến lược giao dịch định lượng kết hợp ba chỉ số siêu xu hướng, chỉ số đám mây Ichimoku, chỉ số sóng thực trung bình (ATR) và chỉ số di chuyển trung bình (EMA). Chiến lược này sử dụng ba chỉ số siêu xu hướng để xác định hướng xu hướng thị trường, đám mây Ichimoku để xác định áp lực hỗ trợ, thiết lập dừng lỗ của chỉ số ATR và xác nhận xu hướng của chỉ số EMA để tạo thành một hệ thống giao dịch hoàn chỉnh hơn.

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

Lý luận cốt lõi của chiến lược này dựa trên phán đoán của ba chỉ số vượt quá xu hướng. Chỉ số vượt quá xu hướng đánh giá xu hướng bằng cách so sánh giá với mức độ lớn của các sóng thực tế trung bình trong một chu kỳ nhất định.

Ngoài ra, chỉ số mây Ichimoku cho thấy độ dày của đám mây để đánh giá sức mạnh của xu hướng hiện tại, do đó loại bỏ một số tín hiệu sai. Chỉ số ATR được sử dụng để đặt điểm dừng. Chỉ số EMA được sử dụng để xác nhận xu hướng đường dài trung bình.

Cụ thể, khi giá cao hơn đường lên của ba nhóm chỉ số siêu xu hướng, hãy làm nhiều hơn; khi giá thấp hơn đường xuống của ba nhóm chỉ số siêu xu hướng, hãy làm trống. Đồng thời yêu cầu giá cao hơn hoặc thấp hơn đám mây Ichimoku, lọc các tín hiệu không chắc chắn. Đặt điểm dừng để giá mở vị trí trừ giá trị của chỉ số ATR, thực hiện theo dõi động lực.

Lợi thế chiến lược

  1. Cài đặt tham số của chỉ số siêu xu hướng ba lần khác nhau, có thể lọc hiệu quả tiếng ồn trên thị trường, đánh giá chính xác về hướng xu hướng.

  2. Chỉ số đám mây Ichimoku đánh giá xu hướng mạnh yếu, tránh phá vỡ giả. Thiết lập dừng lỗ ATR là hợp lý, tối đa tránh thua lỗ lớn.

  3. Chỉ số EMA hỗ trợ xác định hướng xu hướng đường dài trung bình, và xác nhận lẫn nhau với phán đoán xu hướng siêu, tiếp tục nâng cao độ tin cậy của tín hiệu.

  4. Kết hợp nhiều chỉ số, các chỉ số khác nhau có thể xác minh lẫn nhau, đánh giá tổng hợp xu hướng thị trường, tín hiệu đáng tin cậy hơn.

Rủi ro chiến lược

  1. Mặc dù tham gia vào phán quyết của chỉ số đám mây Ichimoku, nhưng cũng có nguy cơ phá vỡ độ dày đám mây và đi vào khu vực không hiệu quả. Trong trường hợp này, chỉ số ATR sẽ kiểm soát một phần tổn thất trong một phạm vi nhất định.

  2. Khi thị trường biến động mạnh, điểm dừng của chỉ số ATR có thể được kích hoạt trực tiếp, làm tăng tỷ lệ thua lỗ của chiến lược. Tại thời điểm này, tham số ATR có thể được điều chỉnh thích hợp hoặc tăng phạm vi dừng.

  3. Nếu các tham số của chỉ số siêu xu hướng ba được thiết lập không đúng cách, có thể tạo ra nhiều tín hiệu vô hiệu. Điều này đòi hỏi phải tìm kiếm các tham số kết hợp tốt nhất thông qua một số lượng lớn phản hồi.

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

  1. Các chỉ số khác có thể được thêm vào, chẳng hạn như chỉ số tỷ lệ dao động, chỉ số băng tần Brin, để hỗ trợ các tín hiệu lọc, cải thiện độ tin cậy.

  2. Có thể điều chỉnh động phạm vi dừng lỗ trong biến động lớn, giảm tỷ lệ thua lỗ bằng cách cải thiện cách tính toán chỉ số ATR.

  3. Mô hình học máy có thể được thêm vào để đánh giá tín hiệu mua và bán bằng cách đào tạo dữ liệu lịch sử, giảm tác động của thiết lập tham số nhân tạo và tăng độ chính xác tín hiệu.

Tóm tắt

Chiến lược này sử dụng tổng hợp ba bộ phận của xu hướng siêu, đám mây Ichimoku, chỉ số ATR và chỉ số EMA. Thông qua các chỉ số khác nhau, các tín hiệu được xác nhận lẫn nhau để xác định hướng xu hướng thị trường. Rủi ro kiểm soát lỗ hổng của đám mây Ichimoku và ATR, EMA hỗ trợ xác nhận xu hướng đường dài trung bình.

Mã nguồn chiến lược
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true )

// 
float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100

// ichimoku Cloud
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku")
basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku")
displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7,
	 title="Leading Span A", display = display.none)
p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a,
	 title="Leading Span B", display = display.none)
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) 
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) 
fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70))


// three supertrend

//1
atrPeriod1 = input(10, "ATR Length1", group="SuperTrend")
factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend")

[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrend1 := barstate.isfirst ? na : supertrend1

bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend1 =    plot(direction1 < 0 ? supertrend1 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend1 =  plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red,   style = plot.style_linebr)


//2
atrPeriod2 = input(11, "ATR Length2", group="SuperTrend")
factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend")

[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrend2 := barstate.isfirst ? na : supertrend2

bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend2 =    plot(direction2 < 0 ? supertrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend2 =  plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red,   style = plot.style_linebr)


//3
atrPeriod3 = input(12, "ATR Length2", group="SuperTrend")
factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend")

[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrend3 := barstate.isfirst ? na : supertrend3

bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend3 =    plot(direction3 < 0 ? supertrend3 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend3 =  plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red,   style = plot.style_linebr)


// ATR
lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR")
smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")
ma_function(sourceATR, lengthATR) =>
	switch smoothingATR
		"RMA" => ta.rma(sourceATR, lengthATR)
		"SMA" => ta.sma(sourceATR, lengthATR)
		"EMA" => ta.ema(sourceATR, lengthATR)
		=> ta.wma(sourceATR, lengthATR)
ATR = ma_function(ta.tr(true), lengthATR)
plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none)

// EMA
lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA")
srcEMA = input(close, title="Source of EMA", group="EMA")
offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA")
outEMA = ta.ema(srcEMA, lenEMA)
plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none)

ma(sourceEMA, lengthEMA, type) =>
    switch type
        "SMA" => ta.sma(sourceEMA, lengthEMA)
        "EMA" => ta.ema(sourceEMA, lengthEMA)
        "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA)
        "WMA" => ta.wma(sourceEMA, lengthEMA)
        "VWMA" => ta.vwma(sourceEMA, lengthEMA)

typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA")
smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA")

smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)


//logic



if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) 
	strategy.entry("L", strategy.long)
else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) 
	strategy.entry("S", strategy.short)
else
	strategy.close_all("C")