Скачать MetaTrader 5

Помогите Структуры и MQH библиотека

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь найти ответ на вопрос? Воспользуйся поиском!
Evgeniy Zykov
768
Evgeniy Zykov 2016.01.26 21:15 

Приветствую. Помогите cвязать библиотеку MQH с советником MQL4 . Мозг сломал. Нужно передать из библиотеки данные посредством структуры.

Код для проверки прилагаю. Помогите!!! Это не советник, Этот код написан специально для проверки. 

 

//+------------------------------------------------------------------+

//|                                                   Arrey+mqn.mq4 |

//|                                     Copyright 2016, ForTorg ZEVs |

//|                            https://www.mql5.com/ru/users/fortorg |

//+------------------------------------------------------------------+

#property copyright "Copyright 2016, ForTorg ZEVs"

#property link      "https://www.mql5.com/ru/users/fortorg"

#property version   "1.00"

#property strict

#include <ArrMQH.mqh>

int     BBars=0;

bool    New_Bar=true;

struct DATA_ARREY            // Данные по сигналу

  {

   datetime          time;              // Время Нового бара

   int               shet;               // Счетчик баров

                     DATA_ARREY() // Конструктор

     {

      time=0;            // Время Нового бара

      shet=0;            // Счетчик баров

     }

  };

DATA_ARREY globDataArray[1];

int OnInit()

  {

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

  }

//+------------------------------------------------------------------+

void OnTick()

  {

   Fun_New_Bar();    // Проверяем новый бар

   if(New_Bar)

     {

      TestArreyMQH(globDataArray);

      Comment("",TimeToStr(TimeCurrent(),TIME_SECONDS),

              "\n Поймался новый бар =   ",globDataArray[0].time,

              "\n    Счетчик  Баров  =   ",globDataArray[0].shet);

      New_Bar=false;

     }

  }

//+------------------------------------------------------------------+

void Fun_New_Bar() // Ф-ия обнаружения ..нового бара

  {

   if(BBars==iBars(Symbol(),_Period)) New_Bar=false;

   if(BBars!=iBars(Symbol(),_Period)) {BBars=iBars(Symbol(),_Period);New_Bar=true;}

  }

////+--------Эту Функцию хочу запихнуть в MQH библиотеку-------------------------------------+

//int TestArreyMQH(DATA_ARREY &obj[])

//  {

//   obj[0].time=TimeCurrent();

//   obj[0].shet++;

//   Print(__FUNCTION__,": Поймался новый бар:  Время =   ",TimeToString(Time[0]));    //--- Исполняем

//   return(0);

//  }

//+------------------------------------------------------------------+

Как бы я не пытался получаю ошибки типа 'globDataArray' - parameter conversion not allowed Arrey+MQH.mq4 38 20

//+------------------------------------------------------------------+

//|                                                       ArrMQH.mqh |

//|                                     Copyright 2015, ForTorg ZEVs |

//|                            https://www.mql5.com/ru/users/fortorg |

//+------------------------------------------------------------------+

#property copyright "Copyright 2015, ForTorg ZEVs"

#property link      "https://www.mql5.com/ru/users/fortorg"

#property strict

struct DATA_ARREY_MQH            // Данные по сигналу и ордеру эксперта

  {

   datetime          time;              // Время Нового бара

   int               shet;               // Счетчик баров

                     DATA_ARREY_MQH() // Конструктор

     {

      time=0;            // Время Нового бара

      shet=0;            // Счетчик баров

     }

  };

DATA_ARREY_MQH globArrayMQH[1];

//+------------------------------------------------------------------+

int TestArreyMQH(DATA_ARREY_MQH &obj[])

  {

   obj[0].time=TimeCurrent();

   obj[0].shet++;

               Print(__FUNCTION__,": Поймался новый бар:  Время =   ",TimeToString(Time[0]));    //--- Исполняем

return(0);

  }

//+------------------------------------------------------------------+


 Помогите связать советника с библиотекой.

 


Vasyl Nosal
18540
Vasyl Nosal 2016.01.26 22:44  

include просто вставляет весь код инклудного файла.

 

Может тебе import нужен? 

Alexander Bereznyak
21476
Alexander Bereznyak 2016.01.26 23:13  
попробуйте убрать объявление структуры в файле mqh
Evgeniy Zykov
768
Evgeniy Zykov 2016.01.26 23:21  
Alexander Bereznyak:
попробуйте убрать объявление структуры в файле mqh

