Chiến lược này là một hệ thống giao dịch định lượng dựa trên nhiều tín hiệu chéo trung bình chuyển động. Nó tích hợp bảy loại trung bình chuyển động khác nhau, bao gồm Trung bình chuyển động đơn giản (SMA), Trung bình chuyển động nhân tố (EMA), Trung bình chuyển động cân nhắc (WMA), Trung bình chuyển động cân nhắc khối lượng (VWMA), Trung bình chuyển động Hull (HMA), Trung bình chuyển động trơn (RMA), và Trung bình chuyển động Arnaud Legoux (ALMA). Chiến lược hỗ trợ cả hai đường và ba đường hệ thống chéo và cung cấp các tùy chọn giao dịch dài và ngắn linh hoạt.
Hệ thống cung cấp hai phương thức nhập: một dựa trên giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao
Chiến lược này là một hệ thống theo dõi xu hướng toàn diện cung cấp một khuôn khổ giao dịch định lượng đáng tin cậy thông qua sự tích hợp của nhiều chỉ số trung bình động và cài đặt tham số linh hoạt. Mặc dù có một số sự chậm trễ vốn có, chiến lược duy trì giá trị thực tế thông qua tối ưu hóa tham số và các biện pháp kiểm soát rủi ro thích hợp. Các nhà giao dịch được khuyên nên tối ưu hóa chiến lược dựa trên các đặc điểm thị trường cụ thể trong giao dịch trực tiếp.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Cruce de Medias Total", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100,max_bars_back=1000) // Parámetros de entrada periodo_rapida = input.int(50, title="Periodos para media rápida", minval=1) periodo_lenta = input.int(200, title="Periodos para media lenta", minval=1) // Selección del tipo de media móvil tipo_de_media = input.string(title="Elige el tipo de media móvil", defval="Simple sma", options=["Simple sma", "Exponencial ema", "Ponderada wma", "Volumen ponderada vwma", "Hull hma", "Media suavizada rma", "Media de Arnaud Legoux alma"]) // Posibilidad de estrategia con cruce de tres medias móviles tres_medias = input.bool(false, title="Estrategia con cruce de 3 medias móviles") periodo_media = input.int(100, title="Periodos para media media", minval=1) // Opción de operar en corto permitir_corto = input.bool(false, title="Permitir operaciones en corto") // Opción de cuando comprar cuando_comprar = input.string(title="Cuando comprar", defval="Cruce de medias", options=["Vela anterior cierra por encima de las medias", "Cruce de medias"]) // Opción de cuando vender cuando_vender = input.string(title="Cuando vender", defval="Cruce de medias", options=["Vela anterior cierra por debajo de las medias", "Cruce de medias"]) float media_mov_rapida = na float media_mov_media = na float media_mov_lenta = na // Definición de las medias móviles if tipo_de_media == "Simple sma" media_mov_rapida := ta.sma(close, periodo_rapida) media_mov_media := ta.sma(close, periodo_media) media_mov_lenta := ta.sma(close, periodo_lenta) else if tipo_de_media == "Exponencial ema" media_mov_rapida := ta.ema(close, periodo_rapida) media_mov_media := ta.ema(close, periodo_media) media_mov_lenta := ta.ema(close, periodo_lenta) else if tipo_de_media == "Ponderada wma" media_mov_rapida := ta.wma(close, periodo_rapida) media_mov_media := ta.wma(close, periodo_media) media_mov_lenta := ta.wma(close, periodo_lenta) else if tipo_de_media == "Volumen ponderada vwma" media_mov_rapida := ta.vwma(close, periodo_rapida) media_mov_media := ta.vwma(close, periodo_media) media_mov_lenta := ta.vwma(close, periodo_lenta) else if tipo_de_media == "Hull hma" media_mov_rapida := ta.hma(close, periodo_rapida) media_mov_media := ta.hma(close, periodo_media) media_mov_lenta := ta.hma(close, periodo_lenta) else if tipo_de_media == "Media suavizada rma" media_mov_rapida := ta.rma(close, periodo_rapida) media_mov_media := ta.rma(close, periodo_media) media_mov_lenta := ta.rma(close, periodo_lenta) else if tipo_de_media == "Media de Arnaud Legoux alma" offset = input.int(0, title="Desfase para ALMA", minval=-100, maxval=100) sigma = input.float(6, title="Sigma para ALMA", minval=0.1, maxval=10) media_mov_rapida := ta.alma(close, periodo_rapida, offset, sigma) media_mov_media := ta.alma(close, periodo_media, offset, sigma) media_mov_lenta := ta.alma(close, periodo_lenta, offset, sigma) // Graficar las medias móviles en el gráfico plot_rapida = plot(media_mov_rapida, color=color.green, linewidth=2, title="Media Móvil Rápida") plot_media = plot(tres_medias ? media_mov_media : na, color=color.blue, linewidth=2, title="Media Móvil Media") plot_lenta = plot(media_mov_lenta, color=color.red, linewidth=2, title="Media Móvil Lenta") // Rellenar el área entre las medias móviles con color condicionado fill(plot_rapida, plot_lenta, media_mov_rapida > media_mov_lenta ? color.new(color.green, 90) : color.new(color.red, 90), title="Relleno entre Medias") // Lógica de la estrategia para cruce de medias comprado = strategy.position_size > 0 // Verifica si ya hay una posición abierta vendido = strategy.position_size < 0 if not comprado // Solo compra si no hay una posición abierta if tres_medias and cuando_comprar == "Cruce de medias" if media_mov_rapida > media_mov_media and media_mov_media > media_mov_lenta strategy.entry("Largo", strategy.long) label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white) else if not tres_medias and cuando_comprar == "Cruce de medias" if ta.crossover(media_mov_rapida, media_mov_lenta) strategy.entry("Largo", strategy.long) label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white) else if tres_medias and cuando_comprar == "Vela anterior cierra por encima de las medias" if close[1] > media_mov_rapida and close[1] > media_mov_media and close[1] > media_mov_lenta strategy.entry("Largo", strategy.long) label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white) else if not tres_medias and cuando_comprar == "Vela anterior cierra por encima de las medias" if close[1] > media_mov_rapida and close[1] > media_mov_lenta strategy.entry("Largo", strategy.long) label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white) // Condición de cierre de la posición if comprado if tres_medias and cuando_vender == "Cruce de medias" if media_mov_rapida < media_mov_media and media_mov_media < media_mov_lenta strategy.close("Largo") label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white) else if not tres_medias and cuando_vender == "Cruce de medias" if ta.crossunder(media_mov_rapida, media_mov_lenta) strategy.close("Largo") label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white) else if tres_medias and cuando_vender == "Vela anterior cierra por debajo de las medias" if close[1] < media_mov_rapida and close[1] < media_mov_media and close[1] < media_mov_lenta strategy.close("Largo") label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white) else if not tres_medias and cuando_vender == "Vela anterior cierra por debajo de las medias" if close[1] < media_mov_rapida and close[1] < media_mov_lenta strategy.close("Largo") label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white) // Condición de entrar en corto if not vendido and permitir_corto if tres_medias if media_mov_rapida < media_mov_media and media_mov_media < media_mov_lenta strategy.entry("Short", strategy.short) label.new(bar_index, low, "Short", style=label.style_label_up, color=color.blue, textcolor=color.white) else if ta.crossunder(media_mov_rapida, media_mov_lenta) strategy.entry("Short", strategy.short) label.new(bar_index, low, "Short", style=label.style_label_up, color=color.blue, textcolor=color.white) // Condición de cierre de posición corta if vendido if tres_medias if media_mov_rapida > media_mov_media and media_mov_media > media_mov_lenta strategy.close("Short") label.new(bar_index, high, "Cierre Short", style=label.style_label_down, color=color.purple, textcolor=color.white) else if ta.crossover(media_mov_rapida, media_mov_lenta) strategy.close("Short") label.new(bar_index, high, "Cierre Short", style=label.style_label_down, color=color.purple, textcolor=color.white)