Chiến lược giao dịch đa khung thời gian CCI Supertrend tốt nhất

Tác giả:ChaoZhang, Ngày: 2024-01-18 15:09:33
Tags:

img

Tổng quan

Chiến lược này tích hợp chỉ số Supertrend và Chỉ số kênh hàng hóa (CCI) để thực hiện theo dõi xu hướng nhiều khung thời gian và tạo tín hiệu giao dịch. Ý tưởng chính là sử dụng chỉ số CCI để đánh giá hướng xu hướng ngắn hạn trong khi kết hợp chỉ số Supertrend để xác định hướng xu hướng trung hạn đến dài hạn.

Chiến lược logic

Chỉ số CCI cho xu hướng ngắn hạn

Chỉ số CCI có thể xác định các kịch bản mua quá mức và bán quá mức. Một đường chéo lên của đường 0 là một tín hiệu tăng trong khi một đường giảm là một tín hiệu giảm. Chiến lược này sử dụng tính năng này để xác định hướng xu hướng ngắn hạn.

cci_period = input(28, "CCI Period")
cci = cci(source, cci_period)  
ML = input(0, "CCI Mid Line pivot")

Mã trên xác định khoảng thời gian CCI và vị trí giữa dòng.

TrendUp := cci[1] > ML ? max(Up,TrendUp[1]) : Up
TrendDown := cci[1]< ML ? min(Dn,TrendDown[1]) : Dn  

Mã này kiểm tra xem cci đi qua trên/dưới đường 0 để cập nhật dải trên/dưới của Supertrend.

Supertrend cho xu hướng trung bình đến dài hạn

Chỉ số Supertrend kết hợp ATR với giá để xác định xu hướng trung và dài hạn.

Supertrend được tính như sau:

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd)) 

Trong đó Factor và Pd là các tham số có thể điều chỉnh.

Các biến xu hướng xác định xu hướng hiện tại Supertrend:

Trend := cci > ML ? 1: cci < ML ? -1: nz(Trend[1],1)  

Tích hợp CCI và Supertrend

Bằng cách tích hợp CCI và Supertrend, chiến lược này nhận ra phán đoán xu hướng nhiều khung thời gian.

Khi các hướng đồng ý, các tín hiệu giao dịch đáng tin cậy hơn được tạo ra.

isLong = st_trend == 1 
isShort = st_trend == -1

Nhập khi ngắn hạn và trung hạn liên kết, thoát khi hướng không đồng ý.

Ưu điểm

Phán quyết nhiều khung thời gian

Tích hợp các chỉ số ngắn hạn và trung hạn cho các tín hiệu đáng tin cậy hơn.

Các thông số có thể tùy chỉnh

Nhân tố Supertrend và Thời gian CCI có thể được điều chỉnh theo điều kiện thị trường.

Đơn giản và rõ ràng

Logic đơn giản và dễ hiểu, tuyệt vời cho người mới bắt đầu.

Áp dụng rộng

Áp dụng cho cổ phiếu, ngoại hối, tiền điện tử theo điều chỉnh tham số.

Rủi ro và giải pháp

Price Whipsaw

Nhiều tín hiệu sai có thể xảy ra khi giá dao động mạnh.

Lại chậm trong những động thái mạnh mẽ

Kết hợp các chỉ số động lực để theo dõi các xu hướng tăng tốc.

Không dừng mất mát

Thêm stop loss dựa trên ATR để kiểm soát rủi ro.

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

Sự tương quan thị trường

Điều chỉnh các thông số cho các thị trường khác nhau.

Sự kết hợp động lực

Kết hợp với MACD, KDJ vv để bắt được động lực mạnh mẽ.

Học máy

Sử dụng AI và phương pháp tập hợp để tối ưu hóa các thông số và quy tắc.

Kết luận

Chiến lược này kết hợp thành công Supertrend và CCI để theo dõi xu hướng nhiều khung thời gian. Logic đơn giản, tiềm năng phần thưởng tốt và khả năng tùy biến. Có thể cải thiện hơn nữa thông qua điều chỉnh tham số, dừng lỗ và học máy để trở thành một hệ thống giao dịch vững chắc.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

StrategyName = "Best Supertrend CCI Strategy"
ShortStrategyName = "Best Supertrend CCI Strategy"

strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true )

//////////////////////////
//* COLOR CONSTANTS *//
//////////////////////////

AQUA = #00FFFFFF
BLUE = #0000FFFF
RED  = #FF0000FF
LIME = #00FF00FF
GRAY = #808080FF
DARKRED   = #8B0000FF
DARKGREEN = #006400FF
GOLD = #FFD700
WHITE = color.white

// Plots
GREEN_LIGHT     = color.new(color.green, 40)
RED_LIGHT       = color.new(color.red, 40) 
BLUE_LIGHT      = color.new(color.aqua, 40)
PURPLE_LIGHT    = color.new(color.purple, 40) 

source = input(close)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// CCI /////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

cci_period = input(28, "CCI Period")
cci = cci(source, cci_period)
//UL = input(80, "Upper level")
//LL = input(20, "Lower Level")
ML = input(0, "CCI Mid Line pivot")

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////// SUPERTREND /////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

Factor=input(3,title="[ST] Factor", minval=1,maxval = 100, type=input.float)
Pd=input(3, title="[ST] PD", minval=1,maxval = 100)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////////////////////// SUPERTREND DETECTION //////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

f_supertrend(Factor, Pd) =>

    Up=hl2-(Factor*atr(Pd))
    Dn=hl2+(Factor*atr(Pd))
    
    TrendUp = 0.0
    TrendUp := cci[1] > ML ? max(Up,TrendUp[1]) : Up
    TrendDown = 0.0
    TrendDown := cci[1]< ML ? min(Dn,TrendDown[1]) : Dn
    Trend = 0.0
    Trend := cci > ML ? 1: cci < ML ? -1: nz(Trend[1],1)
    Tsl = Trend==1? TrendUp: TrendDown

    [Trend, Tsl]

[st_trend, st_tsl] = f_supertrend(Factor, Pd)

// Plot the ST
linecolor = close >= st_tsl ? color.green : color.red
plot(st_tsl, color = linecolor , linewidth = 3,title = "SuperTrend", transp=0)

isLong  = st_trend == 1
isShort = st_trend == -1

longClose   = isLong[1] and isShort
shortClose  = isShort[1] and isLong

strategy.entry("Long", 1, when=isLong)
strategy.close("Long", when=longClose )

strategy.entry("Short", 0,  when=isShort)
strategy.close("Short", when=shortClose )


Thêm nữa