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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir Pastushak
103316
Vladimir Pastushak  

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

Я написал файл 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 или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер

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

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

PapaYozh
3768
PapaYozh  
VOLDEMAR:

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

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

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

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

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

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

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

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


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

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

PapaYozh
3768
PapaYozh  
VOLDEMAR:

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

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

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

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

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

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

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

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


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

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

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

Vladimir Pastushak
103316
Vladimir Pastushak  

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

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

PapaYozh
3768
PapaYozh  
VOLDEMAR:

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

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


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

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

Vladimir Pastushak
103316
Vladimir Pastushak  

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

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

PapaYozh
3768
PapaYozh  
VOLDEMAR:

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

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

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

Vladyslav Goshkov
2243
Vladyslav Goshkov  
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). Или нужно указывать путь к директорию, в котором находится файл.

Vladimir Pastushak
103316
Vladimir Pastushak  

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

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

Vladimir Pastushak
103316
Vladimir Pastushak  

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

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

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

Vladyslav Goshkov
2243
Vladyslav Goshkov  
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]

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

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