Стратегия следования за трендом, основанная на сигналах пересечения OBV и MA

OBV MA SMA
Дата создания: 2024-04-29 13:48:58 Последнее изменение: 2024-04-29 13:48:58
Копировать: 0 Количество просмотров: 802
1
Подписаться
1617
Подписчики

Стратегия следования за трендом, основанная на сигналах пересечения OBV и MA

Обзор

Эта стратегия называется “Стратегия OBVious MA, основанная на перекрестных сигналах OBV и MA”, и основана на использовании индикатора OBV (On Balance Volume) для создания торговых сигналов. OBV может предоставлять ведущие сигналы тренда, эта стратегия использует OBV, чтобы преодолеть перемещающуюся среднюю как условия для входа и выхода, чтобы захватить тренд.

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

  1. Если текущая цена закрытия выше предыдущей K-линии, то OBV добавляется к текущему объему сделок, в противном случае - отнимается.
  2. Вычислить четыре скользящих средних OBV: MA на большом зачете в длинном цикле, MA на большом зачете в длинном цикле, MA на коротком зачете в пустом зачете и MA на коротком зачете в пустом зачете.
  3. Вырабатывает торговые сигналы:
    • Открыть позицию, когда на OBV проходит длинный цикл с многозадачным МА и направленный фильтр не освобождает место
    • Плюс-минус, когда OBV в течение длительного цикла делает больше выступлений в МА
    • Открыть склад, когда OBV проходит короткий цикл вакуумного входа в поле MA и направленный фильтр не делает много
    • Прямой хоз, когда на OBV проходит короткий цикл, чтобы сделать пустой выходной MA
  4. Управление торговлей: при появлении обратного сигнала, первое, что нужно сделать, это снять позиции, а затем открыть новые.

Стратегические преимущества

  1. Используйте лучшие трендовые сигналы OBV, чтобы вовремя построить склад в начале тренда.
  2. Отделяя входную и выходную МА, можно самостоятельно оптимизировать время входа и выхода.
  3. Логика кода проста и понятна, ее легко понять и улучшить.
  4. Внедрение фильтров направленности позволяет избежать частоты сделок и снизить затраты.

Стратегический риск

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

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

  1. Можно попробовать ввести фильтры тренда, такие как MA направление, ATR и т.д., чтобы улучшить качество сигнала.
  2. На OBV можно использовать различные типы MA, такие как EMA, WMA и т. д., чтобы улавливать тенденции различных скоростей.
  3. Можно оптимизировать управление позициями, например, использовать стратегию увеличения и уменьшения позиций, увеличивая позиции при повышении интенсивности тренда и уменьшая позиции при снижении.
  4. Для повышения выигрышной вероятности можно использовать комбинированные сигналы в сочетании с другими показателями, такими как MVA, PVT и т. д.

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

Эта стратегия демонстрирует простой метод отслеживания тенденций на основе перекрестных OBV и MA. Преимущества состоят в логической ясности, возможности своевременного захвата тенденции, гибкости контроля за позицией путем разделения входящих и исходящих MA.

Исходный код стратегии
/*backtest
start: 2023-04-23 00:00:00
end: 2024-04-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ThousandX_Trader

//@version=5
strategy(title="OBVious MA Strategy [1000X]", overlay=false, 
         initial_capital=10000, margin_long=0.1, margin_short=0.1,
         default_qty_type=strategy.percent_of_equity, default_qty_value=100,
         slippage=1, commission_type=strategy.commission.percent, commission_value=0.1)

// Direction Input ///
tradeDirection = input.string("long", title="Direction", options=["long", "short"], group = "Direction Filter")

    ///////////////////////////////////////
   //  1000X OBV MA INDICATOR           //
  ///////////////////////////////////////

// OBV Trend Length Inputs //
long_entry_length = input(190, title="Long Entry MA Length", group = "Moving Average Settings")
long_exit_length = input(202, title="Long Exit MA Length", group = "Moving Average Settings")
short_entry_length = input(395, title="Short MA Entry Length", group = "Moving Average Settings")
short_exit_length = input(300, title="Short Exit MA Length", group = "Moving Average Settings")

// OBV Calculation
obv = ta.cum(ta.change(close) >= 0 ? volume : -volume)

// Calculate OBV Moving Averages
obv_ma_long_entry = ta.sma(obv, long_entry_length)
obv_ma_long_exit = ta.sma(obv, long_exit_length)
obv_ma_short_entry = ta.sma(obv, short_entry_length)
obv_ma_short_exit = ta.sma(obv, short_exit_length)

   ///////////////////////////////////////
  //         STRATEGY RULES            //
 ///////////////////////////////////////

longCondition = ta.crossover(obv, obv_ma_long_entry) and tradeDirection != "short" and strategy.position_size <= 0
longExitCondition = ta.crossunder(obv, obv_ma_long_exit)
shortCondition = ta.crossunder(obv, obv_ma_short_entry) and tradeDirection != "long" and strategy.position_size >= 0
shortExitCondition = ta.crossover(obv, obv_ma_short_exit)

  ///////////////////////////////////////
 //         ORDER EXECUTION           //
///////////////////////////////////////

// Close opposite trades before entering new ones
if (longCondition and strategy.position_size < 0)
    strategy.close("Short Entry")

if (shortCondition and strategy.position_size > 0)
    strategy.close("Long Entry")

// Enter new trades
if (longCondition)
    strategy.entry("Long Entry", strategy.long)

if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

// Exit conditions
if (longExitCondition)
    strategy.close("Long Entry")

if (shortExitCondition)
    strategy.close("Short Entry")

  ///////////////////////////////////////
 //            PLOTTING               //
///////////////////////////////////////

// Plot OBV line with specified color
plot(obv, title="OBV", color=color.new(#2962FF, 0), linewidth=1)

// Conditionally plot Long MAs with specified colors based on Direction Filter
plot(tradeDirection == "long" ? obv_ma_long_entry : na, title="Long Entry MA", color=color.new(color.rgb(2, 130, 228), 0), linewidth=1)
plot(tradeDirection == "long" ? obv_ma_long_exit : na, title="Long Exit MA", color=color.new(color.rgb(106, 168, 209), 0), linewidth=1)

// Conditionally plot Short MAs with specified colors based on Direction Filter
plot(tradeDirection == "short" ? obv_ma_short_entry : na, title="Short Entry MA", color=color.new(color.rgb(163, 2, 227), 0), linewidth=1)
plot(tradeDirection == "short" ? obv_ma_short_exit : na, title="Short Exit MA", color=color.new(color.rgb(192, 119, 205), 0), linewidth=1)