TradingVMA Стратегия торговли переменной скользящей средней

Автор:Чао Чжан, Дата: 2024-02-21 11:47:43
Тэги:

img

Обзор

Стратегия TradingVMA - это количественная стратегия торговли, основанная на переменных скользящих средних линиях.

Логика стратегии

Основой стратегии TradingVMA является расчет скользящих средних переменной длины (Variable Moving Average, VMA).

В частности, стратегия сначала вычисляет ряд промежуточных величин, таких как индикатор направленного движения цен (PDM, MDIM), сглаженные данные (PDM, MDM). Эти данные в конечном итоге используются для получения силы индикатора (iS). Этот индикатор отражает интенсивность колебаний цен.

После этого стратегия TradingVMA динамически корректирует скользящий средний период в зависимости от силы индикатора. Когда волатильность рынка увеличивается, скользящий средний период становится короче, и наоборот. Это позволяет быстрее реагировать на изменения рынка.

Наконец, стратегия сравнивает текущую цену с VMA для получения торговых сигналов.

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

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

  1. Переменный период фильтрует шум более стабильно Период переменной скользящей средней адаптируется к изменениям рынка для фильтрации шума и более стабильных сигналов тренда.

  2. Более быстрая реакция на изменения цен улучшает оперативность Переменная скользящая средняя может быстро реагировать на изменения цен и фиксировать точки переворота тренда.

  3. Уменьшает частоту торгов, уменьшает перегрузку - по сравнению с индикаторами фиксированного периода, TradingVMA может уменьшить ненужные сделки.

  4. Гибкость настраиваемых параметров - Стратегия позволяет пользователям выбирать параметры на основе своих предпочтений, чтобы они соответствовали различным рыночным условиям.

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

Стратегия TradingVMA также имеет следующие основные риски:

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

  2. Отставание Все стратегии скользящих средних имеют некоторую степень отставания, будь то длинный или короткий.

  3. Ошибочные сигналы TradingVMA может генерировать неправильные длинные/короткие сигналы на рынках с узкими диапазонами.

  4. Трудность оптимизации параметров Поиск оптимальной комбинации параметров может быть сложным.

Эти риски можно контролировать с помощью таких методов, как стоп-лосс, корректировка комбинаций параметров и т.д.

Руководство по оптимизации

Стратегия TradingVMA также может быть улучшена в следующих аспектах:

  1. Комбинировать с другими индикаторами Использование с другими индикаторами тренда может улучшить качество сигнала.

  2. Оптимизация параметров Открыть оптимальные параметры с помощью обратного тестирования и оптимизации.

  3. Адаптивные правила торговли Использование различных правил входа, остановка потерь по режиму рынка.

  4. Систематизация Алгоритмизация и систематизация стратегии для более легкой оптимизации.

Заключение

TradingVMA - это адаптивная количественная стратегия. Она фиксирует рыночные тенденции с помощью специально разработанного индикатора VMA, с преимуществом реагирования и фильтрации шума. Стратегия может быть обновлена несколькими способами для лучшей производительности.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 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/
// © laptevmaxim92

//@version=4
strategy("Variable Moving Average Strategy", overlay=true)

src=close
l =input(5, title="VMA Length") 
std=input(true, title="Show Trend Direction Colors")

utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2019, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

k = 1.0/l
pdm = 0.0
pdm := max((src - src[1]), 0)
mdm = 0.0
mdm := max((src[1] - src), 0)
pdmS = 0.0
pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm)
mdmS = 0.0
mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm)
s = pdmS + mdmS
pdi = pdmS/s
mdi = mdmS/s
pdiS = 0.0
pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi)
mdiS = 0.0
mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi)
d = abs(pdiS - mdiS)
s1 = pdiS + mdiS
iS = 0.0
iS := ((1 - k)*nz(iS[1]) + k*d/s1)
hhv = highest(iS, l) 
llv = lowest(iS, l) 
d1 = hhv - llv
vI = (iS - llv)/d1
vma = 0.0
vma := (1 - k*vI)*nz(vma[1]) + k*vI*src
vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na 
plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA")

longCondition = vma > vma[1]
if (longCondition)
    strategy.entry("BUY", strategy.long and use_date)

shortCondition = vma < vma[1]
if (shortCondition)
    strategy.entry("SELL", strategy.short and use_date)

if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Больше