Trending Darvas Box Chiến lược giao dịch định lượng

Tác giả:ChaoZhang, Ngày: 2023-12-27 14:45:41
Tags:

img

Tổng quan

Chiến lược Trending Darvas Box là một chiến lược giao dịch ngắn hạn sử dụng kênh Darvas Box để nắm bắt xu hướng thị trường. Cơ chế cốt lõi dựa trên chỉ số Darvas Box để xác định đà thị trường và xác định cơ hội giao dịch. Nó đi dài khi giá phá vỡ trên đỉnh hộp, và đi ngắn khi giá phá vỡ dưới đáy hộp. Ngoài ra, chiến lược này cũng sử dụng các chỉ số phụ khác để tăng sự ổn định.

Chiến lược logic

  • Sử dụng tham số chiều dài để thiết lập kích thước của hộp Darvas, đó là 5 thanh mặc định trong chiến lược này.
  • Xác định hướng xu hướng dựa trên các đột phá cao / thấp, và thực hiện các vị trí dài / ngắn tương ứng.
  • Khi giá phá vỡ trên đỉnh hộp, một đường TopBox màu xanh lá cây được vẽ.
  • Khi giá phá vỡ dưới đáy hộp, một đường BottomBox màu đỏ được vẽ.
  • Sử dụng hệ thống Moving Average như một chỉ số phụ trợ. Đi dài khi giá trên MAs, và đi ngắn khi dưới MAs.
  • Sử dụng RVI để xác định khu vực mua quá mức / bán quá mức. RVI trên đường tín hiệu cho thấy mua quá mức; RVI bên dưới cho thấy bán quá mức.

Các mục nhập được thực hiện khi tất cả các chỉ số trên đồng ý. Stop loss được đặt ở dải đối diện của hộp Darvas. Các lối ra được quản lý bằng hướng RVI.

Phân tích lợi thế

  • Kênh hộp Darvas có hiệu quả nắm bắt xu hướng thị trường. Giảm cơ hội bỏ lỡ.
  • Các tín hiệu thoát khỏi hộp thường xuyên, tần suất truy cập tốt.
  • Hộp hợp lý dừng cài đặt lỗ. Kiểm soát tốt rủi ro giao dịch đơn.
  • Các chỉ số phụ giúp tăng độ chính xác.

Phân tích rủi ro

  • Phạm vi dừng lỗ rộng, rủi ro lớn hơn cho mỗi giao dịch.
  • Các giao dịch dài có thể bị dừng lại trong các lần rút ngắn nhỏ.
  • Hướng dẫn hộp không phải lúc nào cũng đúng.
  • Cần điều chỉnh kỹ cho các chỉ số phụ trợ để phù hợp với hộp.

Các thông số phụ trợ cũng cần tối ưu hóa để màn hình tín hiệu hiệu quả.

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

  • Kiểm tra chiều dài hộp để tìm kích thước tối ưu.
  • Tối ưu hóa các thông số phụ trợ để phù hợp nhất với hộp.
  • Thử các chỉ số phụ khác để xác minh tín hiệu thêm, ví dụ: KDJ, MACD.
  • Kiểm tra các thiết lập dừng lỗ và lấy lợi nhuận để ổn định hơn.

Kết luận

Tóm lại, chiến lược Trending Darvas Box là một chiến lược giao dịch tích cực nhắm mục tiêu xu hướng ngắn hạn. Nó nắm bắt những thay đổi xu hướng nhanh chóng với kênh hộp Darvas, trong khi các chỉ số phụ trợ giúp cải thiện độ chính xác. Hồ sơ rủi ro / phần thưởng là tích cực cho chiến lược này, đáng để áp dụng và tối ưu hóa liên tục.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © xxy_theone
// https://www.youtube.com/watch?v=YYxlnFOX9sQ
// This strategy script has been made to backtest the strategy explained in the video above


//@version=5
strategy(shorttitle = "Darvas Box Test", title="TradeIQ Darvas Box Test", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, currency=currency.USD)

// === INPUT BACKTEST RANGE ===
var GRP1 = "Backtest Range"
fromDate = input(timestamp("7 Mar 2022 00:00 +0000"), "From", group=GRP1)
toDate = input(timestamp("19 Mar 2022 23:59 +0000"), "To", group=GRP1)
window() =>  true


var GRP3 = "Darvas Box"
boxp=input(5, "Box Length", group=GRP3)

LL = ta.lowest(low,boxp)
k1=ta.highest(high,boxp)
k2=ta.highest(high,boxp-1)
k3=ta.highest(high,boxp-2)

NH =  ta.valuewhen(high>k1[1],high,0)
box1 =k3<k2
TopBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, NH, 0)
BottomBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, LL, 0)


plot(TopBox, linewidth=3, color=color.green, title="TBbox") 
plot(BottomBox, linewidth=3, color=color.red, title="BBbox")


var GRP4 = "MavilimW"

fmal=input(3,"First Moving Average length", group=GRP4)
smal=input(5,"Second Moving Average length", group=GRP4)
tmal=fmal+smal
Fmal=smal+tmal
Ftmal=tmal+Fmal
Smal=Fmal+Ftmal

M1= ta.wma(close, fmal)
M2= ta.wma(M1, smal)
M3= ta.wma(M2, tmal)
M4= ta.wma(M3, Fmal)
M5= ta.wma(M4, Ftmal)
MAVW= ta.wma(M5, Smal)
col1= MAVW>MAVW[1]
col3= MAVW<MAVW[1]
colorM = col1 ? color.blue : col3 ? color.red : color.yellow

plot(MAVW, color=colorM, linewidth=2, title="MAVW")


var GRP5 = "Relative Vigor Index"
len = input.int(10, title="Length", minval=1, group=GRP5)
rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len)
sig = ta.swma(rvi)
offset = input.int(0, "Offset", minval = -500, maxval = 500, group=GRP5)
//plot(rvi, color=#008000, title="RVGI", offset = offset)
//plot(sig, color=#FF0000, title="Signal", offset = offset)


var longStopSet = false

long = ta.crossover(close,TopBox) and close > MAVW ? true : false
longClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossunder(rvi,sig) ? true : false
strategy.entry("Long Position", strategy.long, when = long and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(longStopSet==false and strategy.position_size > 0)
    strategy.exit("exit", "Long Position", stop=BottomBox)
    longStopSet := true
if(strategy.position_size==0)
    longStopSet := false
strategy.close("Long Position", when = longClose)

var shortStopSet = false

short = ta.crossunder(close,BottomBox) and close < MAVW ? true : false
shortClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossover(rvi,sig) ? true : false
strategy.entry("Short Position", strategy.short, when = short and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(shortStopSet==false and strategy.position_size < 0)
    strategy.exit("exit", "Short Position", stop=TopBox)
    shortStopSet := true
if(strategy.position_size==0)
    shortStopSet := false
strategy.close("Short Position", when = shortClose)


Thêm nữa