Đèn nến Demigod MACD Divergence Xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-02-04 15:06:58
Tags:

img

Tổng quan

Chiến lược này tính toán chỉ số MACD và biểu đồ MACD của nó để phát hiện tín hiệu chênh lệch giữa biểu đồ MACD và chuyển động giá, do đó tạo ra các tín hiệu giao dịch. Khi một mức cao mới trong giá nhưng không có mức cao mới trong biểu đồ MACD được phát hiện, một tín hiệu chênh lệch giảm được tạo ra. Khi một mức thấp mới trong giá nhưng không có mức thấp mới trong biểu đồ MACD được phát hiện, một tín hiệu chênh lệch tăng được tạo ra. Kết hợp với chỉ số ATR để dừng lỗ và lấy lợi nhuận, nó thực hiện các giao dịch theo xu hướng.

Chiến lược logic

Nguyên tắc cốt lõi của chiến lược này là sử dụng chỉ số MACD và biểu đồ MACD của nó để phản ánh những thay đổi trong xu hướng giá, và phát hiện các tín hiệu chênh lệch giữa biểu đồ MACD và giá như là điều kiện kích hoạt cho các tín hiệu giao dịch.

Cụ thể, chiến lược đầu tiên tính toán đường MACD, đường tín hiệu và biểu đồ MACD. Sau đó bằng cách xác định hàm fractal để phát hiện đỉnh và thung lũng của biểu đồ MACD để chiết xuất mức tối đa và tối thiểu địa phương. Kết hợp với giá cao nhất và giá thấp nhất, nó xác định liệu có sự khác biệt giữa biểu đồ MACD và giá hay không.

Khi giá đạt mức cao mới nhưng biểu đồ MACD không đạt mức cao mới, một tín hiệu chênh lệch giảm regular_bearish_div được tạo ra. Khi giá giảm xuống mức thấp mới nhưng biểu đồ MACD không giảm xuống mức thấp mới, một tín hiệu chênh lệch tăng regular_bullish_div được tạo ra.

Cuối cùng, khi các tín hiệu chênh lệch giảm và tăng được tạo ra, chiến lược phát hành lệnh ngắn và dài tương ứng, và thoát khỏi các vị trí với ATR dừng lỗ và lấy lợi nhuận.

Phân tích lợi thế

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

  1. Bằng cách sử dụng tính năng chênh lệch giữa biểu đồ MACD và giá, nó có thể nắm bắt các biến động trong xu hướng giá sớm.

  2. Các thiết lập dừng lỗ và lấy lợi nhuận ATR là hợp lý để kiểm soát hiệu quả mức lỗ tối đa cho mỗi giao dịch.

  3. Sử dụng phương pháp theo xu hướng có thể tối đa hóa lợi nhuận bị khóa.

  4. Các thiết lập tham số hợp lý lọc ra một số tín hiệu giao dịch ồn ào.

  5. Logic chiến lược là rõ ràng và dễ hiểu, dễ dàng để xác nhận trong giao dịch trực tiếp.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Sự khác biệt MACD không nhất thiết dẫn đến sự đảo ngược giá, có một số rủi ro tín hiệu sai.

  2. Các thiết lập dừng lỗ và lấy lợi nhuận không hợp lý có thể dẫn đến tổn thất quá mức hoặc lợi nhuận không đủ.

  3. Các tín hiệu phân kỳ với chu kỳ ngắn có thể được gây ra bởi tiếng ồn và nên được lọc đúng cách.

  4. Các sản phẩm giao dịch và cài đặt tham số không tương thích cũng sẽ ảnh hưởng đến hiệu suất chiến lược.

Các giải pháp tương ứng:

  1. Tăng các yêu cầu về chiều dài và kích thước của sự phân kỳ để lọc các tín hiệu sai.

  2. Sử dụng ATR làm điểm chuẩn dừng lỗ và lấy lợi nhuận, điều chỉnh số nhân ATR để kiểm soát rủi ro cho mỗi giao dịch.

  3. Chọn các tham số khác nhau cho các sản phẩm giao dịch khác nhau. Thực hiện tối ưu hóa tham số để tìm kết hợp tham số tối ưu.

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

Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:

  1. Xác nhận chênh lệch phức tạp hơn, chẳng hạn như xác nhận chênh lệch khối lượng.

  2. Tối ưu hóa các thông số MACD để tìm kết hợp thông số tốt nhất.

  3. Tối ưu hóa số nhân của ATR dừng lỗ và lấy lợi nhuận.

  4. Thêm các thuật toán học máy để hỗ trợ đánh giá độ tin cậy của tín hiệu phân kỳ.

  5. Thêm dự đoán mô hình để xác định xác suất đảo ngược giá.

  6. Điều chỉnh động các tham số chiến lược theo những thay đổi về điều kiện thị trường.

