Chiến lược giao dịch kênh Donchian Wave


Ngày tạo: 2023-11-08 12:31:56 sửa đổi lần cuối: 2023-11-08 12:31:56
sao chép: 0 Số nhấp chuột: 693
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch kênh Donchian Wave

Tổng quan

Chiến lược giao dịch kênh biến động của Dongguan được sử dụng để đánh giá xu hướng giá hiện tại bằng cách tính toán các kênh có giá cao nhất và thấp nhất trong một chu kỳ nhất định, và kết hợp với các kênh phá vỡ để giao dịch dài và ngắn. Chiến lược này được áp dụng cho các giao dịch cổ phiếu và tiền kỹ thuật số có biến động cao.

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

Chiến lược này xây dựng kênh bằng cách tính toán giá cao nhất pcmax và giá thấp nhất pcmin trong chu kỳ last (lịch sử).

Đường ray trênyh = pcmax - (pcmax - pcmin) * (100 - percentDev)/100

Phân đoạn dưới xyl = pcmin + (pcmax - pcmin) * percentDev/100

Trong số đó, 13% cho rằng:

Khi giá phá vỡ đường đua, tạo ra tín hiệu dài; khi giá phá vỡ đường đua, tạo ra tín hiệu ngắn.

Các tín hiệu giao dịch cụ thể được đánh giá như sau:

  1. boundup = high > yh để xác định có phá vỡ đường ray hay không

  2. bounddn = low < yl Xác định có phá vỡ đường ray không

  3. upsign = sma(bounddn, 2) == 1 Xác định đường trung bình của bounddn để tiếp tục phá vỡ đường ray

  4. dnsign = sma(boundup, 2) == 1 Xác định đường trung bình củaboundup để tiếp tục phá vỡ đường ray

  5. exitup = dnsign Đột phá lên đường ray tạo ra tín hiệu cân bằng

  6. exitdn = upsign Bị phá vỡ đường ray tạo ra tín hiệu cân bằng

  7. if upsign phá vỡ đường ray dưới tạo ra nhiều tín hiệu

  8. if dnsign phá vỡ đường ray tạo ra tín hiệu trống

Chiến lược này đồng thời đặt thời gian giao dịch bắt đầu để tránh các vị trí không cần thiết qua đêm.

Lợi thế chiến lược

  1. Sử dụng đường Đông Dương để đánh giá xu hướng, phản hồi hiệu quả tốt hơn

  2. Có thể giao dịch hai chiều bằng cách đặt tín hiệu mua và bán.

  3. Tránh các giao dịch sai lầm bằng cách lọc đồng nhất các tín hiệu

  4. Thiết lập tùy chọn dừng lỗ, kiểm soát rủi ro

  5. Đặt thời gian bắt đầu và kết thúc giao dịch để tránh rủi ro giao dịch qua đêm

Rủi ro chiến lược

  1. Đường Dongjian nhạy cảm với tham số history và percentDev, cần tối ưu hóa tham số để phù hợp với các giống khác nhau

  2. Có thể có tín hiệu sai trong một trận động đất

  3. Không tính đến các yếu tố quản lý đơn đặt hàng có thể ảnh hưởng đến lợi nhuận trong thực tế

  4. Không tính đến các yếu tố quản lý vị thế, có thể có rủi ro quá lớn trong các vị trí trên cơ sở vật chất

  5. Không tính đến các yếu tố quản lý tài chính, cần thiết phải thiết lập tài chính giao dịch hợp lý trong đĩa thực

Hướng tối ưu hóa chiến lược

  1. Tối ưu hóa các tham số history và percentDev để phù hợp hơn với các giống khác nhau

  2. Thêm bộ lọc để tránh tín hiệu sai trong cơn chấn động

  3. Tham gia vào mô-đun quản lý vị trí để kiểm soát tỷ lệ vốn chiếm vị trí đơn lẻ

  4. Thêm mô-đun quản lý vốn, hạn chế tỷ lệ vốn chiếm tổng số vị trí

  5. Thêm chức năng quản lý đơn đặt hàng, tối ưu hóa cách đặt hàng

Tóm tắt

Chiến lược giao dịch kênh biến động của Đường Tân (ĐTQVN) được đánh giá bởi các kênh phá vỡ để đánh giá xu hướng và tín hiệu giao dịch, có hiệu quả tốt hơn, đồng thời có khả năng giao dịch hai chiều. Tuy nhiên, chiến lược này cũng có một số rủi ro, cần phải tối ưu hóa các tham số, bộ lọc, quản lý vị trí, quản lý tài sản, quản lý đơn đặt hàng để có thể kiếm được lợi nhuận ổn định trong thị trường thực. Nói chung, chiến lược này là một chiến lược theo xu hướng truyền thống hơn, sau khi được tối ưu hóa và cải thiện, nó có thể trở thành một chiến lược giao dịch định lượng đáng tin cậy.

Mã nguồn chiến lược
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////
//  Copyright by AlexInc v1.0 02/07/2018  @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to 
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)

needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")


fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

bodymin = min( open, close)
bodymax = max(open, close)

pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)

yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin

plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)

//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)


exitup = dnsign
exitdn = upsign

lot = strategy.equity / close * capital / 100


xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na

stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])

stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])

pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
    stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
    stop_level_short = strategy.position_avg_price + nLoss
if pos == 0    
    stop_level_long = bodymin - nLoss
    stop_level_short = bodymax + nLoss

//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)

if upsign
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dnsign
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

if true
    strategy.close_all()


//if strategy.position_size != 0
//    strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
//    strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)