Tendência de seguir uma estratégia baseada em zonas de atrito de preços

Autora:ChaoZhang, Data: 2023-09-20 16:46:17
Tags:

Resumo

Esta estratégia mede o tempo de permanência do preço em diferentes zonas para identificar áreas de baixo atrito e negocia breakouts nessas zonas.

Estratégia lógica

  1. Calcular o rácio de permanência dos preços em torno dos níveis atuais nos últimos N períodos como atrito dos preços.

  2. Identificar se o preço entra em zonas de baixo atrito com tempo de permanência mínimo recentemente.

  3. Usar MA ponderado rápido para determinar a direção da tendência recente.

  4. Obter lucro quando o preço voltar a entrar em zonas de alta fricção antecipando a reversão da tendência.

  5. Parâmetros personalizáveis, incluindo o retrocesso de atrito, a zona de ruptura, etc.

Vantagens

  1. A fricção de preços evita mercados variados e encontra zonas de surto de tendência.

  2. A MA rápida combina-se com o atrito para determinar a direção.

  3. Visuais intuitivos que mostram os níveis de atrito dos preços.

  4. Parâmetros padrão otimizados para negociação de criptomoedas de alta frequência.

  5. Lógica simples e clara, fácil de compreender e personalizar.

Riscos

  1. A fricção dos preços é incapaz de prever completamente os movimentos futuros.

  2. A MA rápida pode produzir um timing impreciso.

  3. A suavização ineficaz de entradas e saídas de negócios.

  4. A otimização corre o risco de ser excessivamente adequada.

  5. Os parâmetros fixos podem apresentar um desempenho inferior em mercados voláteis.

Reforço

  1. Teste diferentes períodos para calcular o atrito dos preços.

  2. Avaliar os diferentes tipos de AIM para determinar a tendência recente.

  3. Otimizar os parâmetros da zona de ruptura para maior estabilidade.

  4. Adicione stop loss e take profit para gestão de riscos.

  5. Considerar parâmetros dinâmicos para se adaptar aos mercados em evolução.

  6. Testes em mais símbolos e prazos.

Conclusão

Esta estratégia negocia zonas de atrito de preços com alto potencial de ruptura de probabilidade, com prós e contras.


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

//@version=4
//made for 30m chart with BTCUSD or other cryptocurrency
strategy("LUBE",overlay=false )
friction=0.0
barsback=input(500,"bars back to measure friction",step=100)
flevel=input(50,"0-100 friction level to stop trade",step=2)
tlevel=input(-10,"pic lower than 0 to number selected above to initiate trade",step=2)
fl=flevel/100
tl=tlevel/100

for i = 1 to barsback
    friction := if high[i] >= close and low[i] <= close 
        friction+(1+barsback)/(i+barsback)
    else
        friction

range=input(100,"bars back to measure lowest friction",step=10)
lowf = lowest(friction,range)
highf = highest(friction,range)
midf = (lowf*(1-fl)+highf*fl)
lowf2 = (lowf*(1-tl)+highf*tl)
plot(friction)
m=plot(midf[5],color=color.red)
l=plot(lowf2[5],color=color.white)
h=plot(highf[5],color=color.white)
fill(l,h,color.white)

src = input(title="Source", type=input.source, defval=close)

//FIR Filter
_fir(src) =>
    (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10

fir = _fir(src)

trend =  fir > fir[1]? 1:-1

//bgcolor(trend==1?color.lime:color.red,transp=50)

long=friction<lowf2[5] and trend == 1
short=friction<lowf2[5] and trend == -1
end=friction > midf[5]

keeplong=0
keeplong:=long?1:nz(keeplong[1])
keeplong:=short or end?0:keeplong

keepshort=0
keepshort:=short?1:nz(keepshort[1])
keepshort:=long or end?0:keepshort

bgcolor(keeplong==1?color.lime:keepshort==1?color.red:na,transp=50)

leverage=input(2,"leverage",step=.5)
enableshort=input(true,"enable shorts?")

barcount=0
barcount:=nz(barcount[1])+1

contracts=min(max(.000001,(strategy.equity/close)*leverage),50000)
strategy.entry("Long",strategy.long,when=long and barcount>20, qty=contracts)

strategy.close("Long",when=short or end )

strategy.entry("Short",strategy.short,when=short and enableshort==true and barcount>20, qty=contracts)

strategy.close("Short",when=(long or end) and enableshort==true)

alertcondition(keeplong==1 and keeplong[1]==0,"LONG")
alertcondition(keepshort==1 and keepshort[1]==0,"SHORT")
alertcondition((keeplong[1]==1 or keepshort[1]==1) and (keeplong==0 and keepshort==0),"CLOSE TRADE")


Mais.