O recurso está a ser carregado... Carregamento...

Sistema de rastreamento quantitativo de sinais de negociação e otimização de estratégias de saída múltipla

Autora:ChaoZhang, Data: 2024-12-13 11:39:06
Tags:

img

Resumo

Esta estratégia é um sistema de negociação quantitativo baseado em sinais e sobreposições LuxAlgo®. Inicia principalmente posições longas capturando condições de alerta personalizadas e gerencia posições por meio de múltiplos sinais de saída. O sistema emprega um design modular, suportando várias combinações de condições de saída, incluindo paradas inteligentes, confirmações de reversão de tendência e paradas tradicionais baseadas em porcentagem. Além disso, o sistema suporta escalagem de posição, proporcionando maior flexibilidade na gestão de dinheiro.

Princípios de estratégia

A lógica de base inclui os seguintes componentes-chave:

  1. Sistema de sinalização de entrada: desencadeia sinais de entrada longos através de condições de alerta LuxAlgo® personalizadas.
  2. Atividade de escalonamento de posições: funcionalidade opcional de escalonamento para aumentar as posições sobre as participações existentes.
  3. Mecanismo de saída de várias camadas:
    • Smart Trailing Stop: Monitora a relação de preços com a linha de tração inteligente
    • Exit de confirmação de tendência: Inclui sinais de confirmação de baixa básicos e reforçados
    • Sinais de saída integrados: utiliza múltiplas condições de saída inerentes ao indicador
    • Perda de parada tradicional: suporta configurações de perda de parada fixa baseadas em percentagem
  4. Gerenciamento de janelas de tempo: fornece configurações flexíveis de backtesting de intervalos de datas.

Vantagens da estratégia

  1. Gerenciamento sistemático do risco: Controla eficazmente o risco de queda através de mecanismos de saída de várias camadas.
  2. Gestão flexível das posições: Apoia várias estratégias de escalagem, adaptáveis às condições do mercado.
  3. Alta personalização: Os usuários podem combinar livremente diferentes condições de saída para criar sistemas de negociação personalizados.
  4. Design modular: módulos funcionais relativamente independentes facilitam a manutenção e otimização.
  5. Suporte completo de backtesting: fornece configurações detalhadas de parâmetros de backtesting e validação de dados históricos.

Riscos estratégicos

  1. Risco de dependência do sinal: a estratégia depende fortemente da qualidade dos sinais do indicador LuxAlgo®.
  2. Risco de adaptabilidade ao ambiente do mercado: o desempenho da estratégia pode variar significativamente em função das diferentes condições do mercado.
  3. Risco de sensibilidade dos parâmetros: múltiplas combinações de condições de saída podem conduzir a saídas prematuras ou oportunidades perdidas.
  4. Risco de liquidez: as questões de liquidez do mercado podem afetar a eficácia da execução de entrada e saída.
  5. Risco de implementação técnica: necessidade de assegurar o funcionamento estável dos indicadores e da estratégia para evitar falhas técnicas.

Orientações para a otimização da estratégia

  1. Optimização do sistema de sinalização:
    • Introduzir mais indicadores técnicos para confirmação de sinal
    • Desenvolver mecanismos adaptativos de ajustamento do limiar de sinal
  2. Melhoria do controlo dos riscos:
    • Adicionar mecanismos de stop loss adaptados à volatilidade
    • Desenvolver sistemas dinâmicos de gestão de posições
  3. Optimização de desempenho:
    • Otimizar a eficiência do cálculo para reduzir o consumo de recursos
    • Melhorar a lógica de processamento de sinal para reduzir a latência
  4. Extensão de funcionalidade:
    • Adicionar mais ferramentas de análise do ambiente de mercado
    • Desenvolver estruturas de otimização de parâmetros mais flexíveis

Resumo

Esta estratégia fornece uma solução abrangente para negociação quantitativa, combinando sinais de alta qualidade do LuxAlgo® com um sistema de gerenciamento de risco de várias camadas. Seu design modular e opções de configuração flexíveis fornecem boa adaptabilidade e escalabilidade. Embora existam alguns riscos inerentes, o desempenho geral da estratégia tem espaço significativo para melhoria através de otimização e refinamento contínuos.


/*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)

Mais.