Chiến lược này dựa trên Phương pháp Wyckoff, kết hợp Chỉ số Sức mạnh Tương đối (RSI) và Trung bình Di chuyển khối lượng (Volume MA) để xác định các giai đoạn tích lũy và phân phối của thị trường, tạo ra tín hiệu mua và bán. Ngoài ra, chiến lược sử dụng một cơ chế dừng lỗ rút động để kiểm soát rủi ro bằng cách đặt ngưỡng rút tối đa.
Chiến lược RSI Dynamic Drawdown Stop-Loss xác định các giai đoạn tích lũy và phân phối của thị trường bằng cách kết hợp các chỉ số RSI và khối lượng trong khi sử dụng một cơ chế dừng lỗ rút động để kiểm soát rủi ro. Chiến lược xem xét cả xu hướng thị trường và quản lý rủi ro, làm cho nó thực tế đến một mức độ nào đó. Tuy nhiên, hiệu suất của chiến lược phụ thuộc vào sự lựa chọn các tham số chỉ số và đặc điểm thị trường, đòi hỏi tối ưu hóa và điều chỉnh liên tục để cải thiện sự ổn định và lợi nhuận của nó.
/*backtest start: 2024-05-07 00:00:00 end: 2024-06-06 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Wyckoff Methodology Strategy with Max Drawdown", overlay=true) // Define input parameters length = input(14, title="RSI Length") overbought = input(70, title="RSI Overbought Level") oversold = input(30, title="RSI Oversold Level") volume_length = input(20, title="Volume MA Length") initial_capital = input(10000, title="Initial Capital") max_drawdown = input(500, title="Max Drawdown") // Calculate RSI rsi = ta.rsi(close, length) // Calculate Volume Moving Average vol_ma = ta.sma(volume, volume_length) // Identify Accumulation Phase accumulation = ta.crossover(rsi, oversold) and volume > vol_ma // Identify Distribution Phase distribution = ta.crossunder(rsi, overbought) and volume > vol_ma // Plot RSI hline(overbought, "Overbought", color=color.red) hline(oversold, "Oversold", color=color.green) plot(rsi, title="RSI", color=color.blue) // Plot Volume and Volume Moving Average plot(volume, title="Volume", color=color.orange, style=plot.style_histogram) plot(vol_ma, title="Volume MA", color=color.purple) // Variables to track drawdown var float max_equity = initial_capital var float drawdown = 0.0 // Update max equity and drawdown current_equity = strategy.equity if (current_equity > max_equity) max_equity := current_equity drawdown := max_equity - current_equity // Generate Buy and Sell Signals if (accumulation and drawdown < max_drawdown) strategy.entry("Buy", strategy.long) if (distribution and drawdown < max_drawdown) strategy.entry("Sell", strategy.short) // Plot Buy and Sell signals on chart plotshape(series=accumulation, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=distribution, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL") // Close positions if drawdown exceeds max drawdown if (drawdown >= max_drawdown) strategy.close_all("Max Drawdown Exceeded") // Set strategy exit conditions strategy.close("Buy", when=distribution or drawdown >= max_drawdown) strategy.close("Sell", when=accumulation or drawdown >= max_drawdown) // Display drawdown on chart plot(drawdown, title="Drawdown", color=color.red, linewidth=2, style=plot.style_stepline)