
Chiến lược này kết hợp các chỉ số kênh giá và MACD để theo dõi xu hướng và đánh giá mua quá mức trong nhiều khung thời gian để đưa ra quyết định mua và bán. Chiến lược này cũng kết hợp với lệnh dừng để quản lý rủi ro.
Chỉ số kênh giá xây dựng kênh giá dựa trên đường trung bình EMA của giá cao nhất và giá thấp nhất, đánh giá xu hướng bằng cách phá vỡ kênh giá; Chỉ số MACD đánh giá xu hướng đa khí, trên trục không là thị trường đa đầu, dưới là thị trường không đầu.
Các tín hiệu giao dịch của chiến lược này xuất phát từ:
Hình phân tích MACD đảo sang màu đỏ Enter nhiều đầu, đảo sang màu xanh lá cây Enter trống
Giá gần đáy kênh và MACD ở dưới trục 0
Giá gần đỉnh kênh và MACD trên trục 0
MACD trên trục 0 Enter nhiều đầu, dưới trục 0 Enter trống
Tín hiệu Exit xuất phát từ thiết lập Stop Loss Stop.
Kiểm tra kết hợp đa chỉ số để tránh đột phá giả
Kết hợp các chỉ số trong các khung thời gian khác nhau để xác định hướng đi của xu hướng
Tiến hành các biện pháp ngăn chặn để kiểm soát hiệu quả các tổn thất đơn lẻ
Không gian tối ưu hóa tham số hạn chế, dễ quá tối ưu hóa
Cài đặt tham số cổng giá quá thấp sẽ làm mất nhiều cơ hội
Đặt điểm dừng quá nhỏ, sẽ chịu tổn thất lớn hơn
Giải pháp:
Sử dụng phương pháp “walk forward” để tránh các tham số quá tối ưu hóa
Cài đặt tham số kênh giá thành tham số thích nghi
Giới thiệu Stop Loss Variable để điều chỉnh động khoảng cách Stop Loss
Tối ưu hóa các hàm MACD
Tính toán tự điều chỉnh các tham số kênh giá tối ưu
Thêm nhiều điều kiện lọc để tránh đột phá giả làm cho hiệu quả cao hơn
Chiến lược này tích hợp lợi thế của chỉ số kênh giá và chỉ số MACD, thiết lập và tối ưu hóa các tham số hợp lý, có hiệu quả tốt trong việc phán đoán xu hướng và phán đoán mua quá mức, cơ chế dừng lỗ kiểm soát rủi ro mất mát một lần, là một chiến lược giao dịch ổn định hơn. Tiếp theo có thể được cải thiện từ việc tối ưu hóa tham số, thêm điều kiện lọc, tối ưu hóa cơ chế dừng lỗ.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Sonic R + Barcolor MACD", overlay=true)
HiLoLen = input(34, minval=2,title="High Low channel Length")
pacL = ema(low,HiLoLen)
pacH = ema(high,HiLoLen)
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0)
H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hisup= iff(delta>delta[1] and delta>0, 1,
iff(delta<delta[1], -1, nz(hisup[1], 0)))
hisdown = iff(delta<delta[1] and delta<0, 1,
iff(delta>delta[1], -1, nz(hisdown[1], 0)))
barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue )
//SR
PeriodLookBack = input(34)
xHighest = highest(PeriodLookBack)
xLowest = lowest(PeriodLookBack)
Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0)
// Strategy//
conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0)
gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH
consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0)
gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL
if(gobuy)
strategy.entry("Buy",strategy.long)
if(gosell)
strategy.entry("Sell",strategy.short)
//if(Trend==-1 and close<pacL)
// strategy.close("Buy")
//if(Trend==1 and close>pacH)
// strategy.close("Sell")
////////////// TP and SL//
SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1)
rr= input(defval=0.1,title="Reward/Risk",type=float)
useTPandSL = input(defval = false, title = "Use exit order strategy?")
Stop = SL
Take=SL*rr
Q = 100
if(useTPandSL)
strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop)
strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)