Ruda Momentum Trend Trading Strategy adalah strategi perdagangan kuantitatif yang didasarkan pada indikator momentum dan tren. Strategi ini menggunakan indikator seperti OBV (On Balance Volume), EMA (Exponential Moving Average), dan rasio tubuh lilin untuk menentukan sinyal beli dan jual. Ketika EMA jangka pendek melintasi EMA jangka panjang, OBV mencapai level tertinggi baru, dan rasio tubuh lilin lebih besar dari ambang batas yang ditetapkan, strategi membeli pada harga pembukaan hari berikutnya; ketika harga turun di bawah harga stop-loss atau harga penutupan turun di bawah EMA jangka pendek, strategi menutup posisi.
Ruda Momentum Trend Trading Strategy adalah strategi perdagangan kuantitatif yang sederhana dan mudah digunakan yang menangkap instrumen yang kuat dan peluang tren dengan menggabungkan indikator tren dan momentum. Namun, strategi ini juga memiliki keterbatasan tertentu, seperti lag indikator dan parameter tetap.
/*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)