Эта стратегия представляет собой количественную торговую систему, основанную на сигналах и наложениях LuxAlgo®. Она в основном инициирует длинные позиции путем захвата пользовательских условий оповещения и управляет позициями через несколько сигналов выхода. Система использует модульную конструкцию, поддерживающую различные комбинации условий выхода, включая умные остановки отслеживания, подтверждения обратного тренда и традиционные стоп-потери на основе процентов. Кроме того, система поддерживает масштабирование позиций, обеспечивая большую гибкость в управлении деньгами.
Основная логика включает следующие ключевые компоненты:
Эта стратегия обеспечивает комплексное решение для количественной торговли, сочетая высококачественные сигналы LuxAlgo® с многоуровневой системой управления рисками. Ее модульная конструкция и гибкие варианты конфигурации обеспечивают хорошую адаптивность и масштабируемость. Хотя есть некоторые присущие риски, общая производительность стратегии имеет значительное пространство для улучшения посредством непрерывной оптимизации и совершенствования. Пользователям рекомендуется обращать внимание на изменения рыночных условий, соответственно корректировать настройки параметров и поддерживать непрерывный мониторинг риска в практических приложениях.
/*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)