Chiến lược chéo trung bình động MACD

Tác giả:ChaoZhang, Ngày: 2023-09-14 17:03:47
Tags:

Chiến lược logic

Chiến lược này kết hợp chỉ số MACD với đường trung bình động, đi dài khi cả hai cung cấp tín hiệu phù hợp.

Lý do là:

  1. Tính toán FAST MACD, EMA 12 ngày thông thường

  2. Tính toán MACD chậm, EMA thường là 26 ngày

  3. MACD là nhanh trừ chậm

  4. Đường tín hiệu thường là MA 9 ngày của MACD

  5. Tính toán MAs 9 ngày và 26 ngày

  6. Xem xét dài khi MACD vượt qua đường tín hiệu

  7. Đi dài khi MA 9 ngày vượt trên MA 26 ngày

  8. Đóng dài khi MACD vượt dưới đường tín hiệu và MA 9 ngày vượt dưới MA 26 ngày

Chiến lược này khai thác chỉ số mua quá nhiều của MACD và khả năng theo xu hướng của MA, kết hợp cả hai cho các giao dịch tỷ lệ cược cao hơn.

Ưu điểm

  • MACD đánh giá quá mua / quá bán, MA xác định xu hướng

  • Sự kết hợp cung cấp cơ hội dài hạn có khả năng cao

  • Quy tắc rõ ràng dễ thực hiện

Rủi ro

  • Cần tối ưu hóa để xác định các thông số tốt nhất

  • Không thể sử dụng các cơ hội ngắn hạn

  • Các giao dịch theo xu hướng có thể làm tăng lỗ

Tóm lại

Chiến lược này sử dụng điểm mạnh của MACD và MA trong việc đánh giá nhịp thị trường.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4
strategy("MACD Cross+MA", overlay=true)
//@version=4
// Getting inputs
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)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// 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
//plot
plot(sma(close,9),color=color.red)
plot(sma(close,26),color=color.green)
//Condition
BMacdcondition= (macd>signal)
SMacdcondition= (macd<signal)
longCondition = crossover(sma(close, 9), sma(close, 26))
shortCondition = crossunder(sma(close, 9), sma(close, 26))
//entry
if (BMacdcondition) and window()
    (longCondition)
    strategy.entry("LONG", strategy.long)
if (shortCondition) and window()
    (SMacdcondition)
    strategy.close("LONG", qty_percent=100 , comment="หนีตาย")

Thêm nữa