Стратегия следования за трендом на основе VWMA и ATR


Дата создания: 2023-11-07 16:39:47 Последнее изменение: 2023-11-07 16:39:47
Копировать: 1 Количество просмотров: 716
1
Подписаться
1617
Подписчики

Стратегия следования за трендом на основе VWMA и ATR

Обзор

Стратегия использует индикаторы VWMA для определения направления тенденции и использует индикаторы ATR для установления стоп-лосс для осуществления трендового отслеживания. Стратегия применима к рыночной среде с заметной тенденцией.

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

  1. Используйте индикатор VWMA, чтобы определить направление тренда. Когда цена выше VWMA, определите ее как тенденцию к росту, делайте больше; когда цена ниже VWMA, определите ее как тенденцию к снижению, делайте пробел.

  2. Для отслеживания ложных прорывов используется осциллятор RSI. Многосигналы появляются только тогда, когда RSI выше 30.

  3. Для расчета стоп-линии используется индикатор ATR. Длина ATR установлена на то же, что и VWMA, а кратность установлена на 3.5. Стоп-линия обновляется в режиме реального времени в зависимости от цены.

  4. Настройка ATR-множителя влияет на степень сжатия стоп-линии. Чем больше множитель, тем меньше частота обновления стоп-линии, и тем эффективнее отслеживать тренд.

  5. Размер позиции рассчитывается в зависимости от процента стоп-лосса внутри стратегии и учетных записей.

  6. Выйти из позиции с убытком, когда цена опускается ниже линии стоп-лосса.

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

  1. Используя индикаторы VWMA для определения направления тренда, можно постоянно ловить трендовые возможности.

  2. В дополнение к фильтру RSI можно отфильтровать некоторые ложные прорывные сигналы.

  3. ATR Stop Lines позволяют отслеживать тренды и избегать обратных стоп-аутов.

  4. Рассчитывание позиций на основе процентов учетной ставки и стоп-лосса способствует контролю риска.

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

  1. Риск убытков существует в точке перелома тренда. Следует соответствующим образом сократить позиции, чтобы снизить убытки.

  2. Неправильная настройка параметров ATR может привести к слишком чувствительной или вялой стоп-линии. Следует проверить, чтобы определить подходящие параметры.

  3. Если же тренд изменится слишком быстро, то обновление стоп-линии может не успеть, что приведет к увеличению убытков.

  4. В низко волатильных рынках следует снизить позиции и увеличить частоту сокращения стоп-линий.

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

  1. Можно тестировать различные комбинации VWMA-параметров, выбирая наиболее оптимальные для получения сигнала.

  2. Можно проверить другие параметры RSI-осциллятора, такие как перекуп и перепродажа.

  3. Можно проверить множественные параметры ATR, чтобы найти наилучшие точки для торговли между отзывом и отслеживанием.

  4. Можно комбинировать фильтрацию с другими показателями, такими как MACD, KD и т. д., чтобы улучшить качество сигнала.

  5. Оптимизировать управление позициями и стоп-лосс в зависимости от рыночных колебаний.

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

Стратегия имеет преимущества в определении тенденции, фильтрации сигналов, отслеживании потерь и т. д. Существует также риск возврата тенденции. Более эффективную стратегию можно получить путем оптимизации параметров и управления позициями.

Исходный код стратегии
/*backtest
start: 2023-10-07 00:00:00
end: 2023-10-13 00:00:00
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/
// © mohanee

//@version=4
//strategy("", overlay=true)
strategy(title="VWMA_withATRstops_strategy V2", overlay=true, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

float xATRTrailingStop=na
int pos=na

vwmalength = input(33, title="VWMA Length", minval=1, maxval=365)
//vwmalength2 = input(9, title="VWAM Short Term Length", minval=1, maxval=365)
nATRPeriod = input(33, title="ATR length", minval=1, maxval=365)
nATRMultip = input(3.5, title="ATR Multiplier")

rsiofVwmaLength=input(14, title="RSI of VWMA Length")

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)

vwmaVal=vwma(close, vwmalength)
//vwmaVal2=vwma(close, vwmalength2)
//maVal=sma(close, vwmalength)

plot(vwmaVal, color=color.orange, linewidth=2,  title="VWMA")
//plot(vwmaVal2, color=color.blue, title="VWMA Short Term")
//plot(maVal, color=color.blue, title="MA")

//rsi of vwma Longterm
rsiofVwmaVal=rsi(vwmaVal,rsiofVwmaLength)

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop:= iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos:=	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 	    iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

color1 = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

//plot(xATRTrailingStop, color=color1, title="ATR Trailing Stop")

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


//Long Entry
//strategy.entry(id="VWMA LE", long=true, qty=qty1, when= close >vwmaVal and open>vwmaVal and close>open and close > xATRTrailingStop and xATRTrailingStop>  vwmaVal)

strategy.entry(id="VWMA LE", long=true, qty=qty1, when= rsiofVwmaVal>=30 and  close>open and close>vwmaVal and pos == 1 )    ///pos == 1 means ATRStop line is green    
//vwmaVal2>vwmaVal and

plot(strategy.position_size>=1  ? xATRTrailingStop : na, color=color1, style=plot.style_linebr, title="ATR Trailing Stop")
bgcolor(strategy.position_size>=1 ? color.blue : na )

//Exit
strategy.close(id="VWMA LE",  when= strategy.position_size>=1 and crossunder(close, xATRTrailingStop)  )
//strategy.close(id="VWMA LE",  when= strategy.position_size>=1 and close<vwmaVal and open<vwmaVal and close<open )