Chiến lược giao dịch xu hướng Ruda Momentum là một chiến lược giao dịch định lượng dựa trên các chỉ số động lực và xu hướng. Chiến lược sử dụng các chỉ số như OBV (On Balance Volume), EMA (Exponential Moving Average) và tỷ lệ thân nến để xác định tín hiệu mua và bán. Khi EMA ngắn hạn vượt qua EMA dài hạn, OBV đạt mức cao mới và tỷ lệ thân nến lớn hơn ngưỡng đặt, chiến lược mua ở giá mở cửa ngày hôm sau; khi giá giảm xuống dưới giá dừng lỗ hoặc giá đóng cửa giảm xuống dưới EMA ngắn hạn, chiến lược đóng vị trí.
Chiến lược giao dịch xu hướng Ruda Momentum là một chiến lược giao dịch định lượng đơn giản và dễ sử dụng nắm bắt các công cụ mạnh mẽ và cơ hội xu hướng bằng cách kết hợp các chỉ số xu hướng và động lực. Tuy nhiên, chiến lược cũng có một số hạn chế nhất định, chẳng hạn như độ trễ của chỉ số và các tham số cố định. Trong tương lai, chiến lược có thể được tối ưu hóa và cải thiện bằng cách tối ưu hóa các tham số chỉ số, giới thiệu các cơ chế thích nghi, mở rộng phạm vi kiểm tra lại và tăng cường quản lý rủi ro để tăng cường độ bền và lợi nhuận của chiến lược.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © lhcbenac //@version=5 strategy('Ruda_Strategy', overlay=true , initial_capital=5000 , pyramiding = 3, commission_type = strategy.commission.cash_per_contract , commission_value = 1 ) // // //////////////////////////////////////////////////////// // // // // // Otimizações // // // // // //////////////////////////////////////////////////////// // // //////////////////////////////////////////////////////// // // // // // Codigo Operacional // // // // // //////////////////////////////////////////////////////// // // // Indica situação de Compra ou Venda // Condição True or False YEAR_BT= input.int(1,title="Nº Anos ", group = "Backtest") INPUT_ME1 = input.int(5,title="Momentum ", group = "RUDA") INPUT_ME2 = input.int(21,title="Trend ", group = "RUDA") INPUT_CORPO = input.int(50,title="CORPO ", group = "RUDA")/100 v_obv = ta.obv v_med1 = ta.ema(close , INPUT_ME1) v_med2 = ta.ema(close , INPUT_ME2) valid_1 = v_med1 > v_med2 valid_2 = v_obv >= ta.highest(v_obv[1], 10) valid_3 = math.abs(close - open) / (high-low) > INPUT_CORPO plot(v_med1) plot(v_med2) compra = valid_1 and valid_2 and strategy.position_size == 0 and valid_3 var float v_minima_ref = na dataInicio = timestamp(year(timenow) - YEAR_BT, month(timenow), dayofmonth(timenow), 00, 00) // Variáveis globais var float preco_entrada = na var float preco_stop = na if compra and time >= dataInicio and ta.change(time("D")) != 0 and ta.change(compra) v_minima_ref := low preco_entrada := open preco_stop := math.min(low, open - 0.01 * open) strategy.entry("Compra", strategy.long , stop = preco_stop ) if (not na(preco_entrada) and not na(preco_stop)) label.new(x=bar_index, y= low * 0.9, text= "Dia: " + str.tostring(dayofmonth) + "\nPreço de Entrada: " + str.tostring(preco_entrada) + "\nPreço de Stop Loss: " + str.tostring(preco_stop), style=label.style_label_up, color=color.green) // Lógica de saída // Saída no stop loss if (not na(preco_stop) and low < preco_stop and ta.change(low) < 0) strategy.close("Compra", comment="Saída no Stop") // Saída no lucro if (close < v_med1 and ta.change(close) < 0) strategy.close("Compra", comment="Saída na Media") venda =( (not na(preco_stop) and low < preco_stop and ta.change(low) < 0) or (close < v_med1 and ta.change(close) < 0) ) and strategy.position_size > 0 codiff = compra ? 1 : venda ? -1 : na plotarrow(codiff, colorup=#00c3ff, colordown=#ff0062,title="Compra", maxheight=20, offset=0)