Liv Опубликовано 1 июня, 2007 Жалоба Поделиться Опубликовано 1 июня, 2007 (изменено) Для того, чтобы не делать одного и того же по нескольку раз нужно сделать один раз и разместить в библиотеку. После этого, включая ссылку на библиотеку, пользоваться во всех своих скриптах, индикаторах и советниках.И так, начнём.Загрузить MetaEditor можно четырьмя способами:нажать кнопку http://forex.orotukan.ru/images/btn01.jpg в вашем терминалеправой кнопкой мышки щёлкнуть на каком-либо пользовательском советнике, индикаторе или скрипте в окне "Навигатор", вызвать контекстное меню и там выбрать "Изменить"найти на диске программу MetaEditor.exe, которая должна находиться в корневом каталоге вашего терминала (обычно здесь: C:\Program Files\MetaQuote\ - или у вас последняя часть будет по другому) и запустить еёв системном меню "Пуск" найти ссылки на ваш терминал и там запустить MetaEditorMetaEditor я буду называть в дальнейшем Редактор, так будет удобнее. В Редакторе, в главном меню "Файл" -> "Создать", или нажать самую левую кнопку (с плюсом) под меню, или нажать на клавиатуре Ctrl+N. Откроется окно "Мастер создания советника". Мы пока вибираем "Библиотека функций" -> "Далее"http://forex.orotukan.ru/images/new01.jpg Затем нужно ввести имя вашей библиотеки в поле "Имя:", например так: моя_библиотека и нажать кнопку "Готово". Если вы введёте, здесь же, все свои данные (для копирайта :) ), то они запомнятся и будут везде проставляться автоматически. Итак, заготовка для нашей библиотеки готова. Мы будем её периодически пополнять, по мере нашего обучения.Внимание Для того, чтобы исходный код был с расцвеченным синтаксисом нужно его поместить между двумя инструкциями: [MQL] ... [/MQL] точно так же, как квотирование. Изменено 1 июня, 2007 пользователем Liv Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 1 июня, 2007 Автор Жалоба Поделиться Опубликовано 1 июня, 2007 Любая библиотека, как скомпиллированная библиотека .EX4, так и системные библиотеки Windows .DLL включаются в модуль очень просто:MQL/* сначала мы определяем саму библиотеку */#import "kernel32.dll" /* в каждой библиотеке определяем функции, которые мы будем использовать */ bool Beep(double* dwFreq, double* dwDuration);#import "User32.lib" int* CallWindowProc(int* lpPrevWndFunc, double* hWnd, string* Msg, int* wParam, int* lParam);#import "моя_библиотека.ex4" int MyCalculator(int value,int value2); /* наконец - закрываем объявление */#import Файлы библиотек будут искаться в такой последовательности:experts\librariesexpertsсистемные каталогиНе желательно использовать полный путь доступа к указаной библиотеке, т.к. файл может переместиться в другое место и тогда придётся перекомпиллировать модуль. Для большей информации по импорту библиотек, нужно выделить слово import и нажать клавишу F1. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 1 июня, 2007 Автор Жалоба Поделиться Опубликовано 1 июня, 2007 Одна из функций, которая периодически используется, это функция предствления таймфрэйма в красивый строковый вид. Сам MQL использует для этого целые числа, маскируя их в константах такого вида: PERIOD_M1. Итак, заносим в нашу библиотеку первую функцию:MQL//////////////////////////////////////////////////////////////////////// функция выдаёт строчку символов в виде текущего периодаint ПоказатьПериод(int ТекущийПериод) { string ret; // это будем возвращать после назначения // смотрим - какой период и назначаем соответствующую строчку switch(ТекущийПериод) { case PERIOD_M1: ret="M1" ; break: case PERIOD_M5: ret="M5" ; break: case PERIOD_M15: ret="M15" ; break: case PERIOD_M30: ret="M30" ; break: case PERIOD_H1: ret="H1" ; break: case PERIOD_H4: ret="H4" ; break: case PERIOD_D1: ret="D1" ; break: case PERIOD_W1: ret="W1" ; break: case PERIOD_MN1: ret="MN1" ; break: } return(ret);} Внимание! Инструкция switch использует только целые константы. Соответствено, PERIOD_M1 и т.д. - это встроенные целые константы, обозначающие период таймфрэйма.После проверки соответствия, переменной ret назначается строка, обозначающая наше представление периода, а не целое число минут. После чего проверка прерывается (break) и с помощью инструкции return(ret) функция возвращает строчку. Внимание! У библиотечных функций не должно быть параметров по-умолчанию. Для использования функцию нужно объявить в вашем модуле:MQL#import "моя_библиотека.ex4" int ПоказатьПериод(int ТекущийПериод);#import Теперь в вашем модуле эта функция может свободно использоваться:MQLstring ТекущийПериод = ПоказатьПериод(Period()); Для большей информации по используемым функциям, инструкциям, константам выделите текст и нажмите клавишу F1. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 6 июня, 2007 Автор Жалоба Поделиться Опубликовано 6 июня, 2007 Следующая функция в нашу библиотеку:MQL/*Автор: MAMOHT направил эту функцию в "Хитрости и трюки MQL" но я думаю, что её место в нашей библиотеке*/int ПроверкаПерекрещивания( double Массив1[], // два массива, которые проверяются double Массив2[], int Сдвиг=0, // сдвиг в историю, если надо int Расхождение=0, // минимальное расхождение в пунктах, которое не считается переплетением int Глубина=0 // как глубоко в историю искать факт пересечения ) {/* Возвращает: 0 - не пересекается 1 - Массив1 пересекает Массив2 снизу вверх -1 - Массив1 пересекает Массив2 сверху вниз */ int i; if (Массив1[Сдвиг] > Массив2[Сдвиг]) { // Массив1 больше, ищем пересечение снизу вверх for( i=0; i<Глубина; i++) { if( Массив2[i + Сдвиг] - Массив1[i + Сдвиг] >= Расхождение*Point ) //превысили минимальное расхождение return (1); } } if (Массив1[Сдвиг] < Массив2[Сдвиг]) { // Массив1 меньше, ищем пересечение сверху вниз for( i=0; i<Глубина; i++) { if( Массив1[i + Сдвиг] - Массив2[i + Сдвиг] >= Расхождение*Point ) //превысили минимальное расхождение return (-1); } } //если мы здесь, значит кривые совпадают //Массив1 == Массив2 return (0);} Задание: написать импорт - объявление этой функции из библитеки и пример использования. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 июня, 2007 Автор Жалоба Поделиться Опубликовано 8 июня, 2007 Никто и не попытался.... или лень, или не знают... И так, вызов функции из библиотеки делается так:MQL#import "моя_библиотека.ex4" int ПроверкаПерекрещивания(double Массив1[],double Массив2[],int Сдвиг,int Расхождение,int Глубина);#import Вызывается функция в модуле так:MQLint Крест = ПроверкаПерекрещивания(Массив1[],Массив2[],Сдвиг,Расхождение,Глубина); А теперь, для собственного контроля - ответьте, где я ошибся? Ошибка не была запланирована, сделал я её не нарочно, но она есть и пока я её исправлять не буду.... :ninja: Ссылка на комментарий Поделиться на другие сайты Поделиться
Ajvengo Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 Наверное, ошибка заключается в том, что используются одни и те же переменные для определения функции и при вызове функции. Получается, что при таком вызове функции мы должны дважды определить переменные: в начале эксперта:double Массив1[], Массив2[];int Сдвиг, Расхождение, Глубина; а затем при подключении dll:#import "моя_библиотека.ex4" int ПроверкаПерекрещивания(double Массив1[],double Массив2[],int Сдвиг,int Расхождение,int Глубина);#import На мой взгляд, при вызове функции необходимо использовать набор переменных с другими именами. Например:int Крест = ПроверкаПерекрещивания(xМассив1[], xМассив2[], xСдвиг, xРасхождение, xГлубина);Или вообще не указывать переменные при подключении библиотеки:#import "моя_библиотека.ex4" int ПроверкаПерекрещивания(double, double, int, int, int);#import Кстати, встречный вопрос: у меня при подключении dll выпадает ошибка 'cannot call function *** from *.dll' (error 127). Что это за ошибка такая 127? В документации кода такой ошибки нет... dll скомпилирована из C++ 5.0 и сидит в папке experts\libraries. Ссылка на комментарий Поделиться на другие сайты Поделиться
geforce092 Опубликовано 2 июля, 2016 Жалоба Поделиться Опубликовано 2 июля, 2016 Привет друг. Могу ли я вас попросить помочь отвязать индикаторы от счета? Дайте знать в мой скайп или почту: geforce092 gefforce092@mail.ru Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения