Стратегия торговли трендом Ruda Momentum

EMA OBV
Дата создания: 2024-04-03 15:16:47 Последнее изменение: 2024-04-03 15:16:47
Копировать: 0 Количество просмотров: 700
1
Подписаться
1617
Подписчики

Стратегия торговли трендом Ruda Momentum

Обзор

Движущаяся трендовая торговая стратегия Ruda - это количественная торговая стратегия, основанная на динамике и трендовых показателях. Эта стратегия использует такие показатели, как OBV (на балансовом объеме), EMA (экспоненциальная движущаяся средняя) и пропорции K-линейных объектов для определения времени покупки и продажи.

Стратегический принцип

  1. Вычислить две линии EMA, краткосрочный EMA - 5 и долгосрочный EMA - 21. Когда краткосрочный EMA носит долгосрочную EMA, считается, что тенденция вверх, а наоборот, тенденция вниз.
  2. Для расчета показателя OBV, когда OBV достиг 10-дневного максимума, считается, что многоголовый двигатель силен.
  3. Вычислить долю субъекта K-линии, когда доля субъекта превышает установленный порог ((по умолчанию 50%), считая, что тенденция установлена.
  4. Когда тенденция к повышению, многооборотная динамика сильна и тенденция установлена, стратегия покупает на следующий день по цене открытия, с минимальной ценой остановки на минимальную цену дня и цену открытия - 1%.
  5. Стратегическая ликвидация происходит, когда цена пересекает предельную цену или закрывается на краткосрочную ЭМА.

Анализ преимуществ

  1. В сочетании с тенденциями и динамическими показателями, можно поймать сильные сорта.
  2. Используйте покупки и динамические остановки на следующий день, чтобы избежать некоторых ложных прорывов.
  3. Условия для остановки и прекращения убытков ясны, а риск контролируем.

Анализ рисков

  1. Показатели тренда и динамики задерживаются, могут быть завышены покупки и преждевременное остановка убытков.
  2. Параметры фиксированы, отсутствует адаптивность, и производительность может сильно различаться в зависимости от состояния рынка.
  3. Ожидается дальнейшая проверка устойчивости и применимости стратегии для отбора единого рынка и сортов.

Направление оптимизации

  1. Оптимизация параметров трендовых и динамических индикаторов для повышения их чувствительности и эффективности.
  2. Введение параметров для оценки состояния рынка и его динамики в соответствии с текущими рыночными характеристиками.
  3. Расширение диапазона обратных испытаний, увеличение количества испытаний на различные рынки и разновидности, повышение устойчивости стратегий.
  4. Рассмотреть возможность внедрения модулей управления позициями и управления рисками, чтобы повысить соотношение риска к прибыли.

Подвести итог

Ruda Dynamic 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)