Hệ thống ba con rồng

Tác giả:ChaoZhang, Ngày: 2023-12-21 11:56:31
Tags:

img

Tổng quan

Hệ thống ba con rồng là một chiến lược giao dịch kỹ thuật tổng hợp kết hợp chỉ số xu hướng khối lượng giá mở rộng (EPVT), chỉ số kênh Donchian và chỉ số Parabolic SAR. Chiến lược này sử dụng các điểm mạnh bổ sung của ba chỉ số để xác định hướng xu hướng thị trường và tín hiệu mua và bán tiềm năng.

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

Chiến lược này đầu tiên sử dụng EPVT và kênh Donchian để xác định hướng xu hướng thị trường. Khi EPVT nằm trên đường cơ sở và giá trên kênh Donchian phía trên, nó gợi ý xu hướng tăng. Ngược lại, khi EPVT nằm dưới đường cơ sở và giá dưới kênh Donchian phía dưới, nó gợi ý xu hướng giảm.

Sau khi xác định hướng xu hướng, chiến lược này giới thiệu chỉ số Parabolic SAR để xác định các điểm vào và ra cụ thể. Khi Parabolic SAR vượt dưới giá, nó tạo ra tín hiệu mua. Khi Parabolic SAR vượt trên giá, nó tạo ra tín hiệu bán.

Để xác nhận thêm các tín hiệu, chiến lược này cũng xác nhận hướng xu hướng trên nhiều khung thời gian để tránh tham gia thị trường trong thời gian biến động cao.

Phân tích lợi thế

Ưu điểm lớn nhất của Hệ thống ba con rồng là việc sử dụng kết hợp ba loại chỉ số khác nhau bổ sung cao để xác định toàn diện và chính xác hơn xu hướng thị trường.

  1. EPVT có thể xác định chính xác các điểm thay đổi xu hướng và sức mạnh xu hướng với các yếu tố cơ bản tốt;
  2. Các kênh Donchian có thể xác định rõ hướng xu hướng và nắm bắt xu hướng tốt;
  3. Parabolic SAR, khi kết hợp với các chỉ số xu hướng, có thể xác định chính xác hơn các điểm vào và ra.

Bằng cách kết hợp các chỉ số một cách hữu cơ, Hệ thống ba con rồng có thể tận dụng đầy đủ những lợi thế của mỗi chỉ số, dẫn đến độ chính xác cao trong việc đánh giá xu hướng dài hạn, trung bình và dài hạn, xác định chính xác hơn các điểm nhập và thoát và tỷ lệ rủi ro-lợi nhuận cao hơn.

Phân tích rủi ro

Là một chiến lược danh mục đầu tư chỉ số, Triple Dragon System có rủi ro tổng thể có thể kiểm soát được, nhưng vẫn có một số rủi ro cần lưu ý:

  1. EPVT có nguy cơ đánh giá sai các vụ thoát giả và đảo ngược lớn;
  2. Các kênh Donchian có thể thu hẹp trong quá trình củng cố bên, làm tăng xác suất tín hiệu lỗi;
  3. Cài đặt tham số Parabolic SAR không chính xác cũng có thể ảnh hưởng đến việc xác định điểm mua / bán ở một mức độ nào đó.

Để giải quyết các rủi ro trên, chúng tôi khuyên bạn nên điều chỉnh thích hợp các thiết lập tham số chỉ số và sử dụng các chỉ số khác để đánh giá bổ sung để giảm xác suất thất bại chỉ số duy nhất.

Tối ưu hóa chiến lược

Có chỗ cho việc tối ưu hóa hệ thống ba con rồng:

  1. Các thuật toán học máy có thể được giới thiệu để tối ưu hóa tham số tự động;
  2. Các chỉ số biến động có thể được xem xét để tăng cường sự ổn định;
  3. Các chỉ số tâm lý có thể được kết hợp để xác định biến động tâm lý của công chúng.

Thông qua tối ưu hóa tham số thuật toán, đánh giá kết hợp nhiều chỉ số và phân tích định lượng hành vi, có tiềm năng để cải thiện hơn nữa lợi nhuận và sự ổn định của Hệ thống Ba Rồng. Chúng tôi sẽ theo kịp sự phát triển tiên tiến của ngành để liên tục tối ưu hóa và tinh chỉnh hệ thống chiến lược.

