Chiến lược này, có tên là
Chiến lược này thể hiện một phương pháp theo dõi xu hướng đơn giản dựa trên OBV và MA chéo. Ưu điểm của nó là logic rõ ràng, nắm bắt xu hướng kịp thời và kiểm soát giữ linh hoạt thông qua các MA đầu vào và đầu ra riêng biệt. Tuy nhiên, nhược điểm của nó bao gồm thiếu các biện pháp kiểm soát rủi ro và phương pháp xác nhận tín hiệu. Có thể cải thiện các lĩnh vực như lọc xu hướng, tối ưu hóa tham số, quản lý vị trí và tín hiệu chung để có được hiệu suất chiến lược mạnh mẽ hơn. Chiến lược này phù hợp hơn như một tín hiệu hướng dẫn để được sử dụng kết hợp với các chiến lược khác.
/*backtest start: 2023-04-23 00:00:00 end: 2024-04-28 00:00:00 period: 1d basePeriod: 1h 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/ // © ThousandX_Trader //@version=5 strategy(title="OBVious MA Strategy [1000X]", overlay=false, initial_capital=10000, margin_long=0.1, margin_short=0.1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, slippage=1, commission_type=strategy.commission.percent, commission_value=0.1) // Direction Input /// tradeDirection = input.string("long", title="Direction", options=["long", "short"], group = "Direction Filter") /////////////////////////////////////// // 1000X OBV MA INDICATOR // /////////////////////////////////////// // OBV Trend Length Inputs // long_entry_length = input(190, title="Long Entry MA Length", group = "Moving Average Settings") long_exit_length = input(202, title="Long Exit MA Length", group = "Moving Average Settings") short_entry_length = input(395, title="Short MA Entry Length", group = "Moving Average Settings") short_exit_length = input(300, title="Short Exit MA Length", group = "Moving Average Settings") // OBV Calculation obv = ta.cum(ta.change(close) >= 0 ? volume : -volume) // Calculate OBV Moving Averages obv_ma_long_entry = ta.sma(obv, long_entry_length) obv_ma_long_exit = ta.sma(obv, long_exit_length) obv_ma_short_entry = ta.sma(obv, short_entry_length) obv_ma_short_exit = ta.sma(obv, short_exit_length) /////////////////////////////////////// // STRATEGY RULES // /////////////////////////////////////// longCondition = ta.crossover(obv, obv_ma_long_entry) and tradeDirection != "short" and strategy.position_size <= 0 longExitCondition = ta.crossunder(obv, obv_ma_long_exit) shortCondition = ta.crossunder(obv, obv_ma_short_entry) and tradeDirection != "long" and strategy.position_size >= 0 shortExitCondition = ta.crossover(obv, obv_ma_short_exit) /////////////////////////////////////// // ORDER EXECUTION // /////////////////////////////////////// // Close opposite trades before entering new ones if (longCondition and strategy.position_size < 0) strategy.close("Short Entry") if (shortCondition and strategy.position_size > 0) strategy.close("Long Entry") // Enter new trades if (longCondition) strategy.entry("Long Entry", strategy.long) if (shortCondition) strategy.entry("Short Entry", strategy.short) // Exit conditions if (longExitCondition) strategy.close("Long Entry") if (shortExitCondition) strategy.close("Short Entry") /////////////////////////////////////// // PLOTTING // /////////////////////////////////////// // Plot OBV line with specified color plot(obv, title="OBV", color=color.new(#2962FF, 0), linewidth=1) // Conditionally plot Long MAs with specified colors based on Direction Filter plot(tradeDirection == "long" ? obv_ma_long_entry : na, title="Long Entry MA", color=color.new(color.rgb(2, 130, 228), 0), linewidth=1) plot(tradeDirection == "long" ? obv_ma_long_exit : na, title="Long Exit MA", color=color.new(color.rgb(106, 168, 209), 0), linewidth=1) // Conditionally plot Short MAs with specified colors based on Direction Filter plot(tradeDirection == "short" ? obv_ma_short_entry : na, title="Short Entry MA", color=color.new(color.rgb(163, 2, 227), 0), linewidth=1) plot(tradeDirection == "short" ? obv_ma_short_exit : na, title="Short Exit MA", color=color.new(color.rgb(192, 119, 205), 0), linewidth=1)