MACD Golden Cross Death Cross Xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-22 11:45:54
Tags:

img

Tổng quan

Chiến lược này sử dụng đường chéo vàng và đường chéo chết của chỉ số MACD để xác định hướng xu hướng, và sử dụng chỉ số ATR để dừng lỗ và lấy lợi nhuận để thực hiện xu hướng sau khi giao dịch.

Chiến lược logic

Khi đường MACD vượt qua trên đường tín hiệu từ dưới và trở nên dương tính, một tín hiệu mua được tạo ra, được gọi là tín hiệu chéo vàng, cho thấy xu hướng tăng giá cổ phiếu. Khi đường MACD vượt qua dưới đường tín hiệu từ trên và trở nên âm, một tín hiệu bán được tạo ra, được gọi là tín hiệu chéo chết, cho thấy xu hướng giảm giá cổ phiếu.

Chiến lược chỉ đơn giản là đi dài trên thập tự vàng và đi ngắn trên thập tự chết để theo dõi xu hướng. Đồng thời, chiến lược cũng giới thiệu chỉ số ATR để tính toán mức dừng lỗ và lấy mức lợi nhuận để xây dựng hệ thống giao dịch.

Cụ thể, chiến lược đầu tiên tính toán trung bình di chuyển nhanh, trung bình di chuyển chậm, chênh lệch MACD, đường tín hiệu và các chỉ số MACD tiêu chuẩn khác. Sau đó, dựa trên một trong năm loại tín hiệu được chọn ( tín hiệu tiếp tục, tín hiệu đảo ngược, tín hiệu biểu đồ, đường chéo không của MACD, đường chéo không của tín hiệu), đường chéo vàng và đường chéo chết được xác định. Cuối cùng, dừng lỗ và lấy lợi nhuận được thiết lập dựa trên chỉ số ATR để hoàn thành logic nhập và xuất.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Sử dụng chỉ số MACD để xác định hướng xu hướng là chính xác và đáng tin cậy.

  2. Các thiết lập dừng lỗ và lấy lợi nhuận dựa trên chỉ số ATR có thể kiểm soát hiệu quả tỷ lệ rủi ro-lợi nhuận của các giao dịch đơn và giảm xác suất lỗ.

  3. Cung cấp năm loại tín hiệu tùy chọn cho phép sử dụng tín hiệu phù hợp nhất cho các thị trường khác nhau, cải thiện khả năng thích nghi của chiến lược.

  4. Có nhiều thông số đầu vào có thể điều chỉnh có thể được tối ưu hóa để hiệu suất giao dịch tốt hơn.

Rủi ro và giải pháp

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Chỉ số MACD có thể dễ dàng tạo ra tín hiệu sai và gây ra tổn thất không cần thiết.

  2. Chỉ số ATR chỉ mô hình hóa các biến động của giai đoạn gần đây và không thể ngăn chặn chính xác lỗ trong điều kiện thị trường cực đoan.

  3. Hiệu suất của các tín hiệu được chọn có thể không ổn định.

  4. Các thông số tín hiệu và các thông số quản lý rủi ro cần được tối ưu hóa cùng nhau, nếu không sẽ khó tìm ra kết quả tối ưu trên toàn cầu.

Các đề xuất tối ưu hóa

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

  1. Hãy thử các đường trung bình động khác như TMA, Hull MA vv để lọc tín hiệu MACD.

  2. Hãy thử các cơ chế dừng động có thể xử lý tốt hơn những biến động trong điều kiện thị trường cực đoan.

  3. Tối ưu hóa đầy đủ các thông số MACD truyền thống để tìm kết hợp tốt hơn.

  4. Sử dụng các phương pháp học máy để tìm ra số nhân ATR tối ưu để quản lý rủi ro tốt hơn.

  5. Kiểm tra lại từng loại tín hiệu riêng biệt để xác định tín hiệu tối ưu.

  6. Đào tạo mạng thần kinh để đánh giá chất lượng tín hiệu và khám phá các tín hiệu mới dựa trên MACD.

Kết luận

Chiến lược MACD sử dụng chỉ số MACD để xác định hướng xu hướng và thiết lập dừng lỗ và lấy lợi nhuận với chỉ số ATR, có thể nắm bắt hiệu quả các cơ hội giao dịch xu hướng. Chiến lược có nhiều lợi thế như các tham số có thể điều chỉnh, cơ chế dừng hoàn chỉnh và các loại tín hiệu tùy chọn. Bước tiếp theo là cải thiện chất lượng tín hiệu, cơ chế dừng lỗ và tối ưu hóa lựa chọn tham số để có được kết quả backtest và sống tốt hơn.


/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-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/
// © vuagnouxb

//@version=4
strategy("BV's MACD SIGNAL TESTER", overlay=true)

//------------------------------------------------------------------------
//----------            Confirmation Calculation              ------------ INPUT
//------------------------------------------------------------------------

// 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)

// 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

// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

// -- Trade entry signals

signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"])

continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 :
   signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : 
   signalChoice == "Histogram" ? crossover(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossover(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossover(signal, 0) :
   false
   
continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 :
   signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : 
   signalChoice == "Histogram" ? crossunder(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossunder(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossunder(signal, 0) :
   false

longCondition = continuationSignalLong

shortCondition = continuationSignalShort

//------------------------------------------------------------------------
//----------             ATR MONEY MANAGEMENT                 ------------
//------------------------------------------------------------------------

SLmultiplier = 1.5
TPmultiplier = 1

JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false)
pipAdjuster = JPYPair ? 1000 : 100000


ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000
SL = ATR * SLmultiplier
TP = ATR * TPmultiplier

//------------------------------------------------------------------------
//----------                  TIME FILTER                     ------------
//------------------------------------------------------------------------

YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3)

_time = 2020 - YearOfTesting

timeFilter = (year > _time) 

//------------------------------------------------------------------------
//---------                 ENTRY FUNCTIONS                    ----------- INPUT
//------------------------------------------------------------------------

if (longCondition and timeFilter)  
    strategy.entry("Long", strategy.long)

if (shortCondition and timeFilter) 
    strategy.entry("Short", strategy.short)
    
//------------------------------------------------------------------------
//---------                 EXIT  FUNCTIONS                    -----------
//------------------------------------------------------------------------


strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL)  

strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)  

Thêm nữa