Kết luận

Hệ thống ba con rồng là một chiến lược danh mục đầu tư chỉ số kỹ thuật sử dụng các điểm mạnh bổ sung của EPVT, kênh Donchian và Parabolic SAR để xác định xu hướng thị trường và xác định cơ hội giao dịch. Chiến lược này có đánh giá chính xác, rủi ro có thể kiểm soát được, nhiều lớp xác thực và là một hệ thống hiệu quả phù hợp với các nhà đầu tư trung dài hạn. Chúng tôi sẽ tiếp tục tối ưu hóa hệ thống ba con rồng để có tỷ lệ rủi ro-lợi nhuận vượt trội.


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

//@version=5
strategy(title="TRIPLE DRAGON SYSTEM", overlay=true,default_qty_type = strategy.percent_of_equity,default_qty_value=100,initial_capital=1000,pyramiding=0,commission_value=0.01)
/////////////// DRAG-ON ///// EMA'S /////////////// 
emar = ta.ema(close,5)
plot(emar, color=color.blue, title="S-Fast EMA")
//EMAlengthTRF = input.int(200, minval=1,title = "EMA Filter")
//ematrf = ta.ema(close,EMAlengthTRF)
//plot(ematrf, "EMA-TREND FILTER", color=color.red,linewidth = 4)
/////////////// 1-DRAG-ON /////EXTENDED PRICE VOLUME TREND /////////////// 
lenght = input(200,"EPVT - Trend Lenght")   
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
    runtime.error("No volume is provided by the data vendor.")
src = close

vt = ta.cum(ta.change(src)/src[1]*volume)
upx = ta.highest(vt,lenght)
downx = ta.lowest(vt,lenght)
basex = (upx +downx)/2
VTX = vt - basex

/////////////// 2-DRAG-ON ///// DON TREND /////////////// 

length = input.int(200, minval=1, title = "Donchian Lenght")
lower = ta.lowest(length)
upper = ta.highest(length)
basis = math.avg(upper, lower)

updiff = upper - close
downdiff = lower - close
dontrend = -(updiff + downdiff)   

xupx = ta.highest(dontrend,length) >0 ? ta.highest(dontrend,length) : 0 

xdownx = ta.lowest(dontrend,length) < 0 ?ta.lowest(dontrend,length) :0 
xxbasisxx = math.avg(xdownx, xupx)

inversedragup = xupx[1]  
inversedragdown = xdownx[1]  
inversedragon = (inversedragup+inversedragdown)/2

/////////////// 3-DRAG-ON ///// SUPER SAR-X /////////////// 
start = input(0.02)
increment = input(0.02)
maximum = input(0.8)
entry_bars = input(1, title='Entry on Nth trend bar')

atr = ta.atr(14)

atr := na(atr) ? ta.tr : atr

psar = 0.0  // PSAR
af = 0.0  // Acceleration Factor
trend_dir = 0  // Current direction of PSAR
ep = 0.0  // Extreme point
trend_bars = 0

sar_long_to_short = trend_dir[1] == 1 and close <= psar[1]  // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1]  // PSAR switches from short to long

trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long

// Calculate trend direction
trend_dir := barstate.isfirst[1] and close[1] > open[1] ? 1 : barstate.isfirst[1] and close[1] <= open[1] ? -1 : sar_long_to_short ? -1 : sar_short_to_long ? 1 : nz(trend_dir[1])

trend_bars := sar_long_to_short ? -1 : sar_short_to_long ? 1 : trend_dir == 1 ? nz(trend_bars[1]) + 1 : trend_dir == -1 ? nz(trend_bars[1]) - 1 : nz(trend_bars[1])

// Calculate  Acceleration Factor
af := trend_change ? start : trend_dir == 1 and high > ep[1] or trend_dir == -1 and low < ep[1] ? math.min(maximum, af[1] + increment) : af[1]

// Calculate extreme point
ep := trend_change and trend_dir == 1 ? high : trend_change and trend_dir == -1 ? low : trend_dir == 1 ? math.max(ep[1], high) : math.min(ep[1], low)

