Страница 1 из 1

Random Walk Index (RWI)

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

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

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


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


На 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;
      }
   }
}

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

Добавлено: 26 сен 2020, 21:33
JASON
Добрый вечер.
Maks , большое спасибо.

Re: Random Walk Index (RWI)

Добавлено: 29 сен 2020, 12:15
nikkrav
Maks спасибо за Вашу работу. Но в конструкторе оба варианта не компилируются. Посмотрите что там не так, пожалуйста.

Re: Random Walk Index (RWI)

Добавлено: 30 сен 2020, 08:29
forkus
Пробелы попробуйте убрать в названии индикатора

Re: Random Walk Index (RWI)

Добавлено: 30 сен 2020, 12:20
Den
всё компилируется, друзья :)


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

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;
      }
   }
}