Chiến lược theo dõi cân bằng dài hạn-ngắn hạn của MACD


Ngày tạo: 2023-10-17 16:15:53 sửa đổi lần cuối: 2023-10-17 16:15:53
sao chép: 0 Số nhấp chuột: 704
1
tập trung vào
1617
Người theo dõi

Chiến lược theo dõi cân bằng dài hạn-ngắn hạn của MACD

Tổng quan

Chiến lược này là một chiến lược theo dõi xu hướng sử dụng chỉ số MACD để xác định hướng đa luồng. Nó tạo ra đường trục MACD bằng cách tính toán chênh lệch giữa đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm.

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

Mã đầu tiên đặt thời gian bắt đầu đo lường lại để kiểm tra hiệu suất lịch sử của chiến lược.

Sau đó là tính toán các chỉ số MACD, bao gồm thiết lập độ dài của đường trung bình di chuyển nhanh, đường trung bình di chuyển chậm và đường trung bình MACD. Đường nhanh phản ứng nhạy hơn, đường chậm phản ứng ổn định hơn. Điểm chênh lệch của chúng tạo thành đường chính MACD, sau đó tạo thành đường tín hiệu MACD thông qua đường trung bình.

Theo tín hiệu đa đầu và trống đầu, ghi lại thời gian tạo tín hiệu cuối cùng. Khi đường nhanh và đường chậm xảy ra giao thoa, xác nhận và ghi lại tín hiệu mua / bán, khi đó bạn có thể mở vị trí.

Sau khi vào thị trường, tiếp tục theo dõi giá cao nhất và giá thấp nhất của vị trí. Đặt một tỷ lệ dừng lỗ và dừng lỗ khi đạt đến tỷ lệ đó.

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

  1. Chỉ số MACD có thể xác định xu hướng một cách hiệu quả và là một trong những chỉ số cổ điển của phân tích kỹ thuật.

  2. Thiết kế chênh lệch của trung bình chậm và nhanh, có thể bắt kịp động lực và hướng thay đổi của giá.

  3. Sử dụng hiệu ứng lọc đồng nhất, một số tín hiệu giả có thể được lọc ra.

  4. Chiến lược này bao gồm các cơ chế dừng lỗ để kiểm soát rủi ro.

Rủi ro chiến lược

  1. Chỉ số MACD dễ tạo ra tín hiệu giả, chỉ số có thể tối ưu hóa không gian hạn chế.

  2. Cài đặt điểm dừng không phù hợp có thể quá hoạt động hoặc bảo thủ, cần được tối ưu hóa riêng cho các giống khác nhau.

  3. Các vị trí số lượng cố định có thể làm cho đòn bẩy quá cao, bạn có thể cân nhắc thiết lập ngưỡng rủi ro theo quy mô vốn.

  4. Lựa chọn thời gian phản hồi cần được xác minh để tránh quá phù hợp.

Tối ưu hóa chiến lược

  1. Tối ưu hóa sự kết hợp của các tham số đường trung bình nhanh và chậm để tìm các tham số tốt nhất cho các giống khác nhau.

  2. Thêm các bộ lọc cho các chỉ số khác, chẳng hạn như K-line, Blink, RSI để xác minh tín hiệu.

  3. Hiệu quả của các điểm dừng khác nhau có thể được đánh giá dựa trên các chỉ số như rút, tỷ lệ Sharp.

  4. Tối ưu hóa các chiến lược dừng lỗ, chẳng hạn như di chuyển dừng lỗ, treo dừng lỗ.

  5. Cố gắng thiết lập các vị trí động dựa trên sự thay đổi vốn, biến động.

Tóm tắt

Chiến lược cân bằng đa luồng MACD là một chiến lược theo dõi xu hướng dựa trên các chỉ số kỹ thuật cổ điển. Nó có khả năng nắm bắt động lực của biến động giá, có thể thích ứng tốt với các giống khác nhau thông qua tối ưu hóa tham số. Kết hợp với nhiều chỉ số đợt dao động, phương thức dừng lỗ và quản lý vị trí động, có thể tiếp tục nâng cao tính ổn định và lợi nhuận của chiến lược.

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

//@version=2
strategy("MACD BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Component Code Start ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true

///////////////  MACD Component - Default settings for one day. /////////////// 
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12)  // 12 for 4hr

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

long = crossover(delta, 0) 
short = crossunder(delta, 0) 

last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(5.0, title='Stop Loss %', type=float)/100

/////////////// Strategy Component /////////////// 
// Strategy Entry
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy SL Exit
if testPeriod()
    strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
    strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)

//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)