Объёмы в МТ4

 
Слава или Ренат, подскажите пожалуйста, почему значения тиковых объёмов в МТ3 подключенном к реалу в Алпари отличаются почти в 2 раза от тиковых объёмов в МТ4 подключенном на демо в Метаквот ?

Одинаков ли алгоритм вычисления Volumes в МТ3 и МТ4 ?

Как мне получать прежние как в МТ3 объёмы ? Или всё же всё дело в причине демо\реал ?
 
Одинаков ли алгоритм вычисления Volumes в МТ3 и МТ4 ?

Да, одинаков - это тиковый объем (количество изменений цены в единицу времени).

Разница из-за разных датафидов. Видимо у Альпари более интенсивный поток цен, а у нас более сглаженный.
 
Ренат, спасибо за оперативный ответ.

Раз уж вы сейчас у руля, то продолжим.

Только, что подключился к чисто демо на Алпари через МТ3 и МТ4.

Наблюдаю ту же разницу в тиковых объёмах, которую я описывал ранее.
Склонен думать, что это всётаки баг или фича МТ4.

Разберитесь с этим, пожалуйста.
 
МТ3 и МТ4

Это разные датафиды (даже внутри Альпари), так как для МТ4 не все датафиды сконвертированы из MT3.
 
Ренат. Собственно проблема возникла в процессе переноса одного очень простенького индикатора. привожу код в МТ3(работающий) и код в МТ4 оличающийся довольно сильно по результатам. Может быть я просто криво переписал ?

Для МТ3
/*[[
            Name := indicator
            Author := monglo
            Link := 
            Separate Window := Yes
            First Color := Blue
            First Draw Type := Line
            First Symbol := 217
            Use Second Data := Yes
            Second Color := Red
            Second Draw Type := Line
            Second Symbol := 218
]]*/
Inputs: barcount(10), Ind_length(1000);
Variable : shift(0),sum(0),i(0),vol(0);
SetLoopCount(0);

For shift=Ind_length Downto 0 Begin
	sum=0;
	for i=shift to shift+barcount {
		if shift=0 then vol=v[i-1]/1000 else vol=v[i]/1000;
		sum=sum-((c[i]-o[i])/(h[i]-l[i])*vol);
} 
	sum=sum/(barcount+1);
	SetIndexValue(shift,sum);
End;



Для МТ4

//+------------------------------------------------------------------+
//|                                                            1.mq4 |
//|                                                      mong lo inc |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "mong lo inc"
#property link      ""
#property indicator_separate_window

extern int barcount=10;
extern int Ind_Length=1000;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double EEE[];

int init()
  {  
  string short_name;
//---- indicator line
   SetIndexStyle(0,DRAW_LINE,EMPTY,0,RoyalBlue);
   SetIndexBuffer(0,EEE);
   SetIndexEmptyValue(0,0);
//---- name for DataWindow and indicator subwindow label
   short_name="FirstIndicator";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,100);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int i,j;
    double vol;
    double sum;
    
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   for (i = Ind_Length-counted_bars;i>0;i--)
   { sum = 0;
   for (j=i;j<i+barcount;j++)
      {
      if (i==0) 
		  vol=Volume[j-1]/1000; 
		else vol=Volume[j]/1000;
		
		if (((High[j]-Low[j])*vol)!=0)
    sum = sum - (Close[j]-Open[j])/((High[j]-Low[j])*vol);
    else
/// Деление на ноль в МТ3 ошибок не выдавались, а сейчас приходится обходить
    sum = sum - (Close[j]-Open[j])/((High[j]-Low[j])*vol+0.000001*Point);
     }
     
	sum=sum /(barcount+1);
   EEE[i] = sum;

// Поиск ошибок

if (i == 1) Print(Close[i],Open[i],High[i],Low[i],Volume[i]);
if (i == 2) Print(Close[i],Open[i],High[i],Low[i],Volume[i]);
if (i == 3) Print(Close[i],Open[i],High[i],Low[i],Volume[i]);
if (i == 4) Print(Close[i],Open[i],High[i],Low[i],Volume[i]);

  }  
