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

Tác giả:ChaoZhang, Ngày: 2023-12-27 15:22:40
Tags:

img

Tóm lại

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

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

Định hướng xu hướng của một thị trường là xu hướng xu hướng của một thị trường. Định hướng xu hướng của một thị trường là xu hướng xu hướng của một thị trường. Định hướng xu hướng của một thị trường là xu hướng xu hướng của một thị trường.

Ngoài ra, độ dày mây Ichimoku giúp xác định sức mạnh của xu hướng hiện tại để lọc ra một số tín hiệu sai. Chỉ số ATR được sử dụng để thiết lập stop loss. Chỉ số EMA xác nhận xu hướng trung hạn và dài hạn.

Cụ thể, đi dài khi giá trên dải trên của cả ba chỉ số siêu xu hướng, và đi ngắn khi dưới dải dưới của cả ba. Ngoài ra yêu cầu giá phải ở trên hoặc dưới đám mây Ichimoku để lọc các tín hiệu không chắc chắn. Stop loss được thiết lập với giá nhập trừ giá ATR cho một stop trailing động.

Ưu điểm

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

  2. Mây Ichimoku xác định sức mạnh xu hướng để tránh phá vỡ sai.

  3. EMA hỗ trợ xác nhận hướng xu hướng trung hạn và dài hạn, xác minh các tín hiệu từ siêu xu hướng, tiếp tục cải thiện độ tin cậy.

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

Rủi ro

  1. Mặc dù đám mây Ichimoku được thêm vào, nhưng vẫn có nguy cơ xâm nhập vào vùng không hợp lệ nếu độ dày của đám mây bị xâm nhập.

  2. Khi biến động cao, mức dừng lỗ được đặt bởi ATR có thể được kích hoạt trực tiếp, do đó tăng tỷ lệ lỗ. Các thông số có thể được điều chỉnh hoặc tăng phạm vi dừng lỗ.

  3. Các tín hiệu không hợp lệ có thể xảy ra thường xuyên nếu các thông số siêu xu hướng được đặt không phù hợp.

Tăng cường

  1. Nhiều chỉ số như chỉ số biến động, Bollinger Bands có thể được thêm vào để hỗ trợ lọc tín hiệu và cải thiện độ tin cậy.

  2. Cải thiện tính toán ATR để điều chỉnh năng động phạm vi dừng lỗ trong khi dao động lớn để giảm tỷ lệ mất mát.

  3. Thêm mô hình học máy được đào tạo trên dữ liệu lịch sử để đánh giá tín hiệu giao dịch thay vì cài đặt tham số thủ công. Độ chính xác tín hiệu có thể được cải thiện.

Kết luận

Chiến lược này kết hợp bốn phần bao gồm siêu xu hướng ba, đám mây Ichimoku, ATR và EMA. Các tín hiệu được xác minh trên các chỉ số khi xác định xu hướng thị trường. Mây Ichimoku và ATR kiểm soát rủi ro dừng lỗ. EMA xác nhận xu hướng trung hạn và dài hạn.


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

Thêm nữa