Estrategia de retroevaluación basada en el indicador de transformación de Fisher

El autor:¿ Qué pasa?, Fecha: 2024-01-25 14:22:36
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de backtesting basada en el indicador de transformación de Fisher. La fórmula de transformación de Fisher puede convertir los datos de precios en una distribución normal para identificar los extremos de precios y los puntos de inflexión.

Principio de la estrategia

  1. Calcule el indicador de la transformación de Fisher:
    • nValue1 es 0,33×(HL2 estandarizado) + 0,67×nValue1 del período anterior
    • nValue2 limita nValue1 entre -0,99 y 0,99
    • nFish es la transformación logarítmica de nValue2
  2. Determinar si nFish es positivo o negativo para determinar la dirección de la posición
  3. Si se establece la posición de la señal de posición, si se establece la negociación inversa, tomar la posición opuesta
  4. Señal de entrada: possig=1 para largo, possig=-1 para corto

Análisis de ventajas

  1. El indicador de transformación de Fisher puede identificar los extremos de precios y los puntos de inflexión para determinar con precisión las tendencias
  2. El filtrado de las fluctuaciones mediante la combinación de indicadores HL2 aumenta la tasa de ganancia
  3. La negociación inversa puede ajustarse a diferentes entornos de mercado
  4. La negociación automatizada sin juicio manual reduce los costos de negociación

Análisis de riesgos

  1. El indicador de transformación de Fisher tiene retraso y puede perder cambios de precios a corto plazo
  2. El riesgo de pérdida de liquidación en las tendencias volátiles es elevado
  3. Las configuraciones incorrectas de operaciones inversas pueden dar lugar a operaciones sistemáticamente erróneas
  4. En ausencia de verificación del ciclo cruzado, existe cierto riesgo de falso positivo

Soluciones de riesgos:

  1. Ajustar los parámetros adecuadamente para acortar los retrasos
  2. Aumentar el rango de pérdida de parada para controlar la pérdida de una sola transacción
  3. Optimizar las operaciones inversas combinadas con otros indicadores para el filtrado
  4. Aumentar los mecanismos múltiples de verificación de las tendencias, los niveles de precios, los ciclos, etc.

Direcciones para la optimización de la estrategia

  1. Aumentar los indicadores cíclicos para mejorar la precisión de los juicios sobre la inversión de precios
  2. Ajuste dinámico del rango de pérdida de parada
  3. Optimizar los parámetros para maximizar la tasa de ganancia y el factor de ganancia

Las optimizaciones anteriores pueden mejorar aún más la tasa de ganancia de la estrategia, bloquear las ganancias, controlar los riesgos y obtener resultados comerciales más estables y eficientes.

Resumen de las actividades


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 22/12/2016
// 	Market prices do not have a Gaussian probability density function
// 	as many traders think. Their probability curve is not bell-shaped.
// 	But trader can create a nearly Gaussian PDF for prices by normalizing
// 	them or creating a normalized indicator such as the relative strength
// 	index and applying the Fisher transform. Such a transformed output 
// 	creates the peak swings as relatively rare events.
// 	Fisher transform formula is: y = 0.5 * ln ((1+x)/(1-x))
// 	The sharp turning points of these peak swings clearly and unambiguously
// 	identify price reversals in a timely manner. 
//
//  For signal used zero. 
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Fisher Transform Indicator by Ehlers Backtest", shorttitle="Fisher Transform Indicator by Ehlers")
Length = input(10, minval=1)
reverse = input(false, title="Trade reverse")
hline(1, color=white)
xHL2 = hl2
xMaxH = highest(xHL2, Length)
xMinL = lowest(xHL2,Length)
nValue1 = 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1])
nValue2 =   iff(nValue1 > .99,  .999,
	         iff(nValue1 < -.99, -.999, nValue1))
nFish = 0.5 * log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1])
pos = iff(nFish > 0, 1,
	   iff(nFish < 0, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
// barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nFish, color=green, title="Fisher")
plot(nz(nFish[1]), color=red, title="Trigger")

Más.