Chiến lược này thực hiện xu hướng sau khi giao dịch trên chỉ số MACD. Nó xác định hướng xu hướng bằng cách sử dụng MACD và với stop loss động để khóa lợi nhuận.
Tính toán chỉ số MA nhanh, MA chậm và MACD. MA nhanh sử dụng EMA 12 giai đoạn, MA chậm sử dụng EMA 26 giai đoạn.
Thiết lập đường mua và bán. Tạo tín hiệu mua khi MACD vượt qua đường mua, tạo tín hiệu bán khi MACD vượt qua đường bán.
Đặt stop loss động sau khi mở vị trí.
Vị trí đóng khi stop loss được kích hoạt hoặc tín hiệu đảo ngược xuất hiện.
Sử dụng MACD để xác định hướng xu hướng có thể theo dõi xu hướng hiệu quả.
Đặt lỗ dừng động có thể liên tục khóa lợi nhuận và tránh tổn thất lớn hơn.
Logic chiến lược đơn giản và rõ ràng, dễ hiểu và tự động hóa cho giao dịch lượng.
MACD có hiệu ứng chậm, có thể bỏ lỡ sự đảo ngược xu hướng ngắn hạn.
Đặt dừng lỗ quá lỏng lẻo có thể bỏ lỡ một số lợi nhuận, quá chặt chẽ có thể dừng sớm.
Các thông số MACD và đường mua / bán cần kiểm tra và tối ưu hóa liên tục.
Làm việc tốt hơn trong thị trường xu hướng, có thể có lỗ trong thị trường hỗn loạn.
Tối ưu hóa các thông số MACD để tìm kết hợp tốt nhất.
Kiểm tra các phương pháp dừng mất mát khác nhau, chẳng hạn như điểm cố định, dựa trên ATR v.v.
Thêm các điều kiện lọc bằng cách sử dụng các chỉ số khác để tránh các tín hiệu sai, ví dụ: Bollinger Bands, RSI v.v.
Kết hợp với các công cụ xác định xu hướng, điều chỉnh động các thông số chiến lược dựa trên xu hướng so với thị trường giới hạn phạm vi.
Chiến lược này có logic rõ ràng sử dụng MACD để theo dõi xu hướng và stop loss động để khóa lợi nhuận. Nó có thể theo dõi hiệu quả các thị trường xu hướng. Nhưng MACD có vấn đề chậm trễ, và điểm stop loss cần được tối ưu hóa. Bước tiếp theo là kiểm tra thêm các thông số, tối ưu hóa cơ chế stop loss, thêm các bộ lọc với các chỉ số khác, để làm cho nó mạnh mẽ trong các điều kiện thị trường khác nhau, cải thiện tính ổn định.
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(shorttitle = "EURUSD MACD", title = "EURUSD MACD") fastMA = input(title="Fast moving average", defval = 12, minval = 7) slowMA = input(title="Slow moving average", defval = 26, minval = 7) lastColor = yellow [currMacd,_,_] = macd(close[0], fastMA, slowMA, 9) [prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9) plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red plot(currMacd, style = histogram, color = plotColor, linewidth = 3) plot(0, title = "Zero line", linewidth = 1, color = gray) //MACD // Getting inputs fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) src = input(title="Source", defval=close) signal_length = input(title="Signal Smoothing", minval = 1, maxval = 50, defval =9) sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=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=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) ///END OF MACD //Long and Close Long Lines linebuy = input(title="Enter Long", type=float, defval=-0.0002) linesell = input(title="Close Long", type=float, defval=0.0001) //Plot Long and Close Long Lines plot(linebuy,color=green),plot(linesell,color=red) //Stop Loss Input sl_inp = input(0.05, title='Stop Loss %', type=float)/100 //Order Conditions longCond = crossover(currMacd, linebuy) exitLong = crossover(currMacd, linesell) stop_level = strategy.position_avg_price * (1 - sl_inp) //Order Entries strategy.entry("long", strategy.long, when=longCond==true) strategy.close("long", when=exitLong==true) strategy.exit("Stop Loss", stop=stop_level)