Estrategia de la Cruz Dorada y la Cruz de la Muerte

El autor:¿ Qué pasa?, Fecha: 2023-10-11 16:33:18
Las etiquetas:

Resumen general

Esta estrategia utiliza los principios de cruz de oro y cruz de muerte de los promedios móviles simples para implementar posiciones largas y cortas para las acciones.

Estrategia lógica

La estrategia define en primer lugar el marco de tiempo de backtesting y, a continuación, establece los parámetros de cálculo de las dos medias móviles, incluido el tipo de MA y la duración del período.

La función getMAType() calcula los valores de los dos MA. fastMA es el MA de período más corto, y slowMA es el MA de período más largo.

La lógica básica:

  • Cuando fastMA cruza por encima de slowMA, se activa una señal larga.

  • Cuando fastMA cruza por debajo de slowMA, se activa una señal corta.

Finalmente, durante la prueba de retroceso, tome una posición larga cuando vea una señal larga y tome una posición corta cuando vea una señal corta.

Análisis de ventajas

  • Una idea estratégica simple y clara, fácil de entender e implementar.
  • Utiliza principios de cruce de MA ampliamente aplicados, adecuados para la mayoría de los productos de stock.
  • Tipos y parámetros de MA personalizables, alta adaptabilidad.
  • Estructura de estrategia modular, funcionalidad clara, fácil de optimizar.

Análisis de riesgos

  • Los cruces MA tienen un poco de retraso, pueden perder algunas oportunidades comerciales.
  • No puede filtrar eficazmente los mercados de la sierra, propenso a quedar atrapado.
  • La optimización de parámetros no es lo suficientemente completa, requiere experiencia manual.
  • Incapaz de controlar eficazmente el riesgo y las pérdidas por operación.

Optimizaciones posibles frente a los riesgos:

  1. Añadir otros indicadores técnicos para la identificación de tendencias.

  2. Se añadirá el stop loss al control por importe de pérdida por operación.

  3. Agregue indicadores de volumen para evitar los mercados de la sierra.

  4. Construir mecanismos de optimización de parámetros para encontrar conjuntos óptimos de parámetros automáticamente.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Añadir estrategias de stop loss como puntos fijos de stop loss o trailing stop loss para controlar las pérdidas.

  2. Añadir estrategias de dimensionamiento de posiciones como el dimensionamiento de posiciones fijas o dinámicas para controlar los riesgos comerciales.

  3. Añadir filtros combinándolos con otros indicadores técnicos para identificar tendencias y mejorar la tasa de ganancia.

  4. Optimice los parámetros mediante métodos como la búsqueda de cuadrícula y la regresión lineal para encontrar valores óptimos.

  5. Ampliar las estrategias de entrada como el retiro de ruptura, escalar en órdenes para enriquecer las tácticas comerciales.

  6. Agregue indicadores de volumen para evitar los mercados de la sierra.

  7. Expanda los productos a los índices de acciones, divisas, criptomonedas, etc.

Resumen de las actividades

Esta estrategia implementa la selección de acciones largo / corto basada en los principios de cruce de MA. La idea de estrategia es simple y clara, ampliamente utilizada, altamente adaptable y prácticamente valiosa. Pero también tiene algunos problemas de filtración de retraso y frota. Las optimizaciones futuras pueden centrarse en mejorar la stop loss, la optimización de parámetros, la adición de filtros, etc. para hacerlo más ventajoso.


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

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

Más.