Профи помогите !!!!

 

Привет никак не могу понять суть вынесенных функций

Я написал файл mqh

с функцией подсчета ордеров :

int Orders ()
{
   int b=0,s=0,n=0,bs=0,ss=0,bl=0,sl=0;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {if(OrderSelect(i, SELECT_BY_POS))
   {if(OrderSymbol()==Symbol()      )
   {                                                            n ++;    
      if (OrderType()==OP_BUY      &&OrderMagicNumber()==Magic){b ++;}
      if (OrderType()==OP_SELL     &&OrderMagicNumber()==Magic){s ++;}
      if (OrderType()==OP_BUYSTOP  &&OrderMagicNumber()==Magic){bs++;}
      if (OrderType()==OP_SELLSTOP &&OrderMagicNumber()==Magic){ss++;}
      if (OrderType()==OP_BUYLIMIT &&OrderMagicNumber()==Magic){bl++;}
      if (OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==Magic){sl++;}     
   }}}
}

Компилятор ругается на b и на s, Я вынес b и s в самый верх файла mqh компилятор перестал ругаться .

Так же мне пришлось в этом файле в верху добавить extern int Magic = 1237;

Вопрос как сделать так что бы в mqh или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер

Описывать в самом советнике .....

На текущий момент если я меджик номер переношу в советника то файлы не компилятся ....

 
VOLDEMAR:

Привет никак не могу понять суть вынесенных функций

Я написал файл mqh

с функцией подсчета ордеров :

Компилятор ругается на b и на s, Я вынес b и s в самый верх файла mqh компилятор перестал ругаться .

Так же мне пришлось в этом файле в верху добавить extern int Magic = 1237;

Вопрос как сделать так что бы в mqh или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер

Описывать в самом советнике .....

На текущий момент если я меджик номер переношу в советника то файлы не компилятся ....


Удивительно, как извратили представление о программировании. Я не о Вас, а о программистской среде MQL-сообщества.

Файл ".mqh" - заголовочный, создается для библиотеки. В нём следует размещать прототипы функций, которые находятся в библиотеке.

 
VOLDEMAR:

Привет никак не могу понять суть вынесенных функций

Я написал файл mqh

с функцией подсчета ордеров :

Компилятор ругается на b и на s, Я вынес b и s в самый верх файла mqh компилятор перестал ругаться .

Так же мне пришлось в этом файле в верху добавить extern int Magic = 1237;

Вопрос как сделать так что бы в mqh или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер

Описывать в самом советнике .....

На текущий момент если я меджик номер переношу в советника то файлы не компилятся ....


Конкретно по Вашему "извращению":

1) сначала размещаете в своей программе описание переменных;

2) потом используете #include.

 

Сделал как вы говорите вот результат

не работает ваш совет ....

 
VOLDEMAR:

Сделал как вы говорите вот результат

не работает ваш совет ....


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

Так, что прежде, чем писать "Ваш не работает", проверьте всё ли правильно Вы сделали.

 

Ок !!! Тогда читайте : https://book.mql4.com/ru/metaeditor/files

Файлы типа mqh - включаемые файлы. Это - исходный текст часто используемых блоков пользовательских программ. Такие файлы могут включаться в исходные тексты экспертов, скриптов и пользовательских индикаторов на этапе компиляции. Обычно включаемые файлы содержат описания импортируемых функций (смотрите в качестве примера файлы stdlib. mqh или WinUser32.mqh), либо описания общих констант и переменных (stderror.mqh и WinUser32.mqh). Файлы типа mqh, как правило, хранятся в директории Каталог_терминала\experts\include.

 
VOLDEMAR:

Ок !!! Тогда читайте : https://book.mql4.com/ru/metaeditor/files

Теперь понятно, кто привил эту пошлятину.

Учитесь программировать!

 
VOLDEMAR:

Сделал как вы говорите вот результат

не работает ваш совет ....

Не работает не совет, а его реализация. Это вещи разные ;).

И первый вариант нормально должен был компилироваться. Это, конечно, если отвлечься от полной бесполезности такой функции ;).

int Orders ()
{
   int b=0,s=0,n=0,bs=0,ss=0,bl=0,sl=0;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {if(OrderSelect(i, SELECT_BY_POS))
   {if(OrderSymbol()==Symbol()      )
   {                                                            n ++;    
      if (OrderType()==OP_BUY      &&OrderMagicNumber()==Magic){b ++;}
      if (OrderType()==OP_SELL     &&OrderMagicNumber()==Magic){s ++;}
      if (OrderType()==OP_BUYSTOP  &&OrderMagicNumber()==Magic){bs++;}
      if (OrderType()==OP_SELLSTOP &&OrderMagicNumber()==Magic){ss++;}
      if (OrderType()==OP_BUYLIMIT &&OrderMagicNumber()==Magic){bl++;}
      if (OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==Magic){sl++;}     
   }}}
}

У Вас ошибка где-то в другом месте.

А кажется понял - в первом случае Вы использовали b и s где-то в другом месте программы ? Если да, то прочитайте про область видимости переменных. В этом случае переменные, которые описаны в функции, видны только в ней. И подсчет смысла не имеет - Вы ничего не возвращаете и ни как результатом расчетов в функции не пользуетесь.

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

ЗЫ Вы точно включили нужный файл ? По директиве #include файл ищется в директории Include не зависимо от его расширения (.mqh или .mq4). Или нужно указывать путь к директорию, в котором находится файл.

 

Спасибо ! Я вроде бы решил проблему ... Если что отпишусь ....

По поводу включения файлов я преследовал цель написать часто используемые куски кода типа трала модификации что бы каждый раз не писать и уменьшить код ...

 

Вот как я это сделал посмотрите может кому поможет

Таким образом теперь что бы включить обычный трал мне не нужно перерывать всю свою базу кодов в поиске нужного кода, или переписывать его с ноля, я просто в советник дописываю Tral ()

и при компиляции мета едитор дописывает нужный фрагмент в моего эксперта .....

 
VOLDEMAR:

Спасибо ! Я вроде бы решил проблему ... Если что отпишусь ....

По поводу включения файлов я преследовал цель написать часто используемые куски кода типа трала модификации что бы каждый раз не писать и уменьшить код ...

В таком случае нужно писать не так: используйте функции с параметрами и такие, что не модифицируют глобальные переменные. Например, для первого случая:

int Orders (int &OrdCount[])
{
   int i=0, n=0;
   for( i=ArraySize(OrdCount)-1; i>=0; i--)
       OrdCount[i]=0;
   for( i=OrdersTotal()-1; i>=0; i--)
   {
       if(!OrderSelect(i, SELECT_BY_POS))continue;
       if(OrderSymbol()==Symbol()      )
       {  n++;    
          OrdCount[OrderType()]++;
       }
   }
return(n);
}

Нужное количество, например, рыночных ордеров на покупку получите так OrdCount[OP_BUY]

Гораздо меньше проблем будет.

Причина обращения: