Estratégia de compra ATR com parâmetros de perda baseados no tempo

Autora:ChaoZhang, Data: 2024-02-28 17:36:50
Tags:

img

Resumo

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.

Princípio da estratégia

A estratégia consiste nas seguintes partes principais:

  1. 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.

  2. Calcular o indicador ATR: calcular o valor ATR atrValue com base no parâmetro atrLength.

  3. Definir condições de compra: gerar sinais de compra quando a combinação de horas e minutos é igual a timeTrade.

  4. Emissão de ordem de compra: compra longa quando a condição de compra for cumprida e registo do preço de compra.

  5. Definir ponto de stop loss: o ponto de stop loss é definido no preço de compra mais o valor ATR.

  6. Traçar: traçar a linha de nível de stop loss.

Análise das vantagens

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.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. A fixação inadequada do tempo de compra pode perder melhores oportunidades de compra ou comprar em mercados indesejáveis.

  2. 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.

  3. Incapaz de acompanhar de forma eficaz as tendências a longo prazo, mais adequado para operações a curto prazo.

  4. Os factores de análise fundamentais não são tidos em conta.

Orientações de otimização

Esta estratégia pode ser melhorada nos seguintes aspectos:

  1. Determinar um tempo de aquisição mais científico combinando modelos multifatores.

  2. Otimizar as definições dos parâmetros ATR através da combinação de modelos de volatilidade.

  3. Aumentar o mecanismo de acompanhamento da tendência para se adaptar a períodos de retenção mais longos.

  4. Incorporar uma análise fundamental para avaliar a razoabilidade do calendário de compra.

Conclusão

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)")


Mais.