Стратегия торговли с конверсией тренда с несколькими скользящими средними объемами и чистой стоимостью

EMA WMA SMA HMA ROC NVO MA TP SL
Дата создания: 2025-02-24 10:05:03 Последнее изменение: 2025-02-27 16:46:30
Копировать: 2 Количество просмотров: 352
2
Подписаться
319
Подписчики

Стратегия торговли с конверсией тренда с несколькими скользящими средними объемами и чистой стоимостью Стратегия торговли с конверсией тренда с несколькими скользящими средними объемами и чистой стоимостью

Обзор

Стратегия представляет собой систему отслеживания трендов, основанную на объемах сделок и изменениях цен, для прогнозирования движения рынка с помощью расчета показателей шока чистого объема сделок (NVO). Стратегия объединяет несколько типов движущихся средних (EMA, WMA, SMA, HMA) для определения рыночных тенденций путем сравнения шока с их наложенными линиями EMA и совершения сделок в подходящее время.

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

В основе стратегии лежит определение настроений рынка путем вычисления ежедневных колебаний чистой торговли. Конкретные шаги по вычислению следующие:

  1. Расчет размера ценового диапазона: вычисляется кратное число между 0 и 1 на основе максимальной, минимальной и закрытой цены за день
  2. Расчет эффективного роста и падения объема сделок: взвешенный в зависимости от направления изменения цены и умноженный на объем сделок
  3. Вычислить чистый объем сделок: эффективное увеличение сделок минус эффективное уменьшение сделок
  4. Выбранные в приложении скользящие средние: сглаживание данных по чистым оборотам
  5. Расчет накладной EMA: эталонная линия для определения тренда
  6. Рассчитывает изменение коэффициента ((ROC): используется для определения изменения интенсивности тренда

Торговые сигналы формируются по следующим правилам:

  • Многоусловие: нанесение накладной EMA на шок
  • Условия выполнения: прохождение накладной EMA под шок
  • Стоп: Стоп на основе процентов
  • Стоп: Стоп на основе процентов

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

  1. Многомерный анализ: информация о рынке, объединяющая три измерения: цены, объем сделок и изменение тенденций
  2. Высокая гибкость: поддержка нескольких типов скользящих средних, которые могут быть скорректированы в соответствии с различными рыночными характеристиками
  3. Управление рисками: включает в себя механизм остановки убытков, чтобы эффективно контролировать риски
  4. Сильная визуализация: изменение интенсивности тренда с помощью прямоугольника, чтобы понять состояние рынка
  5. Адаптируемость: с помощью параметрического дизайна можно адаптироваться к различным рыночным условиям и торговым видам

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

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

Предложения по контролю рисков:

  • Оптимизация параметров в различных рыночных условиях
  • Сигнал может быть подтвержден в сочетании с другими техническими показателями
  • Надлежащая корректировка параметров стоп-стоп для адаптации к различной волатильности рынка

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

  1. Оптимизация механизма подтверждения сигнала:

    • Условия подтверждения
    • Добавить фильтр силы тренда
    • Внедрение адаптивного механизма волатильности
  2. Оптимизация управления рисками:

    • Реализация динамического механизма стоп-лосса
    • Добавление модуля управления капиталом
    • Введение механизмов строительства и снижения складов по партиям
  3. Параметры оптимизации:

    • Разработка механизмов самостоятельной корректировки параметров
    • Осуществление переключения параметров на основе рыночных условий
    • Добавление модели машинного обучения для параметрической оптимизации

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

Эта стратегия использует комплексный анализ объема сделок и ценных данных, чтобы построить более полную систему торговли с отслеживанием тенденций. Основная особенность стратегии заключается в том, что она объединяет несколько технических показателей и предоставляет гибкие параметры. Хотя существует определенный риск, благодаря разумному контролю риска и постоянной оптимизации эта стратегия может принести стабильную прибыль в реальных сделках.

Исходный код стратегии
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("EMA-Based Net Volume Oscillator with Trend Change", shorttitle="NVO Trend Change", overlay=false, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input parameters
maType = input.string("WMA", "Moving Average Type", options=["WMA", "EMA", "SMA", "HMA"])
maLength = input.int(21, "MA Length", minval=1)
emaOverlayLength = input.int(9, "EMA Overlay Length", minval=1)
oscillatorMultiplier = input.float(1.0, "Oscillator Multiplier", minval=0.1, step=0.1)
showHistogram = input.bool(true, "Show Histogram")

stopLossPerc = input.float(1.0, "Stop Loss (%)", tooltip="Set 999 to disable")
takeProfitPerc = input.float(2.0, "Take Profit (%)", tooltip="Set 999 to disable")

// Calculate Net Volume Oscillator
priceRange = high - low
multiplier = priceRange > 0 ? (close - low) / priceRange : 0.5
var float effectiveUpVol = 0.0
var float effectiveDownVol = 0.0

if close > close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else if close < close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else
    effectiveUpVol := 0.0
    effectiveDownVol := 0.0

netVolume = effectiveUpVol - effectiveDownVol
dailyNetOscillator = volume > 0 ? (netVolume / volume) * 100 : 0

// Apply selected Moving Average
var float oscillator = na
if maType == "WMA"
    oscillator := ta.wma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "EMA"
    oscillator := ta.ema(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "SMA"
    oscillator := ta.sma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "HMA"
    oscillator := ta.hma(dailyNetOscillator, maLength) * oscillatorMultiplier

// EMA Overlay
emaOverlay = ta.ema(oscillator, emaOverlayLength)

// Rate of Change (ROC) for Oscillator
roc = ta.roc(oscillator, 1)  // 1-period rate of change

// Trading logic
longCondition = oscillator > emaOverlay
shortCondition = oscillator < emaOverlay

// Exit conditions
exitLong = oscillator < emaOverlay and strategy.position_size > 0
exitShort = oscillator > emaOverlay and strategy.position_size < 0

// Execute trades
if longCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)
if exitLong
    strategy.close("Long")

if shortCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)
if exitShort
    strategy.close("Short")

// Stop Loss and Take Profit
stopLossLong = stopLossPerc != 999 ? strategy.position_avg_price * (1 - stopLossPerc/100) : na
takeProfitLong = takeProfitPerc != 999 ? strategy.position_avg_price * (1 + takeProfitPerc/100) : na

stopLossShort = stopLossPerc != 999 ? strategy.position_avg_price * (1 + stopLossPerc/100) : na
takeProfitShort = takeProfitPerc != 999 ? strategy.position_avg_price * (1 - takeProfitPerc/100) : na

if (not na(stopLossLong) and not na(takeProfitLong) and strategy.position_size > 0)
    strategy.exit("Long SL/TP", "Long", stop=stopLossLong, limit=takeProfitLong)

if (not na(stopLossShort) and not na(takeProfitShort) and strategy.position_size < 0)
    strategy.exit("Short SL/TP", "Short", stop=stopLossShort, limit=takeProfitShort)

// Plotting
plot(oscillator, "Net Volume Oscillator", color.blue)
plot(emaOverlay, "EMA Overlay", color.orange)
hline(0, "Zero Line", color.gray)

// Histogram with Trend Change Visualization
var color histogramColor = na
if oscillator > 0
    histogramColor := roc >= 0 ? color.new(color.green, 70) : color.new(color.lime, 70)  // Green for bullish, light green for weakening
else if oscillator < 0
    histogramColor := roc >= 0 ? color.new(color.red, 70) : color.new(color.maroon, 70)  // Red for bearish, light red for weakening

plot(showHistogram ? oscillator : na, style=plot.style_histogram, color=histogramColor, title="Histogram")