Chiến lược giao dịch xu hướng dựa trên chỉ số MACD

Tác giả:ChaoZhang, Ngày: 2024-02-02 11:32:48
Tags:

img

Tổng quan

Cốt lõi của chiến lược này dựa trên chỉ số được phát triển trong bài báo Trading the Trend do Andrew Abraham xuất bản trong tạp chí TASC tháng 9 năm 1998.

Chiến lược logic

Chiến lược này đầu tiên tính toán trung bình động cân nặng 21 ngày của phạm vi trung bình thực sự (ATR) như một phạm vi biến động cơ bản. Sau đó nó tính toán giá cao nhất và thấp nhất trong 21 ngày qua. Bằng cách so sánh giá đóng hiện tại với giới hạn trên và dưới của phạm vi cơ bản, nó đánh giá liệu giá có vượt ra khỏi kênh để xác định hướng xu hướng hay không.

Cụ thể, giới hạn kênh trên được định nghĩa là giá cao nhất trong 21 ngày qua trừ 3 lần ATR cơ sở, và giới hạn kênh dưới là giá thấp nhất trong 21 ngày qua cộng 3 lần ATR cơ sở. Khi giá đóng cao hơn giới hạn trên, nó báo hiệu xu hướng tăng. Khi giá đóng thấp hơn giới hạn dưới, nó báo hiệu xu hướng giảm.

Trong khi xác định hướng xu hướng, chiến lược này cũng giới thiệu chỉ số MACD để lọc. Nó chỉ tạo ra tín hiệu mua khi biểu đồ MACD dương để tránh bỏ lỡ cơ hội mua.

Ưu điểm

Chiến lược này kết hợp xác định xu hướng và lọc chỉ số, có thể xác định hiệu quả hướng xu hướng thị trường trung hạn và dài hạn mà không bị sai lệch bởi biến động ngắn hạn.

  1. Sử dụng kênh giá để xác định xu hướng và xác định chính xác hướng dài hạn
  2. Phạm vi biến động cơ bản động thích nghi với những thay đổi trên thị trường
  3. Việc lọc MACD cung cấp hỗ trợ quyết định bổ sung để tránh mất điểm mua
  4. Các tham số có thể cấu hình cung cấp tính linh hoạt trong việc điều chỉnh phong cách chiến lược

Rủi ro

Chiến lược này cũng có một số rủi ro, chủ yếu trong các khía cạnh sau:

  1. Nguy cơ phá vỡ kênh giá
  2. Rủi ro lỗi tín hiệu MACD
  3. Thiết lập tham số không đầy đủ có thể gây ra bất ổn chiến lược

Những rủi ro này có thể được giảm bằng cách tối ưu hóa các thông số, kích thước vị trí nghiêm ngặt và dừng lỗ kịp thời.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh chính sau:

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

Kiểm tra các kết hợp khác nhau của Dài hoặc nhân để tìm ra sự kết hợp tham số mang lại lợi nhuận cao nhất dựa trên backtest.

  1. Thêm lọc với các chỉ số khác

Thử nghiệm kết hợp RSI, KDJ và các chỉ số khác để lọc tín hiệu và cải thiện lợi nhuận.

  1. Điều chỉnh động các thông số

Điều chỉnh các tham số một cách năng động dựa trên điều kiện thị trường, chẳng hạn như mở rộng phạm vi kênh một cách thích hợp khi xu hướng mạnh hoặc thắt chặt phạm vi khi thị trường bị giới hạn hơn.

Tóm lại

Tóm lại, đây là một chiến lược theo xu hướng tổng thể mạnh mẽ. Bằng cách kết hợp xác định xu hướng kênh giá và lọc MACD, nó có thể xác định hiệu quả xu hướng trung dài hạn và tạo ra lợi nhuận ổn định. Với tối ưu hóa tham số, quản lý rủi ro và điều chỉnh thích hợp, chiến lược này có thể trở thành một phần không thể thiếu của hệ thống giao dịch.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © melihtuna

//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)

// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
        iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1,
	    iff(close < ret, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true

strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)




Thêm nữa