
Chiến lược này sử dụng đường Đông Dương 24 chu kỳ kết hợp với đường trung bình 200 chu kỳ làm tín hiệu giao dịch chính. Điểm nhập cảnh chọn nhượng bộ khi sóng đỏ-xanh đi xuống và chọn nhượng bộ khi sóng lên.
Các nguyên tắc chính của chiến lược này bao gồm:
Xây dựng kênh Dongguan bằng cách sử dụng các giá cao nhất và thấp nhất trong 24 chu kỳ, cho thấy có thể có sự sụt giảm lớn khi giá vượt qua kênh này.
200 đường trung bình chu kỳ là điều kiện lọc nhiều không gian, nếu phá vỡ đường Đông Dương và giá ở phía bên kia đường trung bình, cho rằng thị trường có thể bị đảo ngược.
Tín hiệu nhập cảnh là:
Giá dừng lỗ là giá cao nhất trong 3 đường K gần nhất, giá dừng lỗ là giá mở lỗ trừ đi chênh lệch giữa giá dừng và mở lỗ gấp 3 lần. Cách tính giá dừng và dừng lỗ nhiều hơn là ngược lại với việc làm giảm giá.
Điểm mạnh của chiến lược này là sử dụng hỗn hợp các bộ lọc bằng đường Dongxian + đồng nhất, tránh sự sai lệch của chỉ số kỹ thuật đơn lẻ, tăng đáng kể tỷ lệ chiến thắng của chiến lược.
Chiến lược này có những ưu điểm sau:
Tỷ lệ chiến thắng cao: Sử dụng kết hợp giữa đường Đông Dương và chỉ số đường trung bình, có thể tránh được những tổn thất không cần thiết do sai lệch chỉ số kỹ thuật đơn lẻ.
Có thể kiểm soát rủi ro: Sử dụng giá cao nhất / giá thấp nhất gần đây làm điểm dừng, kiểm soát hiệu quả tổn thất đơn lẻ.
Dễ dàng sử dụng: Chỉ số và logic rất đơn giản, dễ hiểu và dễ thực hiện.
Khả năng ứng dụng cao: ít tham số chiến lược, ổn định tốt trong các giống và chu kỳ khác nhau.
Chiến lược này có những rủi ro:
Rủi ro của tình huống cực đoan: Nếu gặp phải tình huống đơn phương lớn, có thể kích hoạt dừng lỗ hoặc làm tăng lỗ. Có thể giải quyết bằng cách nới lỏng mức dừng lỗ thích hợp, giảm vị thế.
Nguy cơ sai lầm tín hiệu ra sân: Sử dụng tín hiệu phản đối mới làm tín hiệu ra sân, có thể đi vào và ra sân thường xuyên trong tình huống chấn động, có tổn thất điểm trượt không cần thiết. Có thể giải quyết bằng cách tối ưu hóa logic ra sân.
Rủi ro tối ưu hóa tham số: Chu kỳ đường Dongguan và thiết lập tham số đường trung bình không đúng có thể dẫn đến tín hiệu thường xuyên hoặc chậm, có thể giảm nguy cơ này bằng cách tối ưu hóa tham số và thử nghiệm kết hợp.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Chu kỳ đường Dongxian và chu kỳ đường trung bình có thể được tối ưu hóa để tìm kiếm sự kết hợp tham số tốt nhất.
Có thể thử nghiệm tỷ lệ dừng lỗ, tỷ lệ thắng cân bằng và tỷ lệ lỗ.
Có thể thử kết hợp các tín hiệu nhập cảnh sửa đổi chỉ số khác, chẳng hạn như MACD, KD, để nâng cao sự ổn định của chiến lược.
Có thể tối ưu hóa tín hiệu ra sân, tránh ra sân không cần thiết trong tình huống chấn động. Các tín hiệu ra sân cũng có thể xem xét các chỉ số xu hướng.
Một tập hợp các chiến lược mới có thể được phát triển dựa trên khuôn khổ chiến lược này, chẳng hạn như kết hợp với các chỉ số khác của loại kênh, chỉ số dạng danh sách, v.v.
Chiến lược chậm trung bình này rõ ràng và dễ hiểu, bằng cách sử dụng kết hợp các kênh Đường Thanh và đường trung bình làm tín hiệu chiến lược, có thể làm tăng hiệu quả sự ổn định và tỷ lệ chiến thắng của chiến lược. Cài đặt dừng lớn hơn dừng làm cho tỷ lệ lợi nhuận tốt, cài đặt tham số đơn giản và dễ thực hiện. Có một số tình huống cực đoan và rủi ro sai lầm, nhưng có thể tối ưu hóa và cải thiện chiến lược bằng nhiều cách, có khả năng mở rộng và phát triển mạnh mẽ.
/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
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/
// © Mysteriown
//@version=4
strategy("Lagged Donchian Channel + EMA", overlay = true)
//tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false
// ------------------------------------------ //
// ----------------- Inputs ----------------- //
// ------------------------------------------ //
period = input(24, title="Channel's periods")
Pema = input(200, title="EMA's periods ?")
ratio = input(3, title="Ratio TP", type=input.float)
loss = input(20, title="Risk Loss ($)")
lev = input(5, title="Leverage *...")
chan = input(title="Plot channel ?", type=input.bool, defval=false)
Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false)
bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false)
labels = input(title="Plot labels of bets ?", type=input.bool, defval=true)
supp = input(title="Delete last labels ?", type=input.bool, defval=true)
// ------------------------------------------ //
// ---------- Canal, EMA and arrow ---------- //
// ------------------------------------------ //
pema = ema(close,Pema)
plot(pema, title="EMA", color=color.blue)
canalhaut = highest(period)[1]
canalbas = lowest(period)[1]
bear = close[1] > canalhaut[1] and close < open and high > pema
bull = close[1] < canalbas[1] and open < close and low < pema
canalhautplot = plot(chan? canalhaut:na, color=color.yellow)
canalbasplot = plot(chan? canalbas:na, color=color.yellow)
plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0)
plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0)
// ------------------------------------------ //
// ------------- Position Short ------------- //
// ------------------------------------------ //
SlShort = highest(3)
BidShort = close[1]
TpShort = BidShort-((SlShort-BidShort)*ratio)
deltaShort = (SlShort-BidShort)/BidShort
betShort = round(loss/(lev*deltaShort)*100)/100
cryptShort = round(betShort*lev/BidShort*1000)/1000
// if bear[1] and labels //and low < low[1]
// Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar)
// label.delete(supp ? Lbear[1] : na)
var bentry=0.0
var bsl=0.0
var btp=0.0
if bear[1] and low < low[1]
bentry:=BidShort
bsl:=SlShort
btp:=TpShort
pbentry = plot(bpos? bentry:na, color=color.orange)
plot(bpos? (bentry+btp)/2:na, color=color.gray)
pbsl = plot(bpos? bsl:na, color=color.red)
pbtp = plot(bpos? btp:na, color=color.green)
fill(pbentry,pbsl, color.red, transp=70)
fill(pbentry,pbtp, color.green, transp=70)
// ------------------------------------------ //
// ------------- Position Long -------------- //
// ------------------------------------------ //
SlLong = lowest(3)
BidLong = close[1]
TpLong = BidLong + ((BidLong - SlLong) * ratio)
deltaBull = (BidLong - SlLong)/BidLong
betLong = round(loss/(lev*deltaBull)*100)/100
cryptLong = round(betLong*lev/BidLong*1000)/1000
// if bull[1] and labels //and high > high[1]
// Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar)
// label.delete(supp ? Lbull[1] : na)
var Bentry=0.0
var Bsl=0.0
var Btp=0.0
if bull[1] and high > high[1]
Bentry:=BidLong
Bsl:=SlLong
Btp:=TpLong
pBentry = plot(Bpos?Bentry:na, color=color.orange)
plot(Bpos?(Bentry+Btp)/2:na, color=color.gray)
pBsl = plot(Bpos?Bsl:na, color=color.red)
pBtp = plot(Bpos?Btp:na, color=color.green)
fill(pBentry,pBsl, color.red, transp=70)
fill(pBentry,pBtp, color.green, transp=70)
// ------------------------------------------ //
// --------------- Strategie ---------------- //
// ------------------------------------------ //
Bear = bear[1] and low < low[1]
Bull = bull[1] and high > high[1]
if (Bear and strategy.opentrades==0)
strategy.order("short", false, 1, limit=BidShort)
strategy.exit("exit", "short", limit = TpShort, stop = SlShort)
strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2)
strategy.close("short", when=bull)
if (Bull and strategy.opentrades==0)
strategy.order("long", true, 1, limit=BidLong)
strategy.exit("exit", "long", limit = TpLong, stop = SlLong)
strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2)
strategy.close("long", when=bear)