Estratégia de rastreamento de números redondos

Autora:ChaoZhang, Data: 21 de Fevereiro de 2023
Tags:

Resumo

Esta estratégia baseia-se na ideia de que os níveis de stop loss e take profit são frequentemente colocados em números redondos ou níveis de preço chave, que atuam como suporte e resistência.

Estratégia lógica

As principais regras desta estratégia são:

  1. Quando o preço de fechamento estiver acima de um nível de preço chave, e não tiver tocado esse nível nos últimos 10 bares, vá longo.

  2. Use um trailing stop com 20 pontos de passo para seguir o movimento após o preço quebrar o nível chave.

  3. Os sinais de venda são o oposto - quando o fechamento está abaixo do nível chave e não o tocou nos últimos 10 bares, vá curto.

  4. Os níveis-chave são:

    • Converter preço de fechamento para inteiro
    • Calcular o restante da divisão por 50 (configurável)
    • Se o restante for > 25, utilizar o próximo número inteiro 50 como nível chave
    • Caso contrário, mantenha o nível da chave inalterado

A estratégia é baseada na psicologia de que os números redondos e os níveis-chave são muitas vezes campos de batalha para touros e ursos, e, portanto, fornecem sinais comerciais eficazes.

Vantagens

As vantagens desta estratégia são as seguintes:

  1. Sinais comerciais simples e intuitivos e regras de entrada.
  2. Utiliza padrão universal de preços-chave em vez de regras específicas do instrumento.
  3. O trail stop bloqueia os lucros enquanto anda na tendência.

Riscos

Os riscos a considerar são:

  1. Os níveis-chave nem sempre podem agir como um forte suporte/resistência.
  2. O lookback fixo de 10 bar pode não ser adequado para diferentes instrumentos.
  3. A distância de travagem não deve ser demasiado larga, caso contrário pode parar prematuramente.

Possíveis soluções:

  1. Adicionar mais filtros para avaliar a resistência dos níveis-chave, por exemplo, volume.
  2. Otimizar parâmetros como o período de observação para diferentes instrumentos.
  3. Otimizar o mecanismo de tracção para ser mais adaptável.

Oportunidades de melhoria

A estratégia pode ser melhorada:

  1. Adicionar mais condições para confirmar a importância dos níveis-chave e evitar falsificações.

  2. Otimizar parâmetros como a gama de níveis chave e o período de observação com base nas características do instrumento.

  3. Melhoria do mecanismo de parada de tração, por exemplo, utilizando trilhas dinâmicas em vez de pontos fixos.

  4. Incorporar aprendizagem de máquina para avaliar a força dos níveis-chave utilizando dados históricos.

  5. Expansão para sistema multi-tempo com maior tendência TF e menor rastreamento TF.

Conclusão

Esta estratégia oferece sinais simples e intuitivos com base em níveis de preços e convenções de negociação. Tem oportunidades abundantes, mas precisa de otimização adicional para lidar com falsificações. A regulação de parâmetros e o aprendizado de máquina podem melhorar a robustez.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Strategy based on the idea that stop loss and take profit are often placed at full price levels or round numbers, whcih acts as resistance and supports levels
//Buy Rules:
//Actual price (close) is above round number.
//Round number level was not touched in previous ten bars (arbitrary value).
//Place a buy and follow the order with a trail step because price can bounce at round number (support) or can go through it.
//Sell Rules are the same of buy rules but inverted.
//
//Need improvement on conditions' logic and round numbers definitions


strategy("dP magnet", overlay=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD)

//Round Levels credit to RKchartest

roundLevel50 = input(500, 'Round Level 1, pips')
//roundLevel100 = input(1000, 'Round Level 2, pips')
deviation = input(1000, 'Max distance, pips', minval=0) 

rDelimeter = 1/syminfo.mintick

intRoundLevel = close[1] * rDelimeter

intRemainder = intRoundLevel % roundLevel50 
toRound = (intRemainder >= roundLevel50/2) ? roundLevel50 : 0
roundLevel = (intRoundLevel - intRemainder + toRound) / rDelimeter
plot(roundLevel, title='Round Level 1', color=black, style=line, transp=0, linewidth=1, trackprice=false)

//intRemainder2 = intRoundLevel % roundLevel100
//toRound2 = (intRemainder2 >= roundLevel100/2) ? roundLevel100 : 0
//roundLevel2 = (intRoundLevel - intRemainder2 + toRound2) / rDelimeter
//plot((abs(roundLevel2 - close) * rDelimeter < deviation) ? roundLevel2 : na, title='Round Level 2', color=black, style=circles, transp=0, linewidth=1, trackprice=true)

// end

//Start of strategy

distToFullNumber=(close-roundLevel) //can be positive or negative number

distPips=input(100,'Distance in pips to full level',minval=10) //user defined: this distance defines when to open an order at market price


TrailS=input(20,'Trail Step points',minval=10) //trail step that follows the order

longCondition = iff(distToFullNumber>0 and abs(distToFullNumber)<=distPips and lowest(low,10)>roundLevel,true,false)

if (longCondition)
    strategy.entry("LongMagnet", strategy.long)
    strategy.exit("ExitMagnet","LongMagnet",trail_points=TrailS)

shortCondition = iff(distToFullNumber<0 and abs(distToFullNumber)<=distPips and highest(high,10)<roundLevel,true,false)

if (shortCondition)
    strategy.entry("ShortMagnet", strategy.short)
    strategy.exit("Exit_Magnet","ShortMagnet",trail_points=TrailS)
    

Mais.