루다 모멘텀 트렌드 트레이딩 전략 (Ruda Momentum Trend Trading Strategy) 은 모멘텀 및 트렌드 지표에 기반한 양적 거래 전략이다. 이 전략은 OBV (On Balance Volume), EMA (Exponential Moving Average), 촛불 몸 비율과 같은 지표를 사용하여 구매 및 판매 신호를 결정한다. 단기 EMA가 장기 EMA를 넘어서면 OBV가 새로운 최고치를 달성하고 촛불 몸 비율이 설정된 임계보다 크면 전략은 다음 날의 개장 가격으로 구매한다. 가격이 스톱 로스 가격 이하로 떨어지거나 종료 가격이 단기 EMA 이하로 떨어지면 전략은 포지션을 닫는다.
루다 모멘텀 트렌드 트레이딩 전략 (Ruda Momentum Trend Trading Strategy) 은 트렌드와 모멘텀 지표를 결합하여 강력한 도구와 트렌드 기회를 포착하는 간단하고 사용하기 쉬운 양적 거래 전략이다. 그러나 전략에는 지표 지연 및 고정 매개 변수와 같은 특정 한계도 있습니다. 미래에 전략의 안정성과 수익성을 높이기 위해 지표 매개 변수를 최적화하고 적응 메커니즘을 도입하고 백테스팅 범위를 확장하고 리스크 관리를 강화하여 전략을 최적화하고 향상시킬 수 있습니다.
/*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)