//----
   return(0);
  }
 
МТ3 и МТ4

Это разные датафиды (даже внутри Альпари), так как для МТ4 не все датафиды сконвертированы из MT3.


Изменится ли со временем к тому датафиду, что был в МТ3 или нет? От кого это зависит ?

Могу ли я сам привести (конвертировать) датафиды из МТ3 в МТ4. Так, чтобы в МТ4 было также, как в МТ3 ?
 
МТ3 и МТ4

Это разные датафиды (даже внутри Альпари), так как для МТ4 не все датафиды сконвертированы из MT3.


Изменится ли со временем к тому датафиду, что был в МТ3 или нет? От кого это зависит ?

Могу ли я сам привести (конвертировать) датафиды из МТ3 в МТ4. Так, чтобы в МТ4 было также, как в МТ3 ?

Это зависит от брокерской компании.
 
оличающийся довольно сильно по результатам

Что значит "довольно сильно" после использования другого коэффициента (2000 вместо 1000) ?
Как можно менять коэффициент в 2 раза, а потом спрашивать - почему результаты другие?
 
оличающийся довольно сильно по результатам

Что значит "довольно сильно" после использования другого коэффициента (2000 вместо 1000) ?
Как можно менять коэффициент в 2 раза, а потом спрашивать - почему результаты другие?


Ренат, сильно извиняюсь. Уже исправил. Конечно же там тоже стоит 1000. Результат действительно сильно отличается. Этот индикатор я использую на Н4. Посмотри сам.

А 2000 - это была попытка подогнать под новые Волумы. Результат не впечатляет. Разница всё равно очень сильная. Индикатор потерял свою информативность.
 
А ещё, Ренат, давай синхронизируем понятия.

Объясни пожалуйста что ты понимаешь под понятием датафид.

Вдруг, я понимаю это слово по-другому.

Почему-то, МТ3 и на реале и на демо считает приведённый выше код индикатора с одним результатом,
а МТ4 на демо, что в Алпари, что в Метаквотс считает приведённый код с другим результатом.

Следовательно, либо ошибка в коде индикатора на МТ4(я поправил код для МТ4), либо ошибка в обработке кода, либо настолько сильно отличаются котировки сервера для МТ3 от котировок сервера для МТ4.

Вопрос - так в чём же дело ?
 
датафид

Это источник данных, используемый сервером в данный момент и для данного символа. На сервере может быть несколько источников данных одновременно для разных инструментов. Кроме того, приходящий поток данных фильтруется и сглаживается.

Вопрос - так в чём же дело ?

Дело в том, что любой стандартный(описанный в книгах) индикатор, базирующийся на объемах, практически слабо применим на форексе из-за того что тут используется тиковый объем, который является лишь относительным показателем _активности_ рынка, а не _объемов_ проводимых операций. Естественно, активность и реальные объемы коррелируют, но этого недостаточно.

Если хотите сравнить полученные индикаторы - экспортируйте график из МТ3, импортируйте его в МТ4 (тем самым решив главную задачу - соблюдение одинаковости исходных данных) и проверьте результаты индикаторов в контрольных точках. Если результаты не сойдутся, то пришлите, пожалуйста, скриншоты на stringo AT metaquotes . ru

В расчетах Вы активно используете High и Low, которые в МТ3 и МТ4 различаюся. В МetaTrader 3 бары строятся под (bid+ask)/2 , а в MetaTrader 4 - только по бидам.

Надеюсь, Вы понимаете что результат теханализа напрямую зависит от исходных данных? Если есть хоть малейшее расхождение в исходных данных, то результаты могут очень сильно различаться. Это в первую очередь касается слишком чувствительных функций типа осцилляторов и в меньшей степени толстокожих мувингов. Выход точно такой же как и при написании экспертов - использовать "робастые/толстокожие" индикаторы, а не излишне чувствительные, которые нужно постоянно подгонять под рынок.
Причина обращения: