Chiến lược này tạo ra chỉ số MACD bằng cách tính toán sự khác biệt giữa các đường trung bình di chuyển nhanh và chậm, và đánh giá xu hướng và khu vực mua quá mức / bán quá mức của thị trường tài chính cùng với đường tín hiệu. Nó đi dài khi MACD và đường tín hiệu tạo thành một chéo vàng trong khi giá nằm trên đường MA 200 ngày, và đi ngắn khi hình thành một chéo chết trong khi giá nằm dưới đường MA 200 ngày. Đây là một chiến lược vượt qua chéo trung bình di chuyển kép điển hình.
Định hướng xu hướng của thị trường là theo đường MACD, và đường tín hiệu là theo đường MACD. Khi MACD và đường tín hiệu tạo thành một đường chéo vàng, đó là một tín hiệu dài để đi dài. Khi hình thành một đường chéo chết, đó là một tín hiệu ngắn để đi ngắn. Trong khi đó, nó sử dụng mối quan hệ giá với đường MA 200 ngày để lọc các tín hiệu, chỉ lấy tín hiệu dài khi giá trên 200 ngày MA và tín hiệu ngắn khi giá dưới 200 ngày MA, để tránh những biến động trong thời gian xu hướng mạnh.
Phương pháp tính toán cụ thể là:
Khi MACD vượt qua trên đường tín hiệu trong khi cả hai đều dưới 0, đó là tín hiệu dài chéo vàng. Khi MACD vượt qua dưới đường tín hiệu trong khi cả hai đều trên 0, đó là tín hiệu ngắn chéo chết. Trong khi đó, chỉ mất thời gian dài khi giá trên 200 ngày MA, và ngắn khi giá dưới 200 ngày MA.
Có thể giảm rủi ro bằng cách rút ngắn thời gian MA, thêm các chỉ số khác và thêm stop loss.
1. Được thử nghiệm trên các khung thời gian khác nhau từ 15m đến 1D, kết quả tối ưu trên 4H trong lợi nhuận điều chỉnh rủi ro
2. Tối ưu hóa MA nhanh và chậm để MACD nắm bắt chu kỳ, 7-21 tốt cho 15m
3.Hull MA cho MACD cho kết quả tốt
4.Stoploss kéo dài cải thiện quản lý rủi ro
Đây là một chiến lược rất đơn giản và thực tế, tạo ra các tín hiệu giao dịch có xác suất cao thông qua hệ thống chỉ số kép và lọc giá. Nó có tỷ lệ lợi nhuận tương đối cao, sử dụng sự kết hợp tham số MACD cổ điển để tránh tối ưu hóa quá mức. Vẫn còn nhiều chỗ để tối ưu hóa bằng cách điều chỉnh các tham số MA, thêm các chỉ số khác và cơ chế dừng lỗ để cải thiện hiệu suất hơn nữa.
/*backtest start: 2024-02-14 00:00:00 end: 2024-02-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/ // © Hurmun //@version=4 strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100) 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 movinga2 = input(title="movinga 2", type=input.integer, defval=200) movinga200 = sma(close, movinga2) plot(movinga200, "MA", color.orange) longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200 if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200 if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100 longStoploss = strategy.position_avg_price * (1 - stoploss) longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) shortStoploss = strategy.position_avg_price * (1 + stoploss) if (strategy.position_size > 0 ) strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss) if (strategy.position_size < 0 ) strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)