En la carga de los recursos... Cargando...

Tendencia intradiaria siguiendo una estrategia cuantitativa basada en el filtrado de condiciones de múltiples indicadores

El autor:¿ Qué pasa?, Fecha: 2023-12-15 15:59:37
Las etiquetas:

img

Resumen general

Esta estrategia combina PSAR para juzgar las tendencias de precios, ADX para juzgar la fuerza de la tendencia, RSI para localizar zonas de sobrecompra y sobreventa, y CMF para juzgar los flujos de fondos para construir una estrategia comercial cuantitativa intradiaria que siga la tendencia a través de los ciclos. Puede localizar rápidamente nuevas direcciones de tendencia cuando los precios rompen la consolidación y forman nuevas tendencias, y continúa siguiendo las tendencias después.

Principios

Las principales reglas de evaluación de esta estrategia son:

  1. Utilice el indicador PSAR para juzgar si los precios están en una tendencia alcista.

  2. Requiere que el RSI esté por encima del punto medio de 50 para filtrar las falsas rupturas que ocurren en zonas de sobreventa.

  3. Requerir que el ADX esté por encima de su línea EMA, lo que indica una señal sostenible en el análisis de tendencias.

  4. Exigir que el CMF sea mayor de 0, juzgando el aumento de los fondos que fluyen.

Las condiciones de venta se producen cuando el PSAR se eleva por encima de los precios, el RSI cae por debajo de 50, el ADX cae por debajo de su EMA y el CMF se vuelve menor que 0.

Esta estrategia tiene en cuenta la dirección de la tendencia de los precios, la fuerza de la tendencia, el estado de sobrecompra/sobreventa y los flujos de fondos al establecer reglas de negociación.

Ventajas

Las principales ventajas de esta estrategia incluyen:

  1. La combinación de múltiples indicadores en el establecimiento de reglas de negociación puede prevenir eficazmente las falsas rupturas y garantizar la calidad de la señal.

  2. La localización rápida de las direcciones de tendencia en ciernes y el seguimiento permite capturar la mayoría de las ganancias de la tendencia.

  3. El establecimiento de condiciones de filtrado de procesos puede controlar los riesgos de manera efectiva y garantizar la eficacia del seguimiento.

  4. Considerar la fuerza de la tendencia ayuda a evitar la congestión del rango de negociación.

Análisis de riesgos

Los principales riesgos de esta estrategia incluyen:

  1. La acumulación de una sola estrategia plantea riesgos de cartera, lo que requiere un tamaño de posición adecuado.

  2. Supervise de cerca los cambios de las condiciones de filtración durante el seguimiento para evitar pérdidas cuando se cancele.

  3. Esta estrategia a medio/largo plazo puede verse afectada a corto plazo por las fluctuaciones y entraña riesgos de stop loss.

Las medidas de gestión de riesgos correspondientes incluyen: la optimización de las reglas de dimensionamiento de las posiciones, el establecimiento de líneas de alerta de riesgo y la ampliación de las distancias de detención, etc.

Direcciones de optimización

Los espacios de optimización incluyen:

  1. Optimización de parámetros a través del aprendizaje automático dado el ajuste subjetivo actual.

  2. Añadir un módulo de dimensionamiento de posiciones que dimensiones dinámicamente en función de los riesgos.

  3. Mejorar los mecanismos de detención, por ejemplo, las detenciones de retraso, las detenciones de tiempo o las detenciones de fuga.

Conclusión

Esta estrategia combinando indicadores demostró ser eficaz en la localización rápida y seguimiento de tendencias nacientes, validando el comercio cuantitativo basado en múltiples dimensiones como tendencias y fondos.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)

Más.