Estrategia combinada de cruce de medias móviles dobles e indicador Williams


Fecha de creación: 2024-02-01 15:04:51 Última modificación: 2024-02-01 15:04:51
Copiar: 0 Número de Visitas: 520
1
Seguir
1617
Seguidores

Estrategia combinada de cruce de medias móviles dobles e indicador Williams

Descripción general

La estrategia es una combinación de dos estrategias diferentes, la primera estrategia se basa en el precio de las acciones para formar una señal a través de una doble media móvil; la segunda estrategia se basa en el indicador de oscilación mágica en el índice de Williams. La señal final toma la intersección de las dos señales de la estrategia para formar la señal de negociación final.

Principio de estrategia

El principio de la primera estrategia es generar una señal de compra cuando el precio de cierre de ayer es superior al precio de cierre del día anterior y el indicador aleatorio de la línea K rápida del día 9 es inferior al indicador aleatorio de la línea D lenta del día 3; generar una señal de venta cuando el precio de cierre de ayer es inferior al precio de cierre del día anterior y el indicador aleatorio de la línea K rápida del día 9 es superior al indicador aleatorio de la línea D lenta del día 3.

El segundo principio de la estrategia es calcular la diferencia entre los movimientos de los precios en los días 5 y 34 y calcular la media móvil de esta diferencia. Se trata de una señal de compra cuando el valor actual es superior al del ciclo anterior y de una señal de venta cuando el valor actual es inferior al del ciclo anterior.

La combinación de las dos estrategias, la señal final toma la intersección de las dos señales de estrategia. Cuando las dos estrategias emiten al mismo tiempo la señal de compra, hacer más; cuando las dos estrategias emiten al mismo tiempo la señal de venta, hacer vacío.

Análisis de las ventajas

Esta estrategia combina las ventajas de las estrategias de las dos medias móviles y la estrategia del índice de Williams. La estrategia de las dos medias móviles puede capturar tendencias de línea media y larga; la estrategia del índice de Williams puede capturar oportunidades de negociación de línea corta. La combinación de las dos estrategias permite obtener ganancias al mismo tiempo y prevenir falsos breaks.

Además, la estrategia adopta una configuración de entrada de varios parámetros que se pueden optimizar para diferentes acciones y situaciones del mercado, adaptándose a un entorno de mercado más amplio.

Análisis de riesgos

El mayor riesgo de esta estrategia es que las dos señales de estrategia pueden no coincidir. Cuando una estrategia emite una señal de compra y la otra emite una señal de venta, la estrategia no puede generar una señal efectiva y puede perderse una oportunidad de negociación.

Además, la estrategia contiene varios parámetros, lo que dificulta la optimización de los parámetros. Una combinación inadecuada de parámetros puede causar un mal rendimiento de la estrategia.

Para reducir el riesgo, se puede considerar la adopción de sólo una de las señales de la estrategia; o la investigación para determinar el rango de parámetros adecuados para diferentes entornos de mercado.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Evaluar la coherencia entre dos señales estratégicas, estudiar su grado de coincidencia bajo diferentes parámetros y determinar la combinación óptima de parámetros.

  2. Probar el funcionamiento de la estrategia en diferentes variedades y ciclos para encontrar el mejor alcance de aplicación.

  3. Se puede considerar el cambio de la estrategia de doble media móvil a otros indicadores, como el indicador KDJ, para enriquecer la combinación de estrategias.

  4. Aumentar los mecanismos de detención de pérdidas para controlar el riesgo, por ejemplo, establecer un máximo de retención de pérdidas.

Resumir

La estrategia combina la estrategia de las dos medias móviles y la estrategia del indicador de Williams, a la vez que contempla el seguimiento de tendencias y la captura de señales de línea corta. La optimización de los parámetros permite adaptarse a un entorno de mercado más amplio.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/2019
// 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
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//  You can make changes in the property for set calculating strategy MA, EMA, WMA
//
// 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

BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA) =>
    pos = 0
    xSMA1_hl2 = sma(hl2, nLengthFast)
    xSMA2_hl2 = sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = wma(nRes, nLengthWMA)
    xResMA = sma(nRes, nLengthMA)
    xResEMA = ema(nRes, nLengthEMA)
    xSignalSeries = iff(bShowWMA, xResWMA,
                     iff(bShowMA, xResMA, 
                      iff(bShowEMA, xResEMA, na)))
    cClr = nRes > nRes[1] ? blue : red
    pos := iff(xSignalSeries[2] < 0 and xSignalSeries[1] > 0, 1,
	         iff(xSignalSeries[2] > 0 and xSignalSeries[1] < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams. Awesome Oscillator (AC) with Signal Line", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
nLengthMA = input(15, minval=1, title="MA")
nLengthEMA = input(15, minval=1, title="EMA")
nLengthWMA = input(15, minval=1, title="WMA")
bShowWMA = input(type=bool, defval=true, title="Show and trading WMA")
bShowMA = input(type=bool, defval=false, title="Show and trading MA")
bShowEMA = input(type=bool, defval=false, title="Show and trading EMA")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAC = BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA)
pos = iff(posReversal123 == 1 and posBillWilliamsAC == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAC == -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 )