// Calculate PSAR
psar := barstate.isfirst[1] and close[1] > open[1] ? low[1] : barstate.isfirst[1] and close[1] <= open[1] ? high[1] : trend_change ? ep[1] : trend_dir == 1 ? psar[1] + af * atr : psar[1] - af * atr

//////////////// MELODY ///////////////////
VTY = ta.valuewhen(ta.cross(VTX,0),close,0)
//plot(VTY, color=color.black, title="Extended-PVT")

//DONTRENDX = ta.valuewhen(ta.cross(dontrend,0),close,0)
//plot(DONTRENDX, color=color.red, title="DONCHIAN TREND")

SSARX = ta.valuewhen(ta.cross(psar,close),close,0)
//plot(SSARX, color=color.black, title="SSAR-X")

MAXDRAG = math.max(SSARX,VTY)
//plot(MAXDRAG, color=color.black, title="MAX DRAG")
MINDRAG = math.min(SSARX,VTY)
//plot(MINDRAG, color=color.black, title="MIN DRAG")
BASEDRAG = math.avg(MAXDRAG,MINDRAG)
//plot(BASEDRAG, color=color.red, title="BASE DRAG")


/////BUY AND SELL LOGIC ///////////
DRAGONBUY = (ta.crossover(close,MAXDRAG) or ta.crossover(close,MINDRAG) )
DRAGONBUYSTOP = (ta.crossunder(close,MAXDRAG) or ta.crossunder(close,MINDRAG)) 
DRAGONBUYPLOT = ta.valuewhen(DRAGONBUY==true,close,0)
plot(DRAGONBUYPLOT, color=color.red, title="BUY LINE")

DRAGONSELL = (ta.crossunder(close,MAXDRAG) or ta.crossunder(close,MINDRAG) ) 
DRAGONSELLSTOP = (ta.crossover(close,MAXDRAG) or ta.crossover(close,MINDRAG))
DRAGONSELLPLOT = ta.valuewhen(DRAGONSELL==true,close,0)
plot(DRAGONSELLPLOT, color=color.red, title="SELL LINE")

/////TAKE PROFIT LOGIC ///////////
tp1 = input.int(5, minval=1,title = "TP-1")
tp2 = input.int(10, minval=1,title = "TP-2")
tp3 = input.int(15, minval=1,title = "TP-3")

TPTAKA1B = DRAGONBUYPLOT*(1+tp1/100)
//plot(TPTAKA1B, "BUY-TP1", color=color.red,linewidth = 1)
TPTAKA2B = DRAGONBUYPLOT*(1+tp2/100)
//plot(TPTAKA2B, "BUY-TP2", color=color.red,linewidth = 1)
TPTAKA3B = DRAGONBUYPLOT*(1+tp3/100)
//plot(TPTAKA3B, "BUY-TP3", color=color.red,linewidth = 1)

TPTAKA1S = DRAGONSELLPLOT*(1-tp1/100)
//plot(TPTAKA1S, "SELL-TP1", color=color.red,linewidth = 1)
TPTAKA2S = DRAGONSELLPLOT*(1-tp2/100)
//plot(TPTAKA2S, "SELL-TP2", color=color.red,linewidth = 1)
TPTAKA3S = DRAGONSELLPLOT*(1-tp3/100)
//plot(TPTAKA3S, "SELL-TP3", color=color.red,linewidth = 1)


BUYTP = ta.crossunder(emar,TPTAKA1B) or ta.crossunder(emar,TPTAKA2B) or ta.crossunder(emar,TPTAKA3B) 
SELLTP = ta.crossover(emar,TPTAKA1B) or ta.crossover(emar,TPTAKA2B) or ta.crossover(emar,TPTAKA3B)

/////STRATEGY ///////////
// Enter condition 
longCondition = DRAGONBUY==true 
if longCondition
    strategy.entry('Long', strategy.long, comment = "ENTER-LONG")

// Exit condition 
strategy.close('Long', when=DRAGONBUYSTOP, comment = "EXIT-LONG")

// Enter condition 
ShortCondition = DRAGONSELL  
if ShortCondition
    strategy.entry('Short', strategy.short, comment = "ENTER-SHORT")

// Exit condition 
strategy.close('Short', when=DRAGONSELLSTOP, comment = "EXIT-SHORT")
///// END OF STRATEGY ///////////

Thêm nữa