Esta estrategia calcula el tiempo que el precio permanece en diferentes zonas para determinar si el precio entra en una nueva zona de resistencia y genera una señal de negociación de seguimiento de tendencia en la zona de resistencia. Pertenece a la clase de estrategias de seguimiento de tendencia.
Calcula el porcentaje de permanencia de los precios cerca de los niveles actuales durante los últimos N ciclos como la medida de la fricción de los precios.
Para determinar si el precio ha entrado en una zona de baja fricción en la que ha permanecido durante un período de tiempo pasado, como una zona de no resistencia para generar señales.
Utiliza la media móvil de peso rápido para determinar la dirección de la tendencia reciente y negociar la tendencia cuando se produce una ruptura en la zona de no resistencia.
Cuando el precio vuelve a entrar en la zona de alta fricción, el pronóstico de la tendencia se invierte para salir de la parálisis.
Los parámetros de transacción se pueden personalizar, incluyendo el ciclo de juicio de la zona de fricción, la entrada a la zona de ruptura, etc.
Utiliza el grado de fricción de los precios para determinar las zonas de no resistencia y evita las zonas de oscilación.
La línea media rápida sigue las tendencias más recientes, combinadas con la dirección de juicio.
Una interfaz visual intuitiva que muestra las zonas de fricción de los precios.
Los parámetros por defecto se optimizan para el comercio de alta frecuencia de criptomonedas.
Las reglas de la política son simples, claras, fáciles de entender y modificar.
La fricción de precios no puede predecir el movimiento de los precios.
El tiempo de medición rápida puede no ser exacto.
No se puede entrar y salir del mercado de manera eficiente.
Puede haber un riesgo de sobreajuste en la optimización.
Los parámetros fijos pueden no ser efectivos cuando el mercado cambia drásticamente.
Prueba de los diferentes parámetros del ciclo para calcular la fricción de precios.
Evaluar las tendencias recientes de los diferentes tipos de medias.
Optimización de los parámetros para la ruptura de la zona de resistencia y mejora de la estabilidad de la estrategia
Añadir estrategias de stop loss y gestión del riesgo de la operación.
Considere la adopción de parámetros dinámicos para adaptarse a los cambios en el mercado.
Se realizan revisiones en más variedades y ciclos.
Esta estrategia tiene ciertas ventajas para operar a través de la fricción de precios para encontrar áreas de ruptura de tendencias de alta probabilidad. Pero también hay limitaciones en los parámetros fijos. A través de la optimización de parámetros dinámicos, el aumento de la gestión de riesgos y otros mecanismos, la estrategia puede ser más estable y eficiente.
/*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")