Chiến lược số lượng MACD gradient

Tác giả:ChaoZhang, Ngày: 2023-12-19 16:14:50
Tags:

img

Tổng quan

Chiến lược này tính toán các ngọn nến Heikin-Ashi để làm mịn đường giá và kết hợp chỉ số MACD để tạo ra các tín hiệu giao dịch, thực hiện một chiến lược định lượng theo dõi xu hướng trung bình đến dài hạn.

Chiến lược logic

  1. Tính toán giá mở, đóng, cao và thấp Heikin-Ashi để vẽ các ngọn nến Heikin-Ashi và xu hướng giá trơn tru.

  2. Đặt tham số MACD: chiều dài nhanh 12, chiều dài chậm 26, chiều dài tín hiệu 9.

  3. Tính toán đường DEA chậm, đường DEA nhanh và biểu đồ MACD.

  4. Đi dài khi biểu đồ MACD vượt trên 0; Đi ngắn khi vượt dưới 0.

  5. Thêm bộ lọc năm, tháng và ngày để giới hạn giao dịch trong khoảng thời gian xác định.

Phân tích lợi thế

  1. Các ngọn nến Heikin-Ashi lọc tiếng ồn thị trường hiệu quả để xác định xu hướng.

  2. MACD cung cấp các tín hiệu giao dịch xu hướng rõ ràng.

  3. Kết hợp Heikin-Ashi và MACD cải thiện chất lượng tín hiệu và lợi nhuận.

  4. Các bộ lọc thời gian giúp tối ưu hóa lịch giao dịch dựa trên hiệu suất lịch sử.

Phân tích rủi ro

  1. Khả năng mất mát lớn trong quá trình đảo ngược xu hướng.

  2. Các thông số MACD không chính xác có thể tạo ra các tín hiệu vô giá trị quá mức.

  3. Các bộ lọc thời gian cứng có thể bỏ lỡ các cơ hội giao dịch tốt.

Các biện pháp đối phó:

  1. Thiết lập stop loss/take profit để hạn chế lỗ.

  2. Tối ưu hóa các thông số MACD để xác định sự kết hợp tốt nhất.

  3. Thêm các chỉ số để xác định xu hướng địa phương.

Hướng dẫn tối ưu hóa

  1. Kiểm tra các kết hợp tham số khác nhau để tìm ra tối ưu.

  2. Thêm các cơ chế dừng lỗ như dừng lỗ sau.

  3. Thêm các chỉ số như EMA, KDJ để xác định điểm đảo ngược.

  4. Thêm các chỉ số âm lượng để tránh sự khác biệt.

Tóm lại

Chiến lược này làm mịn hành động giá với các ngọn nến Heikin-Ashi và xác định hướng xu hướng và tín hiệu nhập cảnh với chỉ số MACD Tradingview để thực hiện chiến lược lượng theo xu hướng. So với các chiến lược MACD thông thường, nó lọc ra một số tiếng ồn để xác định xu hướng rõ ràng hơn.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MACD ASHI BARS .v1 ", overlay=false,default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,slippage=1)

// Calculation HA Values 
haopen  = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh  = max(high, max(haopen, haclose))
halow   = min(low,  min(haopen, haclose))

// HA colors
hacolor = haclose > haopen ? color.green : color.red
src=haclose



fastmacd = input(12,title='MACD Fast  Line Length')
slowmacd = input(26,title='MACD Slow Line Length')
signalmacd = input(9,title='Signal Line Length')

macdslowline1 = sma(src,slowmacd)
macdslowline2 = sma(macdslowline1,slowmacd)
DEMAslow = ((2 * macdslowline1) - macdslowline2 )

macdfastline1 = sma(src,fastmacd)
macdfastline2 = sma(macdfastline1,fastmacd)
DEMAfast = ((2 * macdfastline1) - macdfastline2)

MACDLine = (DEMAfast - DEMAslow)

SignalLine = sma(MACDLine, signalmacd)

delta = MACDLine-SignalLine




swap1 = delta>0?color.green:color.red



plot(delta,color=swap1,style=plot.style_columns,title='Histo',histbase=0,transp=20)
p1 = plot(MACDLine,color=color.blue,title='MACD Line')
p2 = plot(SignalLine,color=color.red,title='Signal')
fill(p1, p2, color=color.blue)
hline(0)



yearfrom = input(2020)
yearuntil =input(2042)
monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)







if ( crossover(delta,0)  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
    strategy.entry("MMAL", strategy.long, stop=close, oca_name="TREND",  comment="AL")
    
else
    strategy.cancel(id="MMAL")


if (  crossunder(delta,0) and  year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 

    strategy.entry("MMSAT", strategy.short,stop=close, oca_name="TREND",  comment="SAT")
else
    strategy.cancel(id="MMSAT")
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


Thêm nữa