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

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
m4Dmitry
Сообщения: 72
Зарегистрирован: 21 май 2018, 22:04
Благодарил (а): 60 раз
Поблагодарили: 3 раза

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

Непрочитанное сообщение m4Dmitry » 16 янв 2021, 09:42

Поддерживаю коллегу, если можно прикрутить динамичное изменение точки 0, то это будет просто огонь ;)

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

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

Непрочитанное сообщение BugsDigger » 16 янв 2021, 15:05

Вариант с ручным заданием точки начала.

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

function Initialize()
{
 IndicatorName = "VWAP4";
 PriceStudy = true;
 AddInput("Input", Inputs.Candle);   

 AddParameter("Start", DateTime.Now.ToString());

 AddSeries("VWAP4", DrawAs.Line, Color.Orange);
     
 AddGlobalVariable("pq", Types.Double, 0.0);   
 AddGlobalVariable("q", Types.Double, 0.0);   
}

function Evaluate()
{
 string s=Start.stringValue;
 DateTime start=Convert.ToDateTime(s);
// if(CurrentIndex==0)
//  ShowMessage(String.Format("VWAP4 Start: {0}", start));
 
 if(CurrentTime<start)
 {
  return;
  // pq=0.0;
  // q=0.0;
 }
 
 double p0=(Input.High[0]+Input.Low[0]+Input.Close[0])/3.0;
 double q0=Input.Volume[0];
 pq+=p0*q0;
 q+=q0;

 if(q!=0) VWAP4[0]=pq/q;
 else VWAP4[0]=(CurrentIndex>0 ? VWAP4[-1] : 0.0);
}

Будет ли это работать? Неоднозначно. Если точка старта будет очень далеко в прошлом (~ нескольких тысяч баров; точное значение неизвестно, оно плавающее), то индикатор будет инициализировать себя уже после этой далекой точки, т.е. точка старта будет позже. В практическом плане это ограничение существенно на N-секундных таймфреймах (например, на секундах час - это уже 3600 баров, не забывайте).

Также следует учитывать, что до точки старта данных нет, поэтому в скриптах за нее залазить нельзя.

Изменять точку старта можно при счете индикатора из другого скрипта; значение точки старта д.б. строкой в формате даты времени, заданном в настройках Windows (обычно типа "10.12.2020 10:20:00"). Вызывается ли нормально из других скриптов с этим параметром-строкой, не проверял. Вроде препятствий к этому быть не должно, да кто ж знает.

ifinch
Сообщения: 14
Зарегистрирован: 14 янв 2021, 14:47
Благодарил (а): 1 раз
Поблагодарили: 1 раз

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

Непрочитанное сообщение ifinch » 01 фев 2021, 10:13

а можно лт как-то сделать чтобы была возможность задавать произвольное количество отклонений, т.е. что бы это было не всегда 3 отклонения или 5, а в зависимости от того, сколько надо, ну и задать для каждого отклонения его значение?

баблос
Сообщения: 1
Зарегистрирован: 01 апр 2021, 16:26

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

Непрочитанное сообщение баблос » 01 апр 2021, 16:32

добрый день подскажите как из дневного сделать месячный vwap?

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

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

Непрочитанное сообщение BugsDigger » 06 ноя 2021, 09:57

Универсальный вариант с бегущим окном (Period>0) или с накоплением от начала дня (Period<=0).

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

function Initialize()
{
 IndicatorName = "VWAP3";
 PriceStudy = true;
 AddInput("Input", Inputs.Candle);   
   
 AddParameter("Period", 10, "Период");
 AddSeries("VWAP3", DrawAs.Line, Color.Orange);
   
 AddGlobalVariable("cv", Types.Double, 0.0);   
 AddGlobalVariable("v", Types.Double, 0.0);   
}

function Evaluate()
{
 int period=(int)Period;
 if(period<=0 && BarDate()!=BarDate(1))  // period=0 - считать внутри дня
 {
  cv=0.0; v=0.0;
 }

 double p0=(Input.High[0]+Input.Low[0]+Input.Close[0])/3.0;
 double q0=Input.Volume[0];
 cv+=p0*q0;
 v+=q0;

 if(period<=0 || CurrentIndex<period)
 {
  if(v!=0) VWAP3[0]=cv/v; else
  if(CurrentIndex>0) VWAP3[0]=VWAP3[-1];
  else VWAP3[0]=0.0;
 }
 else
 {
  double p1=(Input.High[-period]+Input.Low[-period]+Input.Close[-period])/3.0;
  double q1=Input.Volume[-period];
 
  cv-=p1*q1;
  v-=q1;
  if(v!=0) VWAP3[0]=cv/v;
  else VWAP3[0]=VWAP3[-1];
 }
}


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

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

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