Chiến lược phát hiện thung lũng MACD

MACD ATR RSI EMA
Ngày tạo: 2024-04-12 17:01:21 sửa đổi lần cuối: 2024-04-12 17:01:21
sao chép: 1 Số nhấp chuột: 719
1
tập trung vào
1617
Người theo dõi

Chiến lược phát hiện thung lũng MACD

Tổng quan

Chiến lược MACD Valley Detector là một chiến lược giao dịch dựa trên chỉ số MACD. Chiến lược này tạo ra tín hiệu mua bằng cách phát hiện đáy của chỉ số MACD.

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

Trung tâm của chiến lược MACD Valley Detector là sử dụng chỉ số MACD để nắm bắt cơ hội đảo ngược tiềm năng. Chỉ số MACD được tính bằng chênh lệch giữa hai chỉ số chuyển động trung bình (EMA), phản ánh sự thay đổi động lực của giá. Khi chỉ số MACD hình thành đáy thung lũng, nó cho thấy động lực giảm giá có thể giảm đi và có khả năng đảo ngược.

Chiến lược này sử dụng các điều kiện sau để xác định đáy của MACD:

  1. MACD hiện tại có độ chênh lệch lớn hơn so với đường tín hiệu
  2. Điểm chênh lệch trước đó nhỏ hơn hai điểm chênh lệch trước đó.
  3. MACD nhỏ hơn hoặc bằng -0.4
  4. MACD khác với đường tín hiệu nhỏ hơn 0

Khi các điều kiện trên được đáp ứng cùng một lúc, chiến lược cho rằng đáy thung lũng MACD đã xuất hiện và phát tín hiệu mua. Đồng thời, chiến lược đặt giá dừng cố định, tức là giá mua cộng với giá chênh lệch cố định ((takeProfitValue)

Phân tích lợi thế

  1. Chỉ số MACD là một chỉ số động lực được sử dụng rộng rãi, có khả năng nắm bắt hiệu quả các thay đổi xu hướng của giá cả.
  2. Bằng cách phát hiện đáy thung lũng MACD, chiến lược cố gắng nắm bắt cơ hội đảo ngược tiềm năng, tìm kiếm cơ hội mua sau khi giá giảm.
  3. Chiến lược sử dụng nhiều điều kiện để xác nhận đáy thung lũng MACD, tăng độ tin cậy của tín hiệu.
  4. Thiết lập giá dừng cố định giúp kiểm soát rủi ro và khóa lợi nhuận.

Phân tích rủi ro

  1. Chỉ số MACD có sự chậm trễ, có thể phát ra tín hiệu chậm trễ.
  2. Chiến lược phụ thuộc vào các thiết lập tham số cố định, chẳng hạn như chiều dài của đường trung bình di chuyển nhanh và chậm, chiều dài của đường tín hiệu MACD, và có thể hoạt động không tốt trong các điều kiện thị trường khác nhau.
  3. Chiến lược này không có cơ chế dừng lỗ rõ ràng và có thể chịu tổn thất lớn nếu thị trường tiếp tục giảm.
  4. Giá dừng cố định có thể hạn chế tiềm năng lợi nhuận của chiến lược, đặc biệt là trong thị trường có xu hướng mạnh.

Hướng tối ưu hóa

  1. Xem xét thêm các cơ chế dừng động, chẳng hạn như dừng dựa trên chỉ số ATR, để kiểm soát rủi ro tốt hơn.
  2. Tối ưu hóa các tham số của chỉ số MACD, chẳng hạn như sử dụng các thuật toán di truyền để tìm các tổ hợp tham số tối ưu.
  3. Kết hợp với các chỉ số kỹ thuật khác hoặc bộ lọc trạng thái thị trường, chẳng hạn như RSI, Blink, v.v., để cải thiện chất lượng và độ tin cậy của tín hiệu.
  4. Khám phá các chiến lược dừng động, chẳng hạn như điều chỉnh mức dừng dựa trên biến động thị trường hoặc hành vi giá để tận dụng tối đa các xu hướng.

Tóm tắt

Chiến lược MACD Valley Detector là một chiến lược giao dịch dựa trên việc phát hiện đáy của MACD. Bằng cách nắm bắt đáy của chỉ số MACD, chiến lược cố gắng tìm kiếm cơ hội đảo ngược tiềm năng và mua. Chiến lược sử dụng nhiều điều kiện để xác nhận tín hiệu và đặt giá dừng cố định. Mặc dù chiến lược này có một số lợi thế, chẳng hạn như sử dụng chỉ số MACD được sử dụng rộng rãi và xác nhận nhiều điều kiện, nhưng cũng có một số rủi ro và hạn chế, chẳng hạn như trì trệ, tham số cố định, thiếu dừng rõ ràng.

Mã nguồn chiến lược
/*backtest
start: 2024-03-12 00:00:00
end: 2024-04-11 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/
// © freditansari

//@version=5
//@version=5
strategy("MACD Valley Detector", overlay=true)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD

rsi = ta.rsi(close, 14)
atr = ta.atr(14)

qty=1

takeProfitValue =7
// stopLossValue = 1


// close[0] < close[1] and close[1] > close[2]
is_valley= delta[0] > delta[1] and delta[1]<delta[2]? 1:0

// plot(is_valley , "valley?")

if(is_valley==1 and MACD<=-0.4 and delta <0)
	takeProfit = close +takeProfitValue
	action = "buy"
    // strategy.entry("long", strategy.long, qty=qty)
    // // strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
    // strategy.exit("exit", "long", limit=takeProfit)
    alert('{"TICKER":"'+syminfo.ticker+'","ACTION":"'+action+'","PRICE":"'+str.tostring(close)+'","TAKEPROFIT":"'+str.tostring(takeProfit)+'","QTY":"'+str.tostring(qty)+'"}')

if (ta.crossover(delta, 0))
	stopLoss = low -0.3
    takeProfit = high +0.3
	strategy.entry("MacdLE", strategy.long,qty=qty, comment="MacdLE")
	strategy.exit("exit long", "MacdLE", limit=takeProfit)
	// strategy.exit("exit long", "MacdLE", stop=stopLoss, limit=takeProfit)
if (ta.crossunder(delta, 0))
	stopLoss = high + 0.3
    takeProfit = low - 0.3
	strategy.entry("MacdSE", strategy.short,qty=qty, comment="MacdSE")
	strategy.exit("exit long", "MacdLE", limit=takeProfit)

	// strategy.exit("exit short", "MacdSE", stop=stopLoss, limit=takeProfit)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)