Привет никак не могу понять суть вынесенных функций
Я написал файл mqh
с функцией подсчета ордеров :
Компилятор ругается на b и на s, Я вынес b и s в самый верх файла mqh компилятор перестал ругаться .
Так же мне пришлось в этом файле в верху добавить extern int Magic = 1237;
Вопрос как сделать так что бы в mqh или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер
Описывать в самом советнике .....
На текущий момент если я меджик номер переношу в советника то файлы не компилятся ....
Удивительно, как извратили представление о программировании. Я не о Вас, а о программистской среде MQL-сообщества.
Файл ".mqh" - заголовочный, создается для библиотеки. В нём следует размещать прототипы функций, которые находятся в библиотеке.
Привет никак не могу понять суть вынесенных функций
Я написал файл mqh
с функцией подсчета ордеров :
Компилятор ругается на b и на s, Я вынес b и s в самый верх файла mqh компилятор перестал ругаться .
Так же мне пришлось в этом файле в верху добавить extern int Magic = 1237;
Вопрос как сделать так что бы в mqh или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер
Описывать в самом советнике .....
На текущий момент если я меджик номер переношу в советника то файлы не компилятся ....
Конкретно по Вашему "извращению":
1) сначала размещаете в своей программе описание переменных;
2) потом используете #include.
Ок !!! Тогда читайте : https://book.mql4.com/ru/metaeditor/files
Файлы типа mqh - включаемые файлы. Это - исходный текст часто используемых блоков пользовательских программ. Такие файлы могут включаться в исходные тексты экспертов, скриптов и пользовательских индикаторов на этапе компиляции. Обычно включаемые файлы содержат описания импортируемых функций (смотрите в качестве примера файлы stdlib. mqh или WinUser32.mqh), либо описания общих констант и переменных (stderror.mqh и WinUser32.mqh). Файлы типа mqh, как правило, хранятся в директории Каталог_терминала\experts\include.
Теперь понятно, кто привил эту пошлятину.
Учитесь программировать!
Не работает не совет, а его реализация. Это вещи разные ;).
И первый вариант нормально должен был компилироваться. Это, конечно, если отвлечься от полной бесполезности такой функции ;).
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 ()
и при компиляции мета едитор дописывает нужный фрагмент в моего эксперта .....
Спасибо ! Я вроде бы решил проблему ... Если что отпишусь ....
По поводу включения файлов я преследовал цель написать часто используемые куски кода типа трала модификации что бы каждый раз не писать и уменьшить код ...
В таком случае нужно писать не так: используйте функции с параметрами и такие, что не модифицируют глобальные переменные. Например, для первого случая:
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]
Гораздо меньше проблем будет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет никак не могу понять суть вынесенных функций
Я написал файл mqh
с функцией подсчета ордеров :
Компилятор ругается на b и на s, Я вынес b и s в самый верх файла mqh компилятор перестал ругаться .
Так же мне пришлось в этом файле в верху добавить extern int Magic = 1237;
Вопрос как сделать так что бы в mqh или другой тип фала вписывать только саму функцию а переменные и данные типа Тейк профит, Меджик нномер
Описывать в самом советнике .....
На текущий момент если я меджик номер переношу в советника то файлы не компилятся ....