Tóm lại

Tóm lại, chiến lược theo dõi xu hướng MACD khác biệt này sử dụng sự khác biệt giữa biểu đồ MACD và giá để nắm bắt xu hướng. Các thiết lập dừng lỗ và lấy lợi nhuận ATR hợp lý có thể kiểm soát rủi ro cho mỗi giao dịch. Logic chiến lược rõ ràng và dễ hiểu, đáng để xác nhận trong giao dịch trực tiếp. Tối ưu hóa theo dõi có thể được thực hiện trong nhiều khía cạnh để có được kết quả tốt hơn.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bigwin_sun
// copyright: Tradingvue Limited    

//@version = 5
strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100)

//macd input
fastMA = input.int(13, title = "fast Length", minval = 1,     group = "CDMA")
slowMA = input.int(34, title = "slow Length", minval = 1,     group = "CDMA")
src          = input.source(title = "source", defval = close, group = "CDMA")
signalSmooth = input.int(9, title="ma Length", minval = 1,    group = "CDMA")
//Divergenc
divLength    = input.int(title = "Divergenc Length",   defval = 5, minval = 1,   maxval = 50,  inline = "ATRLength",  group = "Divergence")
divStren     = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength",  group = "Divergence")

//atr input
atrLength = input.int(13, title = "ATR Length", minval = 1,   inline = "ATRLength", group = "ATR")
m         = input.float(1.0,  "ATR multyple",   minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5)
collong   = input.color(color.teal, title = "upper color",  inline = "ATR显示", group = "ATR")
colshort  = input.color(color.red,  title = "under color",  inline = "ATR显示", group = "ATR")

// MACD---------------------------------------------------------------------------------------------------------------------------------
DivOffset = -2
macdLine   = ta.ema(src, fastMA) - ta.ema(src, slowMA)    
signalLine = ta.ema(macdLine, signalSmooth)
histogram  = macdLine - signalLine

histogramColor = if histogram > 0
    histogram > histogram[1] ? color.lime : color.green
else 
    histogram < histogram[1] ? color.maroon : color.red

// cdma histogram
plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor)
plot(0,         title = "zero line",      linewidth = 1,                               color = color.gray)

// Divergenc calculation-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//peak / valley fundation
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//peak / valley value
fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na
fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na

//previouse peak or valley
high_prev1  = ta.valuewhen(fractal_top1, histogram[2], 0)[2]
high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2]
low_prev1   = ta.valuewhen(fractal_bot1, histogram[2], 0)[2]
low_price1  = ta.valuewhen(fractal_bot1, low[2], 0)[2]

//Divergenc : cdma histogram against candle value
regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength
regular_bullish_div1 = low[2]  < low_price1 - divStren  and histogram[2] > low_prev1 / divStren  and ta.barssince(fractal_bot1[1]) > divLength

//-------------------------cdma Divergenc range------------------------------------------------
//histogramColor
col1 = regular_bearish_div1 ? color.red : na
col2 = regular_bullish_div1 ? #00FF00EB : na
//plot
plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset)
plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset)

// calculate ATR				--------------------------------------------------------------------------------------------------------------------------------------------------
atr = ta.ema(ta.tr(true), atrLength) * m
up = atr + high
dw = low - atr

//stratety : enrty and exit---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if regular_bearish_div1 and fractal_top1
//if regular_bullish_div1 and fractal_bot1
    //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray,  style = label.style_label_lower_left)
    strategy.entry("Short", strategy.short, qty = 1)
    strategy.exit("exitShort", "Short", stop = up, limit = dw - atr)
if regular_bullish_div1 and fractal_bot1
//if regular_bearish_div1 and fractal_top1   
    //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left)
	strategy.entry("Long", strategy.long, qty = 1)
    strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)


Thêm nữa