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.
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.
Optimizaciones posibles frente a los riesgos:
Añadir otros indicadores técnicos para la identificación de tendencias.
Se añadirá el stop loss al control por importe de pérdida por operación.
Agregue indicadores de volumen para evitar los mercados de la sierra.
Construir mecanismos de optimización de parámetros para encontrar conjuntos óptimos de parámetros automáticamente.
La estrategia se puede optimizar aún más en los siguientes aspectos:
Añadir estrategias de stop loss como puntos fijos de stop loss o trailing stop loss para controlar las pérdidas.
Añadir estrategias de dimensionamiento de posiciones como el dimensionamiento de posiciones fijas o dinámicas para controlar los riesgos comerciales.
Añadir filtros combinándolos con otros indicadores técnicos para identificar tendencias y mejorar la tasa de ganancia.
Optimice los parámetros mediante métodos como la búsqueda de cuadrícula y la regresión lineal para encontrar valores óptimos.
Ampliar las estrategias de entrada como el retiro de ruptura, escalar en órdenes para enriquecer las tácticas comerciales.
Agregue indicadores de volumen para evitar los mercados de la sierra.
Expanda los productos a los índices de acciones, divisas, criptomonedas, etc.
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)