21 сентября 2011, 12:11
Пример использования функции OrderCloseBy() В прошлом выпуске был приведен пример эксперта, с использованием функции OrderCloseBy(). Здесь мы для начала расскажем о самой функции, а потом разберем каждую новую строчку нашего эксперта. bool OrderCloseBy(int ticket, int opposite, color сolor=CLR_NONE) Функция OrderCloseBy() закрывает одну позицию другой позицией по тому же самому инструменту. В случае успеха она возвращает true, а в случае ошибки - false. Код ошибки можно в дальнейшем узнать с помощью функции GetLastError(). Параметры функции OrderCloseBy() : ticket - тикер первой позиции; opposite - тикер второй позиции; сolor - цвет закрывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то закрывающая стрелка не отображается на графике. Разберем каждую новую строчку нашего эксперта: // попробуем найти локированную позицию по этому же инструменту int ticket0; ticket0 = OrderTicket(); string symbol0; symbol0 = OrderSymbol(); int ordertype0; ordertype0 = OrderType(); int i; for (i = 1; i«OrdersTotal(); i++) { if (!OrderSelect(i,
Полная версия статьи
Категория: Советники форекс
21 сентября 2011, 11:59
Пример использования функции OrderClose() В прошлом выпуске мы рассказали о том, как можно закрыть открытую позицию с помощью функции OrderClose(). Практических примеров применения этой функции можно привести бесчисленное количество, т.к. в большинстве экспертов существует потребность закрывать позиции не только по Stop Loss или Take Profit ордеру, но и по текущей цене. Мы же в качестве примера применения функции OrderClose() рассмотрим эксперт, который закрывает все открытые позиции и удаляет все отложенные ордера в пятницу после 22:00 (по времени торговой платформы). //+------------------------------------------------------------------+ //| Close everything on Friday.mq4 | //| Copyright © 2006, Andrey Vedikhin | //| http://www.vedikhin.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Andrey Vedikhin" #property link "http://www.vedikhin.ru" //---- input parameters extern int MyHour=22; extern int MyMinute=00; // 5 - Friday #define MyDay 5 datetime LastTradeTime; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- // установим время последней торговой операции вчерашним днем LastTradeTime = CurTime()-24*60*60; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // проверим…
Полная версия статьи
Категория: Советники форекс
20 сентября 2011, 09:19
Пример использования функции OrderSend() Для того, чтобы рассмотреть в подробностях и показать пример использования функции OrderSend() - возьмем код несложного советника. По задумке автора, советник должен в определенное время (параметры MyHour и MyMinute ) на заранее заданном расстоянии от текущей цены (параметр MyPendingLevel ) выставлять два ордера - Sell Stop и Buy Stop. При этом должны выставляться ордера Stop Loss на расстоянии MySL пипсов от цены ордера и Take Profit на расстоянии MyTP пипсов. //---- input parameters extern int MyPendingLevel=15; extern int MySL=30; extern int MyTP=15; extern int MyHour=19; extern int MyMinute=40; extern int MyLots=1.0; datetime LastTradeTime; // время последней торговой операции //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- // установим время последней торговой операции вчерашним днем LastTradeTime = CurTime()-24*60*60; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // проверим…
Полная версия статьи
Категория: Советники форекс
19 сентября 2011, 17:59
OrderLots() - количество лотов в выделенном ордере или позиции В последующих функциях мы рассмотрим торговые функции, с помощью которых можно открывать/закрывать позиции, размещать/модифицировать и удалять ордера: OrderClose() OrderCloseBy() OrderDelete() OrderModify() OrderSend() Очень часто необходимо указать количество лотов открытой позиции или отложенного ордера. Самой простой вариант получить это значение - это выделить позицию или ордер с помощью функции OrderSelect(), а потом вызвать функцию OrderLots(). double OrderLots() Функция возвращает количество лотов в выделенном ордере или позиции. Как я уже сказал, основное применение функции - передать количество лотов в качестве параметра в функции OrderClose() и OrderModify(). Забегая вперед, расскажу о формате функции OrderClose() : bool OrderClose(int ticket, double lots, double price, int slippage, color Color=CLR_NONE) Где: ticket - тикер ордера или позиции; lots - количество лотов для закрытия позиции; price - цена закрытия; slippage - значение максимального проскальзывания в пунктах; color - цвет стрелки закрытия на графике.
Полная версия статьи
Категория: Советники форекс
19 сентября 2011, 14:34
Приоритеты операций и порядок выполнения выражений В прошлых выпусках я рассказал о следующих типах операций в выражении: об арифметических операциях, об операциях отношения, о логических операциях НЕ, ИЛИ и И, о побитовых операциях. Зачастую в выражении можно встретить сразу несколько операций. Возникает вопрос - в какой последовательности эти операции будут выполняться. Это очень важный вопрос, ведь от этого зависит конечный результат, который мы в итоге получим. Разобьем операции по группам в порядке уменьшения приоритетов. 1-я группа (наивысший приоритет). Вызов функции и доступ к элементу массива (например, a[7]). 2-я группа. Операции с одним операндом: логическое отрицание (!); побитовое отрицание (~); прибавление единицы (++); вычитание единицы (--); изменение знака на противоположный (-). 3-я группа. Побитовые операции : побитовая операция И (&); побитовая операция ИЛИ (|); побитовая операция исключающее ИЛИ (^); побитовый сдвиг вправо (>>); побитовый сдвиг влево (<<).
Полная версия статьи
Категория: Советники форекс
19 сентября 2011, 14:18
Объединение арифметических и побитовых операций с операцией присваивания В прошлых выпусках мы рассмотрели арифметические и побитовые операции. Помимо этого мы познакомились и с оператором присваивания. В синтаксисе MetaQuotes Language 4 - языка написания советников - есть возможность объединить арифметические и побитовые операции с операцией присваивания. Объединение арифметических и побитовых операций с операцией присваивания Операция Пример Эквивалент Сложение j и k j += k j = j + k Вычитание второго аргумента (k) из первого (j) j -= k j = j - k Умножение j и k j *= k j = j * k Получить частное от деления j на k j /= k j = j / k Получить остаток от деления j на k j %= k j = j % k Сдвиг двоичного представления j на k бит вправо j >>= k j = j >> k Сдвиг двоичного представления j на k бит влево j <<= k j = j << k Побитовая операция И двоичных представлений j и k j &= k j = j & k Побитовая операция ИЛИ двоичных представлений j и k j |= k j = j | k Побитовая операция исключающее ИЛИ двоичных представлений j и k j ^= k j = j ^ k В следующем выпуске вы узнаете о приоритетах операций и порядке их исполнения.
Полная версия статьи
Категория: Советники форекс
23 июля 2011, 02:07
Настраиваем параметры нового эксперта Итак, в предыдущей статье мы вызвали контекстное меню окна "Навигатор" группы "Expert Advisors" и выбрали пункт меню "Create". В результате появилось окно, в котором нам предстоит выбрать тип объекта, который мы хотим создать (см. рис. 1). Рис. 1. Выберем тип объекта, который мы хотим написать на языке MetaQuotes Language 4 Нас интересует создание эксперта, поэтому выбираем пункт "Axpert Advisor". Нажимаем "Далее". В следующем окне (рис. 2.) установим параметры нового эксперта: Name - имя советника (файлу будет присвоено такое же имя с расширением *.mq4; Author - автор советника; Link - адрес веб-сайта автора советника; Parameters - параметры советника, которые можно впоследствии менять при подключении советника к графику; Рис. 2. Настройка параметров советника Установим для тренировки какой-нибудь параметр. Например, MAPeriod. Для этого нажмите кнопку "Add" и настройте каждое поле параметра: Name - имя параметра (в нашем примере MAPeriod); Type - тип параметра; Initial value - начальное значение.
Полная версия статьи
Категория: Советники форекс
20 июля 2011, 19:16
Анализ кода заготовки эксперта После совершения действия, описанных в предыдущей статье мы получили код-заготовку, который мы можем изменить в соответствии с нашей торговой тактикой и получить работоспособного эксперта. Давайте разберем, что же мы в итоге получили... //+------------------------------------------------------------------+ //| My First Expert. mq4 | //| Copyright c 2006, Andrey Vedikhin | //| http://www. vedikhin. ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Andrey Vedikhin" #property link "http://www. vedikhin. ru" //---- input parameters extern int MAPeriod=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //---- return(0); } //+------------------------------------------------------------------+ Первые несколько строчек - комментарии. Комментарий - это неисполняемый кусок кода, т. е., иными словами, это любая полезная читателю кода информация. Комментарии бывают однострочными - в этом случае они начинаются с двойного слэша: //, - и весь остаток строчки после // будет считаться комментарием. Также комментарии бывают многострочными. Такие комментарии должны начинаться с /* и заканчиваться */.
Полная версия статьи
Категория: Советники форекс
16 июля 2011, 16:16
Хранение данных в переменных Любой эксперт оперирует с некоторыми данными - ценами, значениями индикаторов, объемами, количеством открытых позиций и пр. Те, места, где эти данные хранятся в эксперте, называются переменными. В качестве имен переменных можно использовать цифры (0-9), латинские прописные и строчные буквы (а - z и А - Z, следует помнить, что буквы 'a' и 'A' - совершенно разные символы), символ подчеркивания (_). Первый символ не может быть цифрой. Также имя переменной не должно совпадать с зарезервированным словом (т. е. словом, которое имеет особый смысл в языке MetaQuotes Language 4 - но об этом позже). Желательно в качестве имени переменной использовать такое, из которого сразу становится понятным предназначение переменной. Например, переменная, содержащая количество открытых позиций, может иметь такое имя: OpenPositionsNumber. Можно создавать переменные разных типов: Int - целое число (от -2147483648 до 2147483647); Bool - логический тип (или ложь - false, или истина - true); Datetime - дата и время (в формате D'YYYY.
Полная версия статьи
Категория: Советники форекс
16 июля 2011, 10:49
GlobalVariableSetOnCondition() - установка нового значения глобальной переменной, если текущее ее значение равно заданному значению В предыдущей статье мы узнали о функции GlobalVariableSet(). с помощью которой можно присвоить новое значение глобальной переменной. К счастью, создатели языка MetaQuotes Language 4 являются профессиональными программистами и заранее могут предугадать, что может понадобиться трейдеру при написании экспертов. Я им очень благодарен, что они включили в список функций языка MetaQuotes Language 4 функцию GlobalVariableSetOnCondition(). Давайте же рассмотрим, чем так полезна эта функция. Прежде всего эта функция проверяет, существует ли глобальная переменная с именем name. В документации по MetaQuotes Language 4 написано, что если такой глобальной переменной нет, то функция возвращает false и генерит ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058), которую можно получить с помощью функции GetLastError(). Тем не менее при экспериментах с функцией GlobalVariableSetOnCondition() мне не удалось добиться того, чтобы функция вернула ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058).
Полная версия статьи
Категория: Советники форекс
Есть что сказать? Не стесняйтесь!