Chiến lược định lượng MACD - chiến lược đột phá đường trung bình động cắt đôi


Ngày tạo: 2024-02-22 15:32:42 sửa đổi lần cuối: 2024-02-22 15:32:42
sao chép: 0 Số nhấp chuột: 679
1
tập trung vào
1617
Người theo dõi

Chiến lược định lượng MACD - chiến lược đột phá đường trung bình động cắt đôi

Tổng quan

Chiến lược này tạo ra chỉ số 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, sau đó kết hợp với đường tín hiệu để xác định xu hướng của thị trường tài chính và khu vực mua quá bán, tạo ra nhiều ngã ba của MACD và đường tín hiệu khi giá cao hơn đường trung bình 200 ngày và tạo ra ngã ba của ngã ba khi giá thấp hơn đường trung bình 200 ngày.

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

Nguyên tắc cơ bản là 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 để tạo ra chỉ số MACD để xác định hướng xu hướng thị trường, sau đó sử dụng đường tín hiệu để xác định khu vực mua quá bán. Khi MACD và đường tín hiệu hình thành nồi vàng, tín hiệu nhiều đầu là nhiều đầu, khi hình thành nồi chết, tín hiệu trống là tín hiệu trống.

Cách tính toán cụ thể là:

  1. Đường trung bình di chuyển nhanh (EMA ngày 12) trừ đường trung bình di chuyển chậm (EMA ngày 26) để có được MACD
  2. MACD ngày 9 EMA nhận được tín hiệu
  3. MACD trừ đường tín hiệu để có được đường thẳng MACD

Khi MACD vượt qua đường tín hiệu và MACD và đường tín hiệu đồng thời thấp hơn 0, hãy làm nhiều tín hiệu cho gai vàng. Khi MACD vượt qua đường tín hiệu và MACD và đường tín hiệu đồng thời cao hơn 0, hãy làm trống tín hiệu cho gai chết.

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

  1. Sử dụng đánh giá hai chỉ số, tránh các hạn chế của đánh giá chỉ số duy nhất, tăng độ chính xác của tín hiệu
  2. Kết hợp với giá và mối quan hệ đường trung bình lọc kép để tránh tín hiệu bị xáo trộn trong xu hướng mạnh
  3. Phạm vi tối ưu hóa tham số lớn, có thể điều chỉnh tham số đường trung bình để thích ứng với môi trường thị trường khác nhau
  4. Cài đặt tham số bảo thủ làm cho tín hiệu ít hơn nhưng chính xác hơn
  5. Những ý tưởng chiến lược dễ hiểu và dễ thực hiện

Rủi ro chiến lược

  1. Các chỉ số có thể bị ảnh hưởng và tạo ra tín hiệu sai khi thị trường biến động mạnh
  2. Chính sự chậm trễ của hệ thống thống tuyến tính sẽ ảnh hưởng đến tính kịp thời của chiến lược.
  3. Có ít tín hiệu, dễ bị mất cơ hội xu hướng
  4. PARAMETERS tối ưu hóa có nguy cơ tối ưu hóa quá mức
  5. Cơ chế kiểm soát rút lui và rút lui không gây thiệt hại

Có thể giảm rủi ro bằng cách giảm chu kỳ trung bình thích hợp, thêm các phán đoán về các chỉ số khác và thêm các biện pháp ngăn chặn.

Hướng tối ưu hóa chiến lược

1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns

2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart

3.also tested hull moving average for MACD which gave good results

4.stoploss can also be trailed for better risk management

Tóm tắt

Chiến lược này nói chung rất đơn giản và thực tế, tạo ra tín hiệu giao dịch có xác suất cao thông qua phán đoán chỉ số kép và lọc giá, tỷ lệ lợi nhuận biên cao, sử dụng bộ tham số cổ điển của MACD, không được tối ưu hóa quá mức.

Mã nguồn chiến lược
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 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/
// © Hurmun

//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)


fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


movinga2 = input(title="movinga 2", type=input.integer, defval=200)

movinga200 = sma(close, movinga2)

plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
    
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100

longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
    
if (strategy.position_size > 0 )
    strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)






if (strategy.position_size < 0 )
    strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)