La estrategia se basa en el cruce de la media móvil rápida y la media móvil lenta como una señal de compra y venta, y pertenece a la estrategia de seguimiento de tendencias. Al ajustar automáticamente los parámetros de la media móvil, se adapta dinámicamente a las tendencias del mercado para maximizar los beneficios.
Calcula el promedio de movimiento rápido y el promedio de movimiento lento. Los parámetros del promedio de movimiento rápido son 21 por defecto, y los del promedio de movimiento lento son 34 por defecto.
Cuando la línea de movimiento rápido cruza la línea de movimiento lento, indica que el mercado está a la alza y emite una señal de compra.
Cuando la línea de movimiento rápido pasa por debajo de la línea de movimiento lento, indica que el mercado está a la baja y emite una señal de venta.
Se puede obtener ganancias al ajustar automáticamente los parámetros de longitud de la línea media móvil, adaptando su dinámica a las tendencias del mercado y siguiendo las tendencias.
Las estrategias son sencillas, claras y fáciles de entender.
El blog de la empresa, que tiene una base de datos en la ciudad de Nueva York, es un sitio web que permite a los usuarios de Facebook seguir las tendencias del mercado.
Se pueden ajustar los parámetros de forma dinámica para adaptarse a los cambios de la situación.
Se puede configurar un algoritmo de línea media móvil para aumentar la flexibilidad de la estrategia.
La configuración libre de compra y venta es lógica y la aplicación es flexible.
Las estrategias de movilidad de la línea media son propensas a generar transacciones frecuentes y costosas.
Cuando la situación fluctúa fuertemente, la media móvil se retrasa y puede perder el mejor momento para comprar y vender.
Se necesita optimizar los parámetros de la línea media móvil y la frecuencia de ajuste, la configuración incorrecta puede causar la falla de la estrategia.
Se requiere un control estricto del stop loss para evitar la expansión de las pérdidas.
Si la tendencia se invierte, es fácil que se produzcan grandes pérdidas.
Optimizar los parámetros de las medias móviles para que sean más sensibles y capten los cambios de tendencia en tiempo real.
La lógica de stop loss se ha incrementado y las pérdidas individuales se han controlado.
Aumentar los indicadores de tendencia para evitar que la tendencia se invierta y cause pérdidas.
Optimizar las estrategias de ajuste de la línea media móvil para que sean más inteligentes y automáticas.
Se añade un módulo de optimización de parámetros, que se optimiza automáticamente con métodos de aprendizaje automático.
La idea general de esta estrategia es clara y fácil de entender, se compra y se vende mediante la configuración de una línea media móvil rápida y lenta de diferentes longitudes. Se trata de una estrategia típica de seguimiento de tendencias. La ventaja de la estrategia es que las reglas de negociación son simples, fáciles de implementar y pueden capturar la tendencia de manera efectiva. Pero también existe cierto riesgo, que requiere una configuración de parámetros optimizada y una lógica de stop loss para que la estrategia sea más estable y confiable. En general, la estrategia tiene un gran potencial de mejora, y debe investigarse y aplicarse en profundidad.
/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//
// @version=4
// © Ehsan Haghpanah, (ehsanha)
// Algorithmic Trading Research
//
// eha Moving Averages Strategy,
// A simple strategy based on crossing Moving Averages of
// different lengths (a fast moving average and slow one)
//
strategy(title = "eha Moving Averages Strategy", shorttitle = "eha MA Strategy", overlay = true)
//
// -- strategy parameter(s)
// moving averages parameter(s)
var _fastMA_len = input(title = "Fast MA Length", defval = 21, type = input.integer, minval = 1, step = 1)
var _slowMA_len = input(title = "Slow MA Length", defval = 34, type = input.integer, minval = 1, step = 1)
var _ma_algo_id = input(title = "MA Algorithm", defval = "SMA", options = ["SMA", "EMA", "WMA"])
// backtesting date and time range parameter(s)
var _startYear = input(defval = 2020, title = "Start Year", type = input.integer, minval = 1976)
var _startMonth = input(defval = 1, title = "Start Month", type = input.integer, minval = 1, maxval = 12)
var _startDay = input(defval = 1, title = "Start Day", type = input.integer, minval = 1, maxval = 31)
var _closeYear = input(defval = 2020, title = "Close Year", type = input.integer, minval = 1984)
var _closeMonth = input(defval = 9, title = "Close Month", type = input.integer, minval = 1, maxval = 12)
var _closeDay = input(defval = 1, title = "Close Day", type = input.integer, minval = 1, maxval = 31)
//
// -- function(s) and calculation(s)
// checks whether current time is in backtesting time range
start_t = timestamp(_startYear, _startMonth, _startDay, 00, 00) // backtesting range start time, (00, 00); (hour, minute)
close_t = timestamp(_closeYear, _closeMonth, _closeDay, 23, 59) // backtesting range close time, (23, 59); (hour, minute)
isInRange() => true
//
// calculates moving average based on provided algorithm, source and length
// alg : moving average algorithm
// len : length
// ser : series
calcMA(alg, len, ser) =>
(len == 0) ? ser : ((alg == "SMA") ? sma(ser, len) : ((alg == "EMA") ? ema(ser, len) : (alg == "WMA" ? wma(ser, len) : na)))
//
// -- strategy logic and calculation(s)
ma_fast = calcMA(_ma_algo_id, _fastMA_len, close)
ma_slow = calcMA(_ma_algo_id, _slowMA_len, close)
cross_ov = crossover (ma_fast, ma_slow) // returns true if fastMA crosses over slowMA
cross_un = crossunder(ma_fast, ma_slow) // returns true if slowMA crosses over fastMA
//
// -- strategy execution logic
// opens a long position whenever the time is in range and crosses over
strategy.entry("ID", comment = "-", long = strategy.long, when = isInRange() and cross_ov)
// closes the position whenever the time is in range and crosses under
strategy.close("ID", comment = "-", when = isInRange() and cross_un)
//
// -- drawing and visualization
co_fast = color.new(color.gray, 25)
co_slow = color.new(color.gray, 75)
// drawing moving average(s)
plot(ma_fast, color = co_fast, linewidth = 2, style = plot.style_line)
plot(ma_slow, color = co_slow, linewidth = 3, style = plot.style_line)