A estratégia baseia-se na ideia de que os pontos de parada e parada são frequentemente estabelecidos em preços inteiros ou níveis de preços críticos, que muitas vezes servem como pontos de suporte e resistência. A estratégia identifica esses níveis de preços críticos e executa operações de compra ou venda quando os preços se aproximam.
A estratégia inclui principalmente as seguintes regras:
Quando o preço de fechamento está acima do nível de preço-chave e não foi tocado nos últimos 10 linhas K, a operação de compra é realizada.
O rastreamento de escalada é então usado para rastrear a movimentação dos preços que ultrapassam o preço-chave. A escalada é de 20 passos.
A operação de venda é o oposto da compra, quando o preço de fechamento está abaixo do nível de preço crítico e não foi tocado no último 10 K linhas, a operação de venda.
Os métodos para identificar os níveis de preços críticos são:
A estratégia baseia-se no conceito de psicologia de preços, que considera que os preços inteiros ou os níveis críticos costumam ser posições importantes disputadas por partes que se encontram em um espaço maior, o que produz efeitos como sinal de negociação. Ao mesmo tempo, o rastreamento de escalação pode acompanhar a tendência após a ruptura de preços.
A estratégia tem as seguintes vantagens:
A estratégia também apresenta os seguintes riscos:
Resolução:
A estratégia pode ser otimizada em:
Adicionar mais critérios para determinar a importância dos pontos-chave de preços, evitando o risco de falsas rupturas. Indicadores como, por exemplo, o volume de transação.
Parâmetros de otimização, especialmente para determinar o comprimento de passo de uma região de preço-chave, o ciclo da linha K e outros. Para que seja mais adequado às características de diferentes variedades.
Otimização dos mecanismos de tracking stop, como o uso de stop tracking dinâmico em vez de stop climbing fixo.
Aumentar os algoritmos de aprendizagem de máquina para avaliar a força e a fraqueza das áreas de preço-chave usando dados históricos para melhorar a qualidade do sinal.
Estendendo a estratégia para períodos de tempo, ao mesmo tempo em que julga tendências em períodos de tempo mais elevados e os acompanha em períodos de tempo mais baixos.
A estratégia é baseada em um pensamento simples e intuitivo sobre os pontos-chave do preço, usando hábitos de negociação generalizados para formar sinais de negociação. As oportunidades de estratégia são abundantes, mas precisam ser otimizadas ainda mais para lidar com falsas brechas.
/*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)