Chiến lược giao dịch định lượng của Vibration Box


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

Chiến lược giao dịch định lượng của Vibration Box

Tổng quan

Chiến lược giao dịch định lượng hộp vàng rung là một chiến lược giao dịch ngắn hạn sử dụng kênh hộp Darvas để nắm bắt xu hướng thị trường. Chiến lược này chủ yếu dựa vào chỉ số hộp vàng rung để đánh giá xu hướng thị trường và tìm kiếm cơ hội giao dịch.

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

  • Sử dụng tham số length để thiết lập chiều dài của hộp vàng rung. Trong chiến lược này, chiều dài mặc định là 5 đường K.
  • Trải qua các điểm cao và thấp để đánh giá xu hướng, và theo đó làm nhiều điều tương tự.
  • Khi giá vượt qua hộp vàng, nó sẽ vẽ một đường TopBox màu xanh trên biểu đồ. Đây là tín hiệu cho thấy giá đang tăng.
  • Đường BottomBox màu đỏ sẽ được vẽ trên biểu đồ khi giá giảm xuống dưới Hộp báu. Đây là tín hiệu của Hộp đáy.
  • Sử dụng hệ thống đa đường trung bình như một chỉ số phán đoán hỗ trợ. Khi giá cao hơn đường trung bình đa đầu và thấp hơn đường trung bình trống.
  • Sử dụng chỉ số RVI để xác định vùng quá mua quá bán. Khi RVI cao hơn đường Signal, tín hiệu quá mua. Khi RVI thấp hơn đường Signal, tín hiệu trống.

Đánh giá tổng hợp các chỉ số trên được thực hiện sau khi nhập. Giá dừng là đối diện của hộp vàng. EXIT dừng sử dụng định hướng của RVI để đóng lệnh.

Phân tích lợi thế

  • Sử dụng kênh Treasure Box để đánh giá xu hướng thị trường và tránh bỏ lỡ cơ hội tham gia vào một xu hướng lớn.
  • Các kênh hộp kho báu dễ hình thành và có tần số nhận tín hiệu cao.
  • Cài đặt Stop Loss của Treasure Box là hợp lý, có thể kiểm soát tốt mức Stop Loss đơn lẻ.
  • Đường đa trung bình và RVI hỗ trợ phán đoán, giúp cải thiện độ chính xác của quyết định.

Phân tích rủi ro

  • Vùng dừng lỗ của hộp vàng rung là rộng hơn, rủi ro mất mát đơn lẻ cao hơn.
  • Trong trường hợp nhiều người nắm giữ vị thế, điều chỉnh ngắn hạn có thể bị phá sản.
  • Hướng dẫn hình thành kênh của hộp kho báu không phải lúc nào cũng đúng, có tín hiệu sai.
  • Cần điều chỉnh các tham số để các chỉ số phụ phù hợp với hộp đựng.

Có thể giảm rủi ro bằng cách thắt chặt mức dừng thích hợp. Ngoài ra, các tham số của các chỉ số phụ cũng cần được điều chỉnh thử nghiệm để chúng có tác dụng lọc tốt nhất.

Hướng tối ưu hóa

  • Kiểm tra các tham số của hộp vàng với các độ dài khác nhau để tìm ra độ dài tối ưu.
  • Tối ưu hóa các tham số của các chỉ số phụ để phù hợp với hộp đựng.
  • Thử các chỉ số phụ trợ khác để xác minh thêm tín hiệu. Ví dụ: KDJ, MACD, v.v.
  • Thử nghiệm các điều kiện dừng lỗ và dừng lại để làm cho chiến lược ổn định hơn.

Tóm tắt

Chiến lược giao dịch định lượng của hộp kho báu rung động nói chung là một chiến lược giao dịch đường ngắn năng động hơn. Nó có thể bắt kịp sự thay đổi xu hướng của thị trường, sử dụng kênh hộp kho báu để mở vị trí; và kết hợp với các chỉ số hỗ trợ có thể cải thiện độ chính xác của quyết định.

Mã nguồn chiến lượ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)