Chiến lược giao dịch đa khung thời gian dựa trên kênh giá và MACD

Tác giả:ChaoZhang, Ngày: 2023-12-08 15:15:37
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số kênh giá và chỉ số MACD để theo dõi xu hướng và xác định mức mua quá mức và bán quá mức trên nhiều khung thời gian, do đó đưa ra quyết định mua và bán.

Chiến lược logic

Chỉ số kênh giá xây dựng một kênh giá dựa trên đường EMA của giá cao nhất và thấp nhất để xác định xu hướng khi giá vượt ra khỏi kênh. Chỉ số MACD đánh giá đà tăng và giảm. Giá trị trên đường không cho thấy thị trường tăng trong khi các giá trị bên dưới cho thấy thị trường gấu.

Các tín hiệu giao dịch của chiến lược này xuất phát từ các khía cạnh sau:

  1. Nhập dài khi biểu đồ MACD quay màu đỏ. Nhập ngắn khi biểu đồ MACD quay màu xanh lá cây.

  2. Nhập ngắn khi giá tiếp cận đáy kênh và MACD dưới đường không.

  3. Nhập dài khi giá tiếp cận đỉnh của kênh và MACD nằm trên đường không.

  4. Nhập dài khi MACD vượt qua đường không. Nhập ngắn khi MACD vượt qua đường không.

Việc thoát được kích hoạt bằng cách dừng lỗ và lấy lợi nhuận.

Ưu điểm của Chiến lược

  1. Sự kết hợp của các chỉ số ngăn chặn sự phá vỡ sai.

  2. Sự kết hợp các chỉ số trên các khung thời gian đảm bảo phát hiện xu hướng đáng tin cậy.

  3. Việc kết hợp các kiểm soát dừng lỗ và lấy lợi nhuận hiệu quả cho mỗi lỗ giao dịch.

Rủi ro của chiến lược

  1. Không gian tối ưu hóa hạn chế dẫn đến tối ưu hóa quá mức.

  2. Thiết lập kênh giá thấp bỏ lỡ những động thái lớn hơn.

  3. Stop loss chặt chẽ gây ra tổn thất lớn hơn.

Giải pháp:

  1. Sử dụng tối ưu hóa đi trước để ngăn ngừa tối ưu hóa quá mức.

  2. Đặt các thông số thích nghi cho kênh giá.

  3. Đưa ra lỗ dừng dựa trên biến động để điều chỉnh năng động khoảng cách dừng.

Các hướng tối ưu hóa

  1. Tối ưu hóa sự kết hợp của các thông số MACD.

  2. Tối ưu hóa tính toán thích nghi của các thông số kênh giá.

  3. Thêm thêm bộ lọc để ngăn chặn các vụ đột phá giả và cải thiện hiệu quả.

Tóm lại

Chiến lược này kết hợp các điểm mạnh của kênh giá và MACD bằng cách thiết lập tham số hợp lý và không gian tối ưu hóa lớn. Nó hoạt động tốt trong phát hiện xu hướng và xác định quá mua / quá bán. Cơ chế dừng lỗ / lấy lợi nhuận kiểm soát mỗi lỗ giao dịch. Tiếp theo, cải tiến có thể được thực hiện bằng cách tối ưu hóa tham số, thêm bộ lọc và 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)

Thêm nữa