Chiến lược này là một hệ thống giao dịch định lượng dựa trên các tín hiệu và lớp phủ LuxAlgo®. Nó chủ yếu bắt đầu các vị trí dài bằng cách nắm bắt các điều kiện cảnh báo tùy chỉnh và quản lý các vị trí thông qua nhiều tín hiệu thoát. Hệ thống sử dụng thiết kế mô-đun, hỗ trợ các kết hợp khác nhau của các điều kiện thoát, bao gồm dừng theo dõi thông minh, xác nhận đảo ngược xu hướng và dừng lỗ dựa trên tỷ lệ phần trăm truyền thống. Ngoài ra, hệ thống hỗ trợ mở rộng vị trí, cung cấp sự linh hoạt hơn trong quản lý tiền.
Logic cốt lõi bao gồm các thành phần chính sau:
Chiến lược này cung cấp một giải pháp toàn diện cho giao dịch định lượng bằng cách kết hợp các tín hiệu chất lượng cao của LuxAlgo® với một hệ thống quản lý rủi ro đa lớp. Thiết kế mô-đun và các tùy chọn cấu hình linh hoạt cung cấp khả năng thích nghi và khả năng mở rộng tốt. Mặc dù có một số rủi ro vốn có, hiệu suất tổng thể của chiến lược có không gian cải thiện đáng kể thông qua tối ưu hóa và tinh chỉnh liên tục. Người dùng được khuyên nên chú ý đến những thay đổi trong điều kiện thị trường, điều chỉnh cài đặt tham số phù hợp và duy trì giám sát rủi ro liên tục trong các ứng dụng thực tế.
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 1h 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/ // © Chart0bserver // This strategy is NOT from the LuxAlgo® developers. We created this to compliment their hard work. No association with LuxAlgo® is intended nor implied. // Please visit https://chart.observer to test your Tradingview Strategies in our paper-trading sandbox environment. Webhook your alerts to our API. // Past performance does not ensure future results. This strategy provided with absolutely no warranty and is for educational purposes only // The goal of this strategy is to enter a long position using the Custom Alert condition feature of LuxAlgo® Signals & Overlays™ indicator // To trigger an exit from the long position, use one or more of the common exit signals which the Signals & Overlays™ indicator provides. // You will need to connect those signals to this strategy in the dialog box. // We're calling this a "piggyback" strategy because the LuxAlgo® Signals & Overlays indicator must be present, and remain on the chart. // The Signals and Overlays™ indicator is invite-only, and requires a paid subscription from LuxAlgo® - https://luxalgo.com/?rfsn=8404759.b37a73 //@version=6 strategy("Simple Backtester for LuxAlgo® Signals & Overlays™", "Simple Backtester for LuxAlgo® S&O ", true, pyramiding=3, default_qty_type = 'percent_of_equity', calc_on_every_tick = true, process_orders_on_close=false, calc_on_order_fills=true, default_qty_value = 33, initial_capital = 10000, currency = currency.USD, commission_type = format.percent, commission_value = 0.10 ) // Initialize a flag to track order placement var bool order_placed = false // Reset the flag at the start of each new bar if (not na(bar_index) and bar_index != bar_index[1]) order_placed := false // === Inputs which the user needs to change in the configuration dialog to point to the corresponding LuxAlgo alerts === // // === The Signals & Overlays indicator must be present on the chart in order for this to work === // la_EntryAlert = input.source(close, "LuxAlgo® Custom Alert signal", "Replace 'close' with your LuxAlgo® entry signal. For example, try using their Custom Alert.", display=display.none, group="Enter Long Position") useAddOnTrades = input.bool(false, "Add to your long position on LuxAlgo® signals", display=display.none, group="Add-On Trade Signal for Longs") la_AddOnAlert = input.source(close, "Add to open longs with this signal", "Replace 'close' with your desired Add-On Trade Signal", display=display.none, group="Add-On Trade Signal for Longs") la_SmartTrail = input.source(close, "LuxAlgo® Smart Trail", "Replace close with LuxAlgo® Smart Trail", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts") la_BearishConfirm = input.source(close, "LuxAlgo® Any Bearish Confirmation", "Replace close with LuxAlgo® Any Bearish Confirmation", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts") la_BearishConfirmPlus = input.source(close, "LuxAlgo® Bearish Confirmation+", "Replace close with LuxAlgo® Bearish Confirmation+", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts") la_BuiltInExits = input.source(close, "LuxAlgo® Bullish Exit", "Replace close with LuxAlgo® Bullish Exit", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts") la_TrendCatcherDn = input.source(close, "LuxAlgo® Trend Catcher Down", "Replace close with LuxAlgo® Trend Catcher Down", display=display.none, group="LuxAlgo® Signals & Overlays™ Alerts") // === Check boxes alowing the user to select exit criteria from th long position === // exitOnSmartTrail = input.bool(true, "Exit long trade on Smart Trail Switch Bearish", group="Exit Long Conditions") exitOnBearishConf = input.bool(false, "Exit on Any Bearish Confirmation", group="Exit Long Conditions") exitOnBearishConfPlus = input.bool(true, "Exit on Bearish Confirmation+", group="Exit Long Conditions") exitOnBuiltInExits = input.bool(false, "Exit on Bullish Exits", group="Exit Long Conditions") exitOnTrendCatcher = input.bool(false, "Exit on Trend Catcher Down", group="Exit Long Conditions") // === Optional Stop Loss ===// useStopLoss = input.bool(false, "Use a Stop Loss", group="Optional Stop Loss") stopLossPercent = input.float(0.25, "Stop Loss %", minval=0.25, step=0.25, group="Optional Stop Loss") // Use Lux Algo's signals as part of your strategy logic buyCondition = la_EntryAlert > 0 if useAddOnTrades and la_AddOnAlert > 0 and strategy.opentrades > 0 and not buyCondition buyCondition := true sellCondition = false sellComment = "" if exitOnSmartTrail and ta.crossunder(close, la_SmartTrail) sellCondition := true sellComment := "Smart Trail" if exitOnBearishConf and la_BearishConfirm == 1 sellCondition := true sellComment := "Bearish" if exitOnBearishConfPlus and la_BearishConfirmPlus == 1 sellCondition := true sellComment := "Bearish+" if exitOnBuiltInExits and la_BuiltInExits == 1 sellCondition := true sellComment := "Bullish Exit" if exitOnTrendCatcher and la_TrendCatcherDn == 1 sellCondition := true sellComment := "Trnd Over" // Stop Loss Calculation stopLossMultiplyer = 1 - (stopLossPercent / 100) float stopLossPrice = na if strategy.position_size > 0 stopLossPrice := strategy.position_avg_price * stopLossMultiplyer // -----------------------------------------------------------------------------------------------------------// // Back-testing Date Range code ----------------------------------------------------------------------------// // ---------------------------------------------------------------------------------------------------------// fromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12, group='Back-Testing Date Range') fromDay = input.int(defval=1, title='From Day', minval=1, maxval=31, group='Back-Testing Date Range') fromYear = input.int(defval=2024, title='From Year', minval=1970, group='Back-Testing Date Range') thruMonth = 1 thruDay = 1 thruYear = 2112 // === START/FINISH FUNCTION === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => // create function "within window of time time >= start and time <= finish ? true : false // End Date range code -----// if buyCondition and window() and not order_placed strategy.entry("Long", strategy.long) order_placed := true if sellCondition and window() and not order_placed strategy.close("Long", comment=sellComment) order_placed := true if useStopLoss and window() strategy.exit("Stop", "Long", stop=stopLossPrice)