
Стратегия SMA, основанная на V-образных инверсиях, формирует кривую VI+ и VI-образную, рассчитывая абсолютную разницу между 14-дневными максимумами цен на акции и минимумами за предыдущий день и абсолютную разницу между 14-дневными минимумами и максимумами за предыдущий день, а затем 14-дневную простой подвижной среднюю.
Основными показателями стратегии являются VI+ и VI−, где VI+ отражает многоголовую силу, а VI− отражает пустую силу. Конкретные расчетные формулы следующие:
VMP = SUM(ABS(HIGH - LOW[1]),14)
VMM = SUM(ABS(LOW - HIGH[1]),14)
STR = SUM(ATR(1),14)
VI+ = VMP/STR
VI- = VMM/STR
Для устранения колебаний в кривой, для VI+ и VI- рассчитывается 14-дневная простая скользящая средняя, получающая SMA ((VI+) и SMA ((VI-)). При прохождении SMA ((VI-) над SMA ((VI+) образуется многоголовый сигнал; при прохождении SMA ((VI+) под SMA ((VI-) образуется пустой сигнал.
Кроме того, стратегия объединяет в себе восходящие и нисходящие состояния VI+ и VI- для определения тенденции, и, таким образом, проводит фильтрацию, делая больше только при нисходящей тенденции и делая пустое при восходящей тенденции.
Эта стратегия в сочетании с состоянием тренда и VI-индикаторами эффективно фильтрует ложные сигналы и повышает вероятность получения прибыли. По сравнению с простой стратегией движущихся средних, ее прорывные сигналы более надежны.
В этой стратегии есть два основных риска:
VI-индикатор в течение некоторых циклов дает ошибочные сигналы. Для контроля риска необходимо использовать в сочетании с фильтрацией тренда и остановкой убытка.
Рынки с высокими сборами за транзакции и стоимостью скольжения не подходят для этой стратегии, что значительно снижает прибыльность.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизируйте циклические параметры VI показателя, чтобы найти оптимальную комбинацию параметров.
Использование методов машинного обучения для автоматического распознавания ошибочных сигналов и улучшения качества сигналов.
Оптимизация механизма выхода в сочетании с остановкой убытков и управлением капиталом, чтобы контролировать убытки от одной сделки.
Оптимизируйте выбор торговых сортов, выбирая рынки с более низкой стоимостью торговли.
Стратегия SMA, основанная на V-образных инверсионных показателях, является более надежной стратегией для отслеживания тенденций. Эта стратегия имеет преимущества в качестве сигнала и эффективной фильтрации шума. Но также существует риск подвешивания, который требует постоянной оптимизации для адаптации к изменениям рынка.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=SIDD
//Sidd-Vortex strategy is using Vortex formula to generate 4 signals Bullish1 Bullish2 and Bearish1 Bearish2.
//Bullish1 signal is getting generated when smooth ma of VIP is crossing over smooth ma of VIM and smooth VIM is falling from previous bar smooth VIM
//Bullish2 signal is getting generated when smooth ma of VIP is crossing over smooth ma of VIM and smooth VIP is rising from previous bar smooth VIP
//Bearish1 signal is getting generated when smooth ma of VIM is crossing over smooth ma of VIP and smooth VIP is falling from previous bar smooth VIP
//Bearish2 signal is getting generated when smooth ma of VIM is crossing over smooth ma of VIP and smooth VIM is rising from previous bar smooth VIM
//This strategy can be converted into study un-commenting the plotshape and 15th line strategy replace with study and overlay=false
strategy(title = "SIDD-Vortex", shorttitle="SIDD-VORTEX", format=format.price, precision=4,overlay=true)
period_ = input(14, title="Period", minval=2)
len = input(14, minval=1, title="WMA Length")
VMP = sum( abs( high - low[1]), period_ ) // sum of absolute current high and previous low with 14 period default
VMM = sum( abs( low - high[1]), period_ ) // sum of absolute current low and previous high with 14 period default
STR = sum( atr(1), period_ ) //sum of daily atr for 14 days
VIP = VMP / STR
VIM = VMM / STR
simpleMAVIP=wma(VIP, len)
smmaVIP = 0.0
smmaVIP := na(smmaVIP[1]) ? simpleMAVIP : (smmaVIP[1] * (len - 1) + VIP) / len // finding the Smoothing average
simpleMAVIM=wma(VIM, len)
smmaVIM = 0.0
smmaVIM := na(smmaVIM[1]) ? simpleMAVIM : (smmaVIM[1] * (len - 1) + VIM) / len // finding the Smoothing average
risingVIP = rising(smmaVIP, 1)
fallingVIP = falling(smmaVIP, 1)
lineColorVIP = smmaVIP > 0.95 and risingVIP ? color.lime : smmaVIP > 0.95 ? #d65240 : smmaVIP < 0.95 and fallingVIP ? color.red : color.olive
risingVIM = rising(VIM, 1)
fallingVIM = falling(VIM, 1)
lineColorVIM = smmaVIM > 0.95 and risingVIM ? color.red : smmaVIM > 0.95 ? color.olive : smmaVIM < 0.95 and fallingVIM ? color.lime : #d65240
plot(VIP, title="VI +", color=lineColorVIP)
plot(VIM, title="VI -", color=lineColorVIM)
longCondition = crossover(smmaVIP,smmaVIM)
shortCondition = crossover(smmaVIM,smmaVIP)
if (longCondition and fallingVIM)
strategy.entry("Bullish1", strategy.long)
if (shortCondition and fallingVIP)
strategy.entry("Bearish1", strategy.short)
if (longCondition and risingVIP)
strategy.entry("Bullish2", strategy.long)
if (shortCondition and risingVIM)
strategy.entry("Bearish2", strategy.short)
//plotshape(longCondition and fallingVIM, color=color.lime, location=location.belowbar, style=shape.triangleup,size= size.large,text="Bullish",offset=0,textcolor=color.white)
//plotshape(longCondition and risingVIP, color=color.lime, location=location.belowbar, style=shape.labelup,size= size.large,text="Bullish",offset=0,textcolor=color.white)
//plotshape(Diff > 0 and direction>0, color=color.lime, location=location.belowbar, style=shape.arrowup,size= size.normal,offset=0)
//plotshape(shortCondition and fallingVIP , color=color.red, location=location.abovebar, style=shape.triangledown, size= size.large,text="Bearish",offset=0,textcolor=color.white)
//plotshape( shortCondition and risingVIM , color=color.red, location=location.abovebar, style=shape.labeldown, size= size.large,text="Bearish",offset=0,textcolor=color.white)
//band1 = hline(1.0 , title="Upper Line", linestyle=hline.style_dashed, linewidth=3, color=color.red)
//band0 = hline(0.5, title="Lower Line", linestyle=hline.style_dashed, linewidth=3, color=color.lime)
//fill(band1, band0, color=color.purple, transp=70)