Пользовательские индикаторы > Очень нужен индикатор VWAP

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
ZiZ
Сообщения: 19
Зарегистрирован: 19 ноя 2019, 15:32
Благодарил (а): 2 раза

Очень нужен индикатор VWAP

Непрочитанное сообщение ZiZ » 10 сен 2020, 14:00

Добрый день!
Трейдеры по всему миру уже оценили возможности индикатора VWAP, который стал определённым стандартом для продвинутых торговых терминалов.
Но в Альфе его до сих пор нет.
Кто-нибудь из опытных программистов, подарите нам этот индикатор, пожалуйста. :)
Спасибо.

Maks
Сообщения: 8
Зарегистрирован: 15 июн 2020, 15:29
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Очень нужен индикатор VWAP

Непрочитанное сообщение Maks » 10 сен 2020, 18:11

Здесь дополнительно к VWAP рисуется канал с заданным отклонением. Спасибо ОХ за заготовку)

Код: Выделить всё

function Initialize() {
   IndicatorName = "VWAPfast";
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddParameter("D", 2.1);
   
   AddSeries("VWAP", DrawAs.Line, Color.Red); 
   AddSeries("UPPER", DrawAs.Line, Color.Gray);
   AddSeries("LOWER", DrawAs.Line, Color.Gray);
   
   AddGlobalVariable("Period", Types.Int, 0); 
   AddGlobalVariable("cv", Types.Double, 0);   
   AddGlobalVariable("v", Types.Double, 0);   
   AddGlobalVariable("delta2", Types.Double, 0);   
}

function Evaluate() {
   // AlfaDirect. 2019. OX // 2020 mod by max
   // VWAP – VOLUME WEIGHTED AVERAGE PRICE
   double p = (Input.High[0] + Input.Low[0] + Input.Close[0])/3.0; 
   
   if (CurrentIndex < 500 || BarDate() != BarDate(1)) {
      Period = 1;
      cv = p * Input.Volume[0];
      v = Input.Volume[0];
      VWAP = p;
      delta2 = 0;
      UPPER = p;
      LOWER = p;
   } else {
      Period++;
      cv += p * Input.Volume[0];
      v += Input.Volume[0];
      VWAP = cv / v;
      // std - расчета разниц цены и VWAP в каждый момент времени
      delta2 += (p - VWAP) * (p - VWAP);
      double std = Math.Sqrt(delta2/Period);
      UPPER = VWAP + D * std;
      LOWER = VWAP - D * std;
   }
}
Вложения
VWAPfast.zip
(772 байт) 60 скачиваний

JASON
Сообщения: 22
Зарегистрирован: 31 янв 2017, 21:50
Благодарил (а): 3 раза

Re: Очень нужен индикатор VWAP

Непрочитанное сообщение JASON » 20 сен 2020, 22:15

Добрый день. А не могли бы написать индикатор Random Walk Index (RWI) (к примеру как здесь http://www.fxcodebase.com/code/viewtopi ... =17&t=1166) ?
спасибо.

Maks
Сообщения: 8
Зарегистрирован: 15 июн 2020, 15:29
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Очень нужен индикатор VWAP

Непрочитанное сообщение Maks » 24 сен 2020, 15:00

JASON писал(а):Добрый день. А не могли бы написать индикатор Random Walk Index (RWI) (к примеру как здесь http://www.fxcodebase.com/code/viewtopi ... =17&t=1166) ?
спасибо.


Подтверждаю:
1.jpg
1.jpg (29.19 КБ) 148 просмотров


На tradingview.com тоже несколько пользовательских вариантов есть.
Сделал два варианта: 1 - сильно упрощенная версия, 2 - более правильная, но ресурсоемкая (может тут кто-то пооптимизирует):
RWI-2.png

RWI-1.png


v.1

Код: Выделить всё

function Initialize() {
   IndicatorName = "Random Walk Index_tview1";
   AddInput("Input", Inputs.Candle);
   PriceStudy = false;   
   AddParameter("Period", 14);
   AddSeries("RWI_High", DrawAs.Line, Color.Green);
   AddSeries("RWI_Low", DrawAs.Line, Color.Red);
}

function Evaluate() {
// 09.2020 dev by maks v.1
   var D = ATR(Input, Period)[0] * Math.Sqrt(Period);

   RWI_High = (Input.High[0] - Input.Low[Period]) / D;
   RWI_Low  = (Input.High[Period] - Input.Low[0]) / D;
}


v.2

Код: Выделить всё

function Initialize() {
   IndicatorName = "Random Walk Index_tview2";
   AddInput("Input", Inputs.Candle);
   PriceStudy = false;   
   AddParameter("PeriodMi", 9);
   AddParameter("PeriodMa", 40);

   AddSeries("RWI_High", DrawAs.Line, Color.Green);
   AddSeries("RWI_Low", DrawAs.Line, Color.Red);
}

function Evaluate() {
// 09.2020 dev by maks v.2
   if (CurrentIndex >= PeriodMa) {
      double D = ATR(Input, PeriodMi)[0] * Math.Sqrt(PeriodMi);
      RWI_High = (Input.High[0] - Input.Low[PeriodMi]) / D;
      RWI_Low  = (Input.High[PeriodMi] - Input.Low[0]) / D;
      
      for (double i = PeriodMi + 1; i <= PeriodMa; i++) {
         D = ATR(Input, i)[0] * Math.Sqrt(i);
         double rwi_h = (Input.High[0] - Input.Low[i]) / D;
         double rwi_l = (Input.High[i] - Input.Low[0]) / D;
      
         if (RWI_High < rwi_h) RWI_High = rwi_h;
         if (RWI_Low  < rwi_l) RWI_Low  = rwi_l;
      }
   }
}
Вложения
Random Walk Index_tview2.zip
(608 байт) 8 скачиваний
Random Walk Index_tview1.zip
(500 байт) 13 скачиваний


Вернуться в «Пользовательские индикаторы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей