
Chiến lược phá vỡ dao động của MACD Stochastics là một chiến lược giao dịch định lượng kết hợp chỉ số MACD và chỉ số Stochastics. Chiến lược này cố gắng xác định xu hướng của giá cổ phiếu và vào vị trí khi giá phá vỡ từ vùng dao động.
Khi vào vị trí, chiến lược này xem xét các tín hiệu của cả hai chỉ số MACD và Stochastics để cải thiện chất lượng của các mục. Ngoài ra, chiến lược này đã đặt trước điểm dừng lỗ và điểm dừng để kiểm soát rủi ro hiệu quả.
Chiến lược phá vỡ dao động của MACD Stochastics dựa trên các nguyên tắc sau:
Cụ thể, chiến lược này sử dụng đường DIFF và đường DEA của MACD để đánh giá xu hướng của giá. Khi DIFF vượt qua DEA, nó tạo ra một tín hiệu đa đầu, và ngược lại, nó tạo ra một tín hiệu vô đầu.
Trong khi đó, đường K của Stochastics cũng tạo ra tín hiệu giao dịch khi nó giao dịch lên hoặc xuống với đường D gần vùng mua quá mức (phần mặc định 30 và 70).
Chiến lược này sẽ chọn vào khi MACD và Stochastics cùng cho tín hiệu đồng hướng. Tại thời điểm này, giá cổ phiếu có thể sẽ tạo ra một đột phá lớn.
Sau khi tham gia, chiến lược sẽ thiết lập điểm dừng lỗ và điểm dừng hợp lý. Chấm hẹp hợp lý có thể kiểm soát hiệu quả tổn thất đơn lẻ và chặn có thể khóa lợi nhuận.
Chiến lược phá vỡ dao động của MACD Stochastics có những lợi thế sau:
Chiến lược này sử dụng hai chỉ số MACD và Stochastics cùng lúc để lọc ra một số tín hiệu giả và cải thiện chất lượng các mục.
Chiến lược này được thiết kế đặc biệt để nắm bắt các biến động đột phá sau khi giá cổ phiếu dao động trong một thời gian dài. Những biến động như vậy thường có mức độ lớn hơn.
Chiến lược này có cài đặt dừng lỗ để kiểm soát một lần thua lỗ một cách hợp lý và khóa lợi nhuận kịp thời.
Mặc dù chiến lược phá vỡ dao động của MACD Stochastics đã được thiết kế cẩn thận, nhưng vẫn có một số rủi ro:
Có thể có một số trường hợp phá vỡ giả định trước khi giá cổ phiếu phá vỡ. Nếu chọn thời gian nhập cảnh không đúng thì có thể làm cho lần nhập cảnh này trở thành điểm nhập cảnh bị bỏ lỡ.
Mặc dù đã chuẩn bị đầy đủ trước khi đột phá, nhưng vẫn có khả năng đột phá không thành công. Trong trường hợp này, sẽ có thiệt hại.
Thiết lập tham số của chiến lược có thể ảnh hưởng lớn đến kết quả. Nếu tham số không được thiết lập đúng, sẽ bị giảm giá lớn.
Những rủi ro trên có thể được tối ưu hóa bằng cách:
Kết hợp các chỉ số khác để lọc tín hiệu
Sự can thiệp của con người đã đảm bảo sự đột phá.
Thử nghiệm tối ưu hóa đa tham số
Chiến lược phá vỡ dao động của MACD Stochastics có thể được tối ưu hóa hơn nữa:
Tối ưu hóa các tham số MACD để tìm ra sự kết hợp tốt nhất
Tối ưu hóa các tham số Stochastics để tìm ra sự kết hợp tốt nhất
Thêm các chỉ số khác, chẳng hạn như KDJ, BOLL, để nâng cao chất lượng của Entries
Kiểm tra thời gian giữ vị trí khác nhau, tối ưu hóa chiến lược dừng lỗ
Kiểm tra sự khác biệt của các tham số trong các giao dịch khác nhau
Thêm thuật toán học máy, tự động tối ưu hóa tham số
Chiến lược phá vỡ dao động của MACD Stochastics sử dụng cả hai chỉ số MACD và Stochastics để tham gia vào chất lượng cao khi phá vỡ dao động của MACD. Đồng thời hỗ trợ chiến lược dừng lỗ để kiểm soát rủi ro hiệu quả. Chiến lược này nắm bắt xu hướng ngắn hạn của giá cổ phiếu, có một lợi thế giao dịch nhất định.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval = 180)
slow_length = input(title = "Slow Length", defval = 390)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 500, defval = 135)
sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// hline(0, "Zero Line", color = color.new(#787B86, 50))
// plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
// plot(macd, title = "MACD", color = #2962FF)
// plot(signal, title = "Signal", color = #FF6D00)
periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
// plot(k, title="%K", color=#2962FF)
// plot(d, title="%D", color=#FF6D00)
// h0 = hline(80, "Upper Band", color=#787B86)
// hline(50, "Middle Band", color=color.new(#787B86, 50))
// h1 = hline(20, "Lower Band", color=#787B86)
// fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")
// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01
shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01
// Calculate trading conditions
enterLong = macd>signal and ta.crossover(k,30)
enterShort = macd<signal and ta.crossunder(k,70)
// Figure out take profit price
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? longExitPrice : na,
color=color.green, style=plot.style_circles,
linewidth=3, title="Long Take Profit")
plot(strategy.position_size < 0 ? shortExitPrice : na,
color=color.red, style=plot.style_circles,
linewidth=3, title="Short Take Profit")
// Submit entry orders
if enterLong
strategy.entry("long", strategy.long)
if enterShort
strategy.entry("short", strategy.short)
// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0
strategy.exit("long TP", limit=longExitPrice)
if strategy.position_size < 0
strategy.exit("short TP", limit=shortExitPrice)