A ideia central desta estratégia é combinar indicadores de tempo e ATR para definir o tempo de compra e os pontos de stop loss. A estratégia emite um sinal de compra cronometrado no momento especificado, usa o preço de fechamento naquele momento como o preço de compra e, em seguida, define o ponto de stop loss no preço de compra mais o valor ATR. Isso pode filtrar alguns tempos de compra inadequados enquanto usa ATR para controlar riscos.
A estratégia consiste nas seguintes partes principais:
Parâmetros de entrada: incluindo o parâmetro timeTrade e ATR atrLength. timeTrade determina o tempo de compra e atrLength determina o parâmetro de período do ATR.
Calcular o indicador ATR: calcular o valor ATR atrValue com base no parâmetro atrLength.
Definir condições de compra: gerar sinais de compra quando a combinação de horas e minutos é igual a timeTrade.
Emissão de ordem de compra: compra longa quando a condição de compra for cumprida e registo do preço de compra.
Definir ponto de stop loss: o ponto de stop loss é definido no preço de compra mais o valor ATR.
Traçar: traçar a linha de nível de stop loss.
A maior vantagem desta estratégia é a dupla confirmação do tempo de compra e ponto de stop loss por tempo e indicador ATR. Isso evita seguir cegamente o mercado para comprar e controla efetivamente os riscos. Em segundo lugar, o ponto de stop loss definido pela ATR está mudando dinamicamente, o que pode definir uma faixa de stop loss razoável de acordo com a flutuação do mercado. Finalmente, a lógica da estratégia é simples e fácil de entender e rastrear.
Os principais riscos desta estratégia incluem:
A fixação inadequada do tempo de compra pode perder melhores oportunidades de compra ou comprar em mercados indesejáveis.
A configuração inadequada dos parâmetros do ATR afetará o desempenho da estratégia se o ponto de stop loss for demasiado grande ou demasiado pequeno.
Incapaz de acompanhar de forma eficaz as tendências a longo prazo, mais adequado para operações a curto prazo.
Os factores de análise fundamentais não são tidos em conta.
Esta estratégia pode ser melhorada nos seguintes aspectos:
Determinar um tempo de aquisição mais científico combinando modelos multifatores.
Otimizar as definições dos parâmetros ATR através da combinação de modelos de volatilidade.
Aumentar o mecanismo de acompanhamento da tendência para se adaptar a períodos de retenção mais longos.
Incorporar uma análise fundamental para avaliar a razoabilidade do calendário de compra.
Em geral, esta é uma estratégia de negociação intradiária de alta frequência relativamente simples e intuitiva. A ideia principal é usar a confirmação dupla do tempo e os indicadores ATR para determinar o tempo de compra e os pontos de stop loss. As vantagens são riscos controlados e relativamente fáceis de implementar. Mas também há problemas como seleção insuficiente do tempo de compra e otimização de parâmetros inadequada. As otimizações futuras podem ser feitas a partir da introdução de mais fatores, otimização de parâmetros dinâmicos, rastreamento de tendências etc.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Time-based Strategy with ATR Take Profit", overlay=true) // Initialize take profit levels var float takeProfitLevel = na var float takeProfitLevelForSell = na var float buyprice = na var float sellprice = na // Input for the time when the trade should be executed tradeTime = input(0700, "Trade Execution Time (HHMM)", "Specify the time in HHMM format", group="Time Settings") // Calculate ATR for the last 5 minutes atrLength = input(14, "ATR Length", "Specify ATR length", group="ATR Settings") atrValue = request.security(syminfo.tickerid, "5", ta.atr(atrLength)) // Define conditions for buy and sell buyCondition = hour * 100 + minute == tradeTime // and strategy.position_size == 0 sellCondition = hour * 100 + minute == tradeTime // and strategy.position_size > 0 // Execute Buy and Sell orders if (buyCondition) strategy.entry("Buy", strategy.long) buyprice := close takeProfitLevel := buyprice + atrValue strategy.exit("Take Profit BUY", from_entry="Buy", limit =takeProfitLevel) // if (sellCondition) // strategy.entry("Sell", strategy.short) // sellprice := close // takeProfitLevelForSell := sellprice -atrValue // strategy.exit("Take Profit Sell", from_entry="Sell", limit=takeProfitLevelForSell) // Plot horizontal lines for take profit levels plot(takeProfitLevel, color=color.green, title="Take Profit Level (Buy)") plot(takeProfitLevelForSell, color=color.red, title="Take Profit Level (Sell)")