La estrategia utiliza el principio de la cruz dorada y la horca muerta del promedio móvil simple para realizar posiciones largas y cortas en las acciones. Haga más cuando la línea rápida rompa la línea lenta desde la parte inferior; Haga más cuando la línea rápida rompa la línea lenta desde la parte superior.
La estrategia define primero el tiempo de inicio y finalización de la retrotracción y luego establece los parámetros de cálculo de las dos medias, que incluyen el tipo de media y la longitud del período.
Calcula el valor de las dos medias con la función getMAType (). Donde fastMA es el promedio de corto período y slowMA es el promedio de largo período.
La lógica central de la estrategia es:
Cuando el MA rápido está sobre el MA lento, se emite una señal de largo;
Cuando el MA rápido atraviesa el MA lento, emite una señal de vacío, short.
Finalmente, durante el período de retracción, se adopta una estrategia de posición larga en caso de señales de más; se adopta una estrategia de posición vacía en caso de señales de menos.
En cuanto a los riesgos, se puede optimizar aún más:
Añadir filtros de otros indicadores técnicos para identificar tendencias.
Aumentar las estrategias de detención de pérdidas y controlar las pérdidas individuales.
Introducir indicadores de energía, etc., para evitar el arbitraje en mercados convulsionados.
Establecer mecanismos de optimización de parámetros para buscar automáticamente la combinación de parámetros óptima.
La estrategia puede ser optimizada en los siguientes aspectos:
Aumentar las estrategias de detención de pérdidas, como establecer puntos de detención fijos o rastrear las paradas y controlar las pérdidas.
Aumentar las estrategias de gestión de posiciones, tales como posiciones fijas, posiciones dinámicas, y controlar el riesgo de las transacciones.
Aumentar los filtros, combinados con otros indicadores técnicos para identificar tendencias y mejorar la tasa de éxito.
Optimización de la configuración de los parámetros, búsqueda de los parámetros óptimos a través de búsquedas en la red, regresión lineal, etc.
Expandir las estrategias de venta libre, como la inversión de ruptura, la creación de posiciones por lotes, y otras estrategias de comercio enriquecedoras.
Aumentar los indicadores de energía para evitar ser atrapados en situaciones de temblores.
Enriquecer la variedad de transacciones, extendiéndose a más variedades como futuros de índices bursátiles, divisas y monedas digitales.
Esta estrategia se basa en el principio cruzado de la media móvil para lograr la selección de posiciones largas y cortas de las acciones. La idea de la estrategia es simple, clara, de uso amplio, adaptable y de cierto valor práctico. Pero la estrategia también tiene un cierto retraso y no puede filtrar eficazmente las oscilaciones. En el futuro, se puede optimizar mediante la mejora del stop loss, la optimización de los parámetros, el aumento de los filtros, etc., lo que hace que la estrategia tenga más ventajas.
/*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)