
Стратегия Trading VMA - это количественная торговая стратегия, основанная на переменных скользящих средних. Эта стратегия использует изменяющиеся скользящие средние для захвата рыночных тенденций и, соответственно, создания торговых сигналов.
В центре стратегии Trading VMA находится вычисление переменной средней движущейся длины (англ. Variable Moving Average, VMA). Передняя средняя является широко известным техническим показателем, который рассчитывает среднюю цену за определенный период времени.
В частности, эта стратегия сначала рассчитывает ряд промежуточных величин, таких как индикатор направления движения цены ((PDM, MDIM), гладко обработанные данные ((PDMs, MDMs). Эти данные в конечном итоге используются для получения силы индикатора ((iS), который отражает силу колебаний цен.
Затем, в зависимости от силы индикатора, стратегия TradingVMA динамически корректирует длину движущихся средних. Когда рыночная волатильность увеличивается, циклы движущихся средних становятся короче, а наоборот, они становятся длиннее. Это позволяет быстрее реагировать на изменения рынка.
Наконец, стратегия сравнивает текущую цену с величиной VMA, чтобы создать торговый сигнал. Если цена выше VMA, вы можете сделать больше, если цена ниже VMA, вы можете сделать меньше.
Основными преимуществами стратегии Trading VMA являются:
Переменные циклы Filters Noise более устойчивые - переменные циклы скорректируются с изменениями рынка, чтобы отфильтровать шум и получить более устойчивый сигнал тренда.
Improves Responsiveness - изменяемая скользящая средняя может быстро реагировать на ценовые изменения, захватывая переломные моменты новых тенденций.
Снижение частоты торгов Reduce Overtrading - в сравнении с фиксированными циклами, TradingVMA позволяет сократить количество ненужных торгов.
Настраиваемые параметры Flexible Parameters - Эта политика позволяет пользователям выбирать параметры в соответствии с их предпочтениями и адаптироваться к различным рыночным условиям.
Основные риски, связанные с VMA-торговлей:
Miss Rapid Reversals - когда тренд быстро меняется, скорректированная скользящая средняя может отреагировать с задержкой.
Влияние отклонения от отслеживания Lagging Bias - все стратегии скользящих средних имеют некоторую степень отклонения от отслеживания.
Неправильные сигналы - в кристально скорректированных рынках TradingVMA может генерировать ошибочные сигналы.
Parameter Optimization Difficulty - найти оптимальную комбинацию параметров может быть сложнее.
Эти риски можно контролировать с помощью остановки убытков, корректировки комбинации параметров и т. д.
Стратегия VMA может быть оптимизирована в следующих направлениях:
Комбинирование с другими индикаторами - использование комбинации с другими индикаторами, такими как тренд, трендовый разворот, может улучшить качество сигнала.
Optimal Parameter Optimization - поиск оптимальных комбинаций параметров с помощью исторической обратной связи и оптимизации параметров.
Adaptive Trading Rules - применение различных правил открытия позиций, правил остановки убытков и т. д. в зависимости от рыночных условий.
Систематизация алгоритмических сделок - алгоритмизация и систематизация стратегий для оптимизации обратной связи.
Торговля VMA - это адаптируемая количественная стратегия. Она использует специально разработанные индикаторы 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)