Пробовал тогда выдает типа такого 'DATA_ARREY' - declaration without type ArrMQH.mqh и еще кучу ошибок.

ругается в первую очередь на эту строку 

int TestArreyMQH(DATA_ARREY &obj[])

 DATA_ARREY необъявлен.

Может так будет проще разобраться...
Файлы:
ArrMQH.mqh 2 kb
Dmitry Fedoseev
42887
Dmitry Fedoseev 2016.01.27 06:29  
В mqh все удалить и перенести в него структуру, функцию и объявление массива (в там порядке должны располагаться).
Alexey Viktorov
6788
Alexey Viktorov 2016.01.27 06:51  
Это не структура. Повнимательней прочти в документации о структуре и остановись там где начинается описание классов. Не стоит усложнять себе жизнь используя класс в виде и вместо структуры.
Evgeniy Zykov
768
Evgeniy Zykov 2016.01.27 09:08  
Dmitry Fedoseev:
В mqh все удалить и перенести в него структуру, функцию и объявление массива (в там порядке должны располагаться).

 Как я не пытался результат отрицательный; не объявлен или уже  объявлен. 

Мне нужно передать данные из MQH в MQL4 советник и дальше с ними работать в советнике. В файл MQH ничего не передается. Он получает котировки, обрабатывает и отправляет сигнал советнику.

Может эти структуры и называются иначе, но суть то не меняется. 

Alexey Viktorov
6788
Alexey Viktorov 2016.01.27 09:25  
ForTorg ZEVs:

 Как я не пытался результат отрицательный; не объявлен или уже  объявлен. 

Мне нужно передать данные из MQH в MQL4 советник и дальше с ними работать в советнике. В файл MQH ничего не передается. Он получает котировки, обрабатывает и отправляет сигнал советнику.

Может эти структуры и называются иначе, но суть то не меняется. 

В советнике не надо создавать структуру, достаточно только объявить переменную типа структуры.

DATA_ARREY_MQH globArrayMQH[1];

или лучше

DATA_ARREY_MQH globArrayMQH;

Зачем массив с одним элементом? Хотя если предполагаешь потом увеличивать, то пусть будет так.

НО в инклюднике её объявлять не надо.

В твоём-же коде присутствуют две структуры и создаёшь две переменные.

И ещё вопрос: для чего в структуре конструктор?

Evgeniy Zykov
768
Evgeniy Zykov 2016.01.27 09:28  
Alexey Viktorov:
Это не структура. Повнимательней прочти в документации о структуре и остановись там где начинается описание классов. Не стоит усложнять себе жизнь используя класс в виде и вместо структуры.

Я еще не так давно писал вообще с массивами. И меня все устраивало и работало. Перешeл на структуры. Все работает также, только код при том же функционале вырос раза в 2, и стал менее читабельным.

Советник разросся до 3тыс. строк. Вот и хочу пол советника запихнуть в MQH тем более что эта часть сова работает по запросу( например на рождении нового бара.). А тут засада на ровном месте. 

Alexey Viktorov
6788
Alexey Viktorov 2016.01.27 09:36  
ForTorg ZEVs:

Я еще не так давно писал вообще с массивами. И меня все устраивало и работало. Перешeл на структуры. Все работает также, только код при том же функционале вырос раза в 2, и стал менее читабельным.

Советник разросся до 3тыс. строк. Вот и хочу пол советника запихнуть в MQH тем более что эта часть сова работает по запросу( например на рождении нового бара.). А тут засада на ровном месте. 

Не удивительно. Если через строку вставлять по 3 пустые то советник разрастётся до 9 тыс. строк.

Суть файла .mqh в том, чтобы некоторые функции и/или структуры можно было хранить вне основного кода. Но при компиляции эти функции вносятся в код программы как родные. Тоесть, если у тебя в .mqh есть структура, то к ней из советника надо обращаться так-же как если она в основном коде, но при этом в начале кода надо компилятору объяснить что если здесь чего-то не находишь, то посмотри в инклюднике.

#include <ArrMQH.mqh>

Vasyl Nosal
18540
Vasyl Nosal 2016.01.27 09:36  
ForTorg ZEVs:

Я еще не так давно писал вообще с массивами. И меня все устраивало и работало. Перешeл на структуры. Все работает также, только код при том же функционале вырос раза в 2, и стал менее читабельным.

Советник разросся до 3тыс. строк...

Поддерживаю!!!!!!!!!!!!
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий