Группа "Стол заказов MQL"

Рейтинг 2073



РЕКОМЕНДУЮ



Индикатор уровней

Доброго дня.

Нужен индикатор, который будет считать среднюю цену и волатильность по состоянию на определенную дату.
Под волатильностью в данном случае понимаю разницу между ценой открытия и ценой закрытия свечи. Естественно, если разница отрицательная, то нужно применять модуль. Свеча, которая еще не закрылась, во внимание не принимается.
Например, вводим дату 01.01.2017.
Вводим требуемое количество свечей.
Выбираем требуемый таймфрейм — требуются только месяцы, недели и дни (следует учитывать, что для каждого из них количество свечей будет разным). Индикатор рисует уровень и выдает среднюю волатильность.
Желательно внести функцию выбора цвета уровня.
Да, еще чтобы отображалось это примерно так, как на картинке:

МВ — это месячная волатильность (в скобках количество выбранных свечей) в пунктах
НВ — недельная волатильность (в скобках количество выбранных свечей) в пунктах
ДВ — дневная волатильность (в скобках количество выбранных свечей) в пунктах
СМЦ — средняя месячная цена (по состоянию на выбранную дату)
СНЦ — средняя недельная цена (по состоянию на выбранную дату)
СДЦ — средняя дневная цена (по состоянию на выбранную дату)
Дату можно не отображать, если это затратно. Но если отображать, то для всех трех уровней по отдельности. Или же в случае, указанном на картинке, когда дата одна и та же для всех — указывать только одну дату.

И еще если можно, чтобы от уровней СМЦ, СНЦ и СДЦ можно было откладывать еще уровни на величину МВ, НВ и ДВ соответственно (вверх и вниз). При этом в самом индикаторе указать количество раз, сколько нужно откладывать.
  • +3
  • Просмотров: 4466
  • 28 января 2017, 20:54
  • Altrend
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
расчет лота
Следующая запись в группе  
Заказ советника 3-я Волна
27 января 2017
29 января 2017

Комментарии (9)

+
0
Посмотрю на этой неделе.
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 2 февраля 2017, 02:39
+
0
И как движется?
avatar

  15  Altrend Автор Сообщений: 76

  • 9 февраля 2017, 08:58
+
0
То-же в ожидании… жду*hi* 
avatar

  9  gfyfc64 Сообщений: 83 - gfyfc

  • 9 февраля 2017, 13:47
+
0
Сегодня буду смотреть.
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 9 февраля 2017, 17:06
+
0
Почти готово. Линией какой уровень рисуем?




//+------------------------------------------------------------------+
//|                                                         Date.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

input string Date="01.01.2017";
input int DayCount=5;
input int WeakCount=5;
input int MonthCount=5;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string name,int x,int y,string text)
  {
   ObjectDelete(0,name);
//--- создадим текстовую метку
   ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- установим координаты метки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,1);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Yellow);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Vol(int count,ENUM_TIMEFRAMES tf)
  {
   int date=iBarShift(NULL,0,(datetime)Date);
   int vol=0;
   for(int i=date;i<=date+count;i++)
     {
      vol+=(int)(MathAbs(iOpen(NULL,tf,i)-iClose(NULL,tf,i))/_Point/count);
     }
   return(vol);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int date=iBarShift(NULL,0,(datetime)Date);
   int date1=iBarShift(NULL,PERIOD_D1,(datetime)Date);
   int date2=iBarShift(NULL,PERIOD_W1,(datetime)Date);
   int date3=iBarShift(NULL,PERIOD_MN1,(datetime)Date);

   string s="";
   string s1="Дата: "+Date;

   string s2="ДВ: "+(string)Vol(DayCount,PERIOD_D1)+"("+(string)DayCount+")";
   string s3="НВ: "+(string)Vol(WeakCount,PERIOD_W1)+"("+(string)WeakCount+")";
   string s4="МВ: "+(string)Vol(MonthCount,PERIOD_MN1)+"("+(string)MonthCount+")";

   string s5="СДЦ : "+(string)MathAbs(iOpen(NULL,PERIOD_D1,date1)+iOpen(NULL,PERIOD_D1,date1)/2);
   string s6="СНЦ : "+(string)MathAbs(iOpen(NULL,PERIOD_W1,date1)+iOpen(NULL,PERIOD_W1,date1)/2);
   string s7="СМЦ : "+(string)MathAbs(iOpen(NULL,PERIOD_MN1,date1)+iOpen(NULL,PERIOD_MN1,date1)/2);

   PutLabel("L1",125,15,s1);

   PutLabel("L2",125,30,s2);
   PutLabel("L3",125,45,s3);
   PutLabel("L4",125,60,s4);

   PutLabel("L5",125,75,s5);
   PutLabel("L6",125,90,s6);
   PutLabel("L7",125,105,s7);

   Comment("\n Date: ",Date,
           "\n Bar: ",date,
           "\n Vol: ",Vol(DayCount,PERIOD_D1));

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Редактирован: 9 февраля 2017, 21:59
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 9 февраля 2017, 20:37
+
0
Желательно, чтобы все три (СМЦ, СНЦ, СДЦ) уровня отображались. В том примере, что я в посте указал, там уровни СНЦ и СДЦ оказались за пределами отображаемого пространства.
Если уровень только один получается отображать, то можно установить опцию выбора. Если совсем сложно, то отображать СМЦ.
Благодарю.
avatar

  15  Altrend Автор Сообщений: 76

  • 10 февраля 2017, 01:04
+
0
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 10 февраля 2017, 20:50
+
0
Спасибо! очень поможет в расчетах!!!
avatar

  9  gfyfc64 Сообщений: 83 - gfyfc

  • 12 февраля 2017, 03:21
+
0
Может я чего не так тестирую.
У меня на разных таймфреймах месячная, дневная и недельная волатильности по-разному отображается. Мне какую из них смотреть? Где какая правильная версия?

И еще я какие настройки не поставлю у меня СМЦ И СНЦ совпадают все время.
avatar

  15  Altrend Автор Сообщений: 76

  • 13 февраля 2017, 11:18

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари