Estrategia de negociación basada en el estimador Faytterro

El autor:¿ Qué pasa?, Fecha: 2023-09-22 14:12:27
Las etiquetas:

Resumen general

Esta estrategia se opera basándose en las señales comerciales generadas por el Estimador Faytterro. El Estimador Faytterro es un indicador que juzga las tendencias calculando la convergencia y la tasa de divergencia de los precios. Esta estrategia combina las señales comerciales del Estimador Faytterro y algunas condiciones adicionales para generar señales largas y cortas de diferentes tamaños en puntos ideales.

Estrategia lógica

El núcleo de esta estrategia es el Estimador de Faytterro. Su cálculo es: primero calcular la tasa de convergencia y divergencia (CR) de los precios, luego construir una función cuadrática, que puede reflejar la forma de la curva de CR estableciendo diferentes coeficientes. Al observar los puntos de inflexión de la curva cuadrática, juzga el cambio de las tendencias de precios.

Específicamente, la estrategia primero calcula el CR de los precios. Luego construye una matriz dizi de longitud 2*len, y la llena con valores de función cuadrática secuencialmente. Los coeficientes de la función cuadrática reflejan el valor de CR. Después de eso, observando los dos valores en el índice len+1+5 y len+1+4, determina si la función cuadrática tiene un punto de inflexión. Si hay un punto de inflexión, genera señales de compra o venta.

Sobre esta base, la estrategia también establece algunas condiciones adicionales, como establecer la distancia mínima entre los avances de precios para evitar operaciones frecuentes, generar señales de diferentes tamaños, etc. Estas condiciones se utilizan para filtrar algunos puntos de negociación indeseables.

Análisis de ventajas

Esta estrategia tiene las siguientes ventajas:

  1. Utilizando el Estimador Faytterro para juzgar las tendencias, que es sensible a las fluctuaciones de precios y puede capturar los cambios de tendencia temprano.

  2. Construir una función cuadrática para reflejar la forma de la curva CR y encontrar puntos de inflexión directa y eficazmente.

  3. La generación de señales de diferentes tamaños permite el comercio piramidal en puntos ideales, aumentando el potencial de ganancia.

  4. Aumentar el ajuste de la distancia mínima filtra efectivamente las señales y evita el comercio frecuente ineficaz.

  5. Muchos parámetros ajustables se pueden optimizar para diferentes productos comerciales, mejorando la adaptabilidad.

  6. La lógica de la estrategia es clara y fácil de entender, y el código es muy legible, por lo que es fácil de aprender.

Análisis de riesgos

También hay algunos riesgos a tener en cuenta para esta estrategia:

  1. Faytterro Estimator tiene el riesgo de ajustarse a la curva y puede tener un rendimiento inferior en algunos productos comerciales.

  2. Juzgar únicamente sobre la base de los puntos de inflexión de la curva cuadrática puede ser demasiado bruto, lo que lleva a juicios erróneos.

  3. El comercio piramidal frecuente aumenta el costo de las comisiones.

  4. Un gran número de parámetros ajustables aumenta la dificultad de la optimización.

  5. No puede hacer frente eficazmente a los errores de apreciación en los períodos de oscilación de precios.

  6. La falta de un mecanismo de stop loss puede llevar a mayores pérdidas.

Las soluciones correspondientes son:

  1. Optimizar los parámetros de los diferentes productos para mejorar su robustez.

  2. Añadir otros indicadores de filtración para evitar errores de evaluación basados únicamente en los puntos de inflexión.

  3. Establezca el stop loss adecuado para controlar pérdidas individuales.

  4. Utilice métodos de big data para optimizar automáticamente los parámetros.

  5. Añadir la identificación de oscilación para evitar la negociación en períodos oscilantes.

  6. Establezca una lógica de stop loss razonable.

Direcciones de optimización

Las direcciones de optimización incluyen:

  1. Añadir una lógica de stop loss para controlar una sola pérdida, como la pérdida de stop trailing o la pérdida de stop time.

  2. Añadir otros indicadores para evitar juicios erróneos basados únicamente en el estimador de Faytterro, por ejemplo, combinándolos con MACD, KDJ, etc.

  3. Añadir mecanismos de confirmación para evitar ser detenidos por retiros a corto plazo.

  4. Optimizar parámetros ajustables para diferentes productos utilizando algoritmos genéticos, optimización bayesiana, etc.

  5. Identificar los mercados oscilantes utilizando ATR, DMI, etc. y evitar el comercio durante la oscilación.

  6. Optimice la lógica de la pirámide para evitar perseguir tendencias, por ejemplo, ajuste dinámicamente las posiciones de la pirámide en función de la fuerza de la tendencia.

  7. Prueba de parámetros en diferentes plazos para encontrar el plazo óptimo.

Conclusión

Esta estrategia toma decisiones basadas en las señales de trading de Faytterro Estimator, y agrega juicios lógicos y señales de entrada de diferentes tamaños en la parte superior para formar una estrategia de seguimiento de tendencias con características de pirámide. La estrategia es intuitiva y fácil de entender, con fuertes capacidades de captura de tendencias. Pero también tiene problemas como errores de juicio de indicadores, no stop loss, dificultad en la optimización de parámetros. Las optimizaciones futuras incluyen la adición de mecanismos de filtración, lógica de stop loss, optimización de parámetros, etc. para mejorar la robustez y adaptabilidad.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-08-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © faytterro

//@version=5
// strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100)

src=input(hlc3,title="source")
len=input.int(10,title="faytterro estimator lenght", maxval=500)
len2=100
len3=input.float(500,title="minumum enrty-close gap (different direction)")
len4=input.float(500,title="minumum entry-entry gap (same direction)")
cr(x, y) =>
    z = 0.0
    weight = 0.0
    for i = 0 to y-1
        z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2))
    z/(((y+1)/2)*(y+1)/2)
cr= cr(src,2*len-1) 
width=input.int(10, title="strong entry size", minval=1)

dizi = array.new_float(500)
// var line=array.new_line()
//if barstate.islast
for i=0 to len*2
    array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2]))

buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] 
sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len]
bb=buy? hlc3 : na
ss=sell? hlc3 : na 
sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3
ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3

buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3
sell:=  sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3
alertcondition(buy or sell)


if (sbuy)
    strategy.entry("strong buy", strategy.long,width)
if (ssell)
    strategy.entry("strong sell", strategy.short,width)
if (buy)
    strategy.entry("buy", strategy.long)
if (sell)
    strategy.entry("sell", strategy.short)

Más.