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.
As principais regras desta estratégia são:
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.
Use um trailing stop com 20 pontos de passo para seguir o movimento após o preço quebrar o nível chave.
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.
Os níveis-chave são:
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.
As vantagens desta estratégia são as seguintes:
Os riscos a considerar são:
Possíveis soluções:
A estratégia pode ser melhorada:
Adicionar mais condições para confirmar a importância dos níveis-chave e evitar falsificações.
Otimizar parâmetros como a gama de níveis chave e o período de observação com base nas características do instrumento.
Melhoria do mecanismo de parada de tração, por exemplo, utilizando trilhas dinâmicas em vez de pontos fixos.
Incorporar aprendizagem de máquina para avaliar a força dos níveis-chave utilizando dados históricos.
Expansão para sistema multi-tempo com maior tendência TF e menor rastreamento TF.
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)