Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 357

 
STARIJ:
Попробуйте по каждому тику записывать в файл Дату, Время, Bid и результаты Ваших вычислений. Потом загрузите в Excel и проверьте. Вряд ли есть смысл согласовывать каждый десяток строк программы!

Но посмотрите, у Вас в каждой ветви условного оператора стоит return, т.е. он всегда выполняется. Тогда выносим его за пределы условного оператора. Получаем:

Bid[1] - так бывает?


Спасибо. Щас попробую. Я понял суть Вашего кода, и это уже для меня большое достижение :) Увидел свои недоработки. 

Что такое кнопка SRC?

 
STARIJ:
Попробуйте по каждому тику записывать в файл Дату, Время, Bid и результаты Ваших вычислений. Потом загрузите в Excel и проверьте. Вряд ли есть смысл согласовывать каждый десяток строк программы!

Но посмотрите, у Вас в каждой ветви условного оператора стоит return, т.е. он всегда выполняется. Тогда выносим его за пределы условного оператора. Получаем:

Bid[1] - так бывает?


Вставил я код в "конструктор" пользовательского индикатора. Скомпилировал. Выдал компилятор 1 предупреждение: two OnCalculate are defined. OHLC version will be used (О чем это говорит, не понял)

Получил скомпилированный продукт. Прикрепил к графику. Окно отдельное для графика открылось, а вот в нем никаких отображений гистограммы нет, хотя тики идут.

Что не так? Подскажите?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

Вставил я код в "конструктор" пользовательского индикатора. Скомпилировал. Выдал компилятор 1 предупреждение: two OnCalculate are defined. OHLC version will be used (О чем это говорит, не понял)

Получил скомпилированный продукт. Прикрепил к графику. Окно отдельное для графика открылось, а вот в нем никаких отображений гистограммы нет, хотя тики идут.

Что не так? Подскажите?

Вы когда код сюда вставляете, пользуйтесь кнопкой редактора сообщения SRC - вверху поля ввода сообщения есть много полезных интересностей в панели форматирования сообщения.

Не сложно же глаза поднять чуть выше вводимого вами текста? А людям куда приятнее смотреть не на портянку, а на нормальный код, верно же?

Я ваш код вставил за вас в ваше сообщение правильно (SRC)

 
Artyom Trishkin:

Вы когда код сюда вставляете, пользуйтесь кнопкой редактора сообщения SRC - вверху поля ввода сообщения есть много полезных интересностей в панели форматирования сообщения.

Не сложно же глаза поднять чуть выше вводимого вами текста? А людям куда приятнее смотреть не на портянку, а на нормальный код, верно же?

Я ваш код вставил за вас в ваше сообщение правильно (SRC)


Да. Спасибо. Не знал

 
YarTrade:

Выдал компилятор 1 предупреждение: two OnCalculate are defined. OHLC version will be used (О чем это говорит, не понял)

Получил скомпилированный продукт. Прикрепил к графику. Окно отдельное для графика открылось, а вот в нем никаких отображений гистограммы нет, хотя тики идут.

Что не так? Подскажите?

Раньше функция называлась Start, теперь в советнике называется OnTick, а в индикаторе OnCalculate. Компилятор предупреждает: у Вас одна и та же функция дважды под разными названиями. Содержимое Start переместите в OnCalculate и удалите Start. Еще бы надо в программе описать, что и как должно отображаться. Сначала решите это сами - какая картинка должна получиться? Лучше изучение языка MQL начать с написания скриптов. Советник - сложнее, индикатор еще сложнее

 
STARIJ:

Раньше функция называлась Start, теперь в советнике называется OnTick, а в индикаторе OnCalculate. Компилятор предупреждает: у Вас одна и та же функция дважды под разными названиями. Содержимое Start переместите в OnCalculate и удалите Start. Еще бы надо в программе описать, что и как должно отображаться. Сначала решите это сами - какая картинка должна получиться? Лучше изучение языка MQL начать с написания скриптов. Советник - сложнее, индикатор еще сложнее


Что-то не получается у меня вставить содержимое Start в OnCalculate, выдает кучу ошибок 

 
YarTrade:  Что-то не получается у меня вставить содержимое Start в OnCalculate, выдает кучу ошибок


Индикатор отображает информацию только с момента запуска. В окне Данных (Ctrl-D) отображаются данные свечи, на которую указывает курсор

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:) 

а как Вы сформулируете создавшееся положение с названиями функций?
 
STARIJ:
а как Вы сформулируете создавшееся положение с названиями функций?

start - устаревшее название. OnTick() - актуальное название функции обработки тиков.

А так, без разницы как определять, просто слово "модно" улыбнуло.

 
Alexey Kozitsyn:

start - устаревшее название. OnTick() - актуальное название функции обработки тиков.

А так, без разницы как определять, просто слово "модно" улыбнуло.

Устаревшее перестает использоваться. А start живет и будет жить...