Estrategia cuantitativa de oscilación de precios con doble confianza

El autor:¿ Qué pasa?, fecha: 2024-02-18 10:10:16
Las etiquetas:

img

Resumen general

La idea principal de esta estrategia es combinar la estrategia de reversión 123 y el indicador del oscilador de precios absoluto para obtener una señal integrada. Específicamente, si ambas subestrategias emiten señales largas, la señal de estrategia final es 1 (larga); si ambas emiten señales cortas, la señal final es -1 (corta); si las señales son inconsistentes, la señal final es 0 (sin operación).

Principios

En primer lugar, el principio de la estrategia 123 Reversal es: si el precio de cierre es inferior al precio de cierre del día anterior durante dos días consecutivos, y el Oscilador Estocástico está por debajo de la línea de sobrecompra, vaya largo; si el precio de cierre es superior al precio de cierre del día anterior durante dos días consecutivos, y el Oscilador Estocástico está por encima de la línea de sobreventa, vaya corto.

En segundo lugar, el oscilador de precios absoluto muestra la diferencia entre dos promedios móviles exponenciales.

Por último, esta estrategia combina las señales de las dos subestrategias, es decir, seguir la señal si son coherentes; de lo contrario, no operar.

Análisis de ventajas

Esta estrategia considera ampliamente las señales de reversión a corto plazo y las señales de tendencia a mediano y largo plazo, que pueden identificar con eficacia los puntos de inflexión.

Además, esta estrategia emplea múltiples indicadores técnicos para juzgar el mercado de manera integral en lugar de depender de uno solo, lo que evita juicios erróneos debido a la falla de un indicador.

Análisis de riesgos

El mayor riesgo es cuando el 123 Reversal y APO emiten señales contradictorias. En tales casos, el operador necesita juzgar sobre la base de la experiencia qué señal es más confiable.

Además, los cambios drásticos en el mercado pueden invalidar las señales de ambas subestrategias simultáneamente.

Optimización

Posibles direcciones de optimización:

  1. Optimizar los parámetros de la subestrategia para señales más fiables, por ejemplo, los períodos de media móvil.

  2. Añadir otros indicadores auxiliares para formar un mecanismo de votación.

  3. Agregue estrategias de stop loss. El stop loss oportuno en movimientos de precios adversos evita nuevas pérdidas.

  4. Optimizar los niveles de entrada y stop loss basados en pruebas de retroceso históricas.

Conclusión

Esta estrategia combina múltiples indicadores técnicos para juzgar el mercado, evitando los riesgos de dependencia de un solo indicador hasta cierto punto y mejorando la precisión de la señal. También hay espacio para la optimización basada en los requisitos de los inversores.


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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 22/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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.
//
// Secon strategy
// The Absolute Price Oscillator displays the difference between two exponential 
// moving averages of a security's price and is expressed as an absolute value.
// How this indicator works
//    APO crossing above zero is considered bullish, while crossing below zero is bearish.
//    A positive indicator value indicates an upward movement, while negative readings 
//      signal a downward trend.
//    Divergences form when a new high or low in price is not confirmed by the Absolute Price 
//      Oscillator (APO). A bullish divergence forms when price make a lower low, but the APO 
//      forms a higher low. This indicates less downward momentum that could foreshadow a bullish 
//      reversal. A bearish divergence forms when price makes a higher high, but the APO forms a 
//      lower high. This shows less upward momentum that could foreshadow a bearish reversal.
//
// 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

AbsolutePriceOscillator(LengthShortEMA, LengthLongEMA) =>
    xPrice = close
    xShortEMA = ema(xPrice, LengthShortEMA)
    xLongEMA = ema(xPrice, LengthLongEMA)
    xAPO = xShortEMA - xLongEMA
    pos = 0.0    
    pos := iff(xAPO > 0, 1,
           iff(xAPO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Absolute Price Oscillator (APO)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
LengthShortEMA = input(10, minval=1)
LengthLongEMA = input(20, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posAbsolutePriceOscillator = AbsolutePriceOscillator(LengthShortEMA, LengthLongEMA)
pos = iff(posReversal123 == 1 and posAbsolutePriceOscillator == 1 , 1,
	   iff(posReversal123 == -1 and posAbsolutePriceOscillator == -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 ? red: possig == 1 ? green : blue ) 

Más.