Estrategia de negociación cuantitativa de doble factor

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

img

Resumen general

Esta estrategia combina los 123 factores de inversión y los factores de oscilador de números primos para implementar una negociación cuantitativa impulsada por factores duales.

Principios

La primera parte es la estrategia de inversión 123. Utiliza la característica de la inversión de precios durante 2 días para determinar los puntos de entrada y salida. Cuando los precios aumentan continuamente durante 2 días y el estocástico lento está por debajo de 50, se considera sobreventa, produciendo una señal de compra. Cuando los precios caen continuamente durante 2 días y el estocástico rápido está por encima de 50, se considera un rebote sobrecomprado, produciendo una señal de venta.

La segunda parte es la estrategia del oscilador de números primos. Este indicador calcula el número primos más cercano por encima y por debajo del precio actual en un rango especificado, y produce la diferencia del precio actual. Un valor positivo significa que el precio actual está cerca del techo de números primos, mientras que un valor negativo significa que está cerca del piso de números primos. La dirección de la tendencia se juzga por el valor de la diferencia, que se combina con 123 señales de inversión para generar la señal de negociación final.

La regla de fusión de señales es: las señales comerciales reales se generan solo cuando las dos subestrategias dan señales en la misma dirección, de lo contrario no se abre ninguna nueva posición cuando las señales entran en conflicto.

Ventajas

Al combinar factores duales, esta estrategia tiene en cuenta tanto los efectos de reversión a corto plazo como las características de tendencia a largo plazo para hacer juicios de mercado de múltiples ángulos, mejorando la resistencia al riesgo de la estrategia.

En comparación con una estrategia de impulso único, esta estrategia puede detener las pérdidas o revertir la posición de forma oportuna durante caídas repentinas de precios, controlando eficazmente los riesgos intradiarios mediante el uso del factor de reversión.

En comparación con una única estrategia de reversión, la introducción del oscilador de números primos para la dirección de la tendencia evita el exceso de negociación de operaciones de reversión frecuentes.

Los riesgos

El riesgo más grande son los conflictos de señales entre los dos factores. Si la reversión 123 muestra signos de sobrecompra/sobreventa y produce señales de reversión, mientras que el oscilador de números primos muestra que todavía está en tendencia, tomar directamente operaciones de reversión podría conducir a pérdidas.

Para controlar este riesgo, se agrega una lógica adicional: las operaciones reales se generan solo cuando las dos señales se alinean en dirección.

Mejoras

  1. Optimizar los parámetros estocásticos para encontrar mejores conjuntos de parámetros de inversión para productos específicos

  2. Optimizar el porcentaje de tolerancia del oscilador de números primos para reducir las operaciones de ruido

  3. Añadir estrategias de stop loss para limitar la expansión de pérdidas unidireccionales

  4. Añadir módulo de dimensionamiento de posiciones para ajustar posiciones para diferentes entornos de mercado

  5. Añadir modelos de aprendizaje automático para juzgar la credibilidad de la señal entre los dos factores, reduciendo los conflictos

Conclusión

Esta estrategia combina con éxito factores de reversión a corto plazo y factores de tendencia a largo plazo para lograr una negociación cuantitativa de bajo riesgo. Al utilizar de manera efectiva factores duales para filtrar el ruido y establecer una lógica adicional para controlar los riesgos, es una estrategia práctica de ganancias constantes. Los parámetros y funciones se optimizarán continuamente para adaptarse a las características reales del mercado.


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 28/04/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Determining market trends has become a science even though a high number or people 
// still believe it’s a gambling game. Mathematicians, technicians, brokers and investors 
// have worked together in developing quite several indicators to help them better understand 
// and forecast market movements.
//
// Developed by Modulus Financial Engineering Inc., the prime number oscillator indicates the 
// nearest prime number, be it at the top or the bottom of the series, and outlines the 
// difference between that prime number and the respective series.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

PrimeNumberOscillator(price, percent) =>
    res = 0.0
    res1 = 0.0
    res2 = 0.0
    for j = price to price + (price * percent / 100)
        res1 := j
	    for i = 2 to sqrt(price)
        	res1 := iff(j % i == 0 , 0, j)
            if res1 == 0 
                break
		if res1 > 0 
		    break
    for j = price to price - (price * percent / 100)
        res2 := j
	    for i = 2 to sqrt(price)
        	res2 := iff(j % i == 0 , 0, j)
            if res2 == 0 
                break
		if res2 > 0 
		    break
    res := iff(res1 - price < price - res2,  res1 - price, res2 - price)
    res := iff(res == 0, res[1], res)
    res
    
PNO(percent) =>
    pos = 0.0
    xPNO = PrimeNumberOscillator(close, percent)
    pos:= iff(xPNO > 0, 1,
           iff(xPNO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Prime Number Oscillator", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Prime Number Oscillator ----")
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPNO = PNO(percent)
pos = iff(posReversal123 == 1 and posPNO == 1 , 1,
	   iff(posReversal123 == -1 and posPNO == -1, -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)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Más.