MQL для тебя

MQL для чайников, программирование на MQL4, MQL5

Рекомендуемый ДЦ - Alpari !

Добрый день, Уважаемые подписчики!
Сегодня я публикую очередной урок по пришедшему мне вопросу:

Уважаемый Александр.
Имеется ли в MQL4 возможность работать с такими графическими объектами MetaTraderа, как трендовые, вертикальные и горизонтальные линии, каналы и т.д., имеющими в среде MetaTrader собственные имена и параметры? Если да — рассажите об этом в одном из своих уроков.

Давайте рассмотрим как работать с объектами MetaTraderа 4 на примере трендовой линии. Существует множество стратегий форекс, основаных на трендовых линиях. Например Стратегия форекс «3 касания» или Стратегия форекс «Trend Lines» и т.д. Обычно работают такие трговые стратегии на отскок цены от трендовой линии или на пробой трендовой линии. Рассмотрим как написать советника MT4 который будет отслеживать приближение цены к трендовой линии и открывать ордера с целью получить прибыль при ее отскоке. Конечно советник не будет полностью автоматическим. Трейдеру придется в ручную рисовать трендовую линию, но сидеть ждать подхода цены к трендовой линии будет не нужно.

Для начала определимся с параметрами, что нам нужно настраивать: — риск для расчета лота — тейкпрофит — стоплосс — расстояние от трендовой линии до установки ордера (цена может несколько пунктов не дойти до трендовой линии)

Подключим нашу библиотеку MyLib и укажем внешние параметры:
//±-----------------------------------------------------------------+
//|                                                    TrendLine.mq4 |
//|                                                Copyright c 2010. |
//|                                                http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright c 2010."
#property link      "http://mql4you.ru"
#include  <MyLib.mqh>
extern int    MaxRisk=2;
extern int    TakeProfit=600;
extern int    StopLoss=30;
extern int    Delta=5;
//±-----------------------------------------------------------------+
int init() {return(0);}
//±-----------------------------------------------------------------+
int deinit() {Comment();return(0);}
//±-----------------------------------------------------------------+
int
start()
{
return
(0);}
//±-----------------------------------------------------------------+

Проверим что есть трендовая линия и она в единственном экземпляре:
 if(ObjectsTotal(OBJ_TREND)!=1)
   {Comment(»Нарисуйте 1 трендовую линию!");
    return(0);}

Получим ИМЯ трендовой линии:
 for(int i=0;i<ObjectsTotal();i++)
   {string name=ObjectName(i);
    if(ObjectType(name)==OBJ_TREND) break;}

Проверим что трендовая линия нарисована правильно (по движению цены):
 datetime t1=ObjectGet(name,OBJPROP_TIME1);
 datetime t2=ObjectGet(name,OBJPROP_TIME2);
 if(t1>t2)
   {Comment("Неправильно нарисована трендовая линия!");
    return(0);}

Продолжим линию (свойство луч):
 ObjectSet(name,OBJPROP_RAY,true);

Определим тренд (вверх или вниз):
 bool trend=false;
 double p1=ObjectGet(name,OBJPROP_PRICE1);
 double p2=ObjectGet(name,OBJPROP_PRICE2);
 if(p1<p2) trend=true;

Определим текущее значение трендовой линии и сообщим ее параметры:
 double pr=ObjectGetValueByShift(name,0);
 Comment("Name=",name,"   Trend=",trend,"   Value=",pr);

Осталось подсчитать количество открытых ордеров и если их нет и цена подошла к трендовой линии открыть ордер.
Подсчитаем кол-во ордеров:
 int oBuy=0,oSell=0;
 for(i=OrdersTotal() −1;i>=0;i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     if(OrderSymbol()==Symbol())
       {if(OrderType()==OP_BUY) oBuy++;
        if(OrderType()==OP_SELL) oSell++;}

Если нет ордеров и цена подошла к трендовой линии — откроем ордер:
 double tp=0,sl=0;
 double Lot=GetLot(MaxRisk);
 if(Lot==0.0) {Alert("Недостаточно средств!");return(0);}
 if(oBuy+oSell==0 && trend && Bid>=pr && Bid<=pr+Delta*Point)
   {if(TakeProfit>0) tp=Ask+TakeProfit*Point;
    if(StopLoss>0) sl=Ask-StopLoss*Point;
    NewOrder(OP_BUY,Lot,Ask,tp,sl);}
 if(oBuy+oSell==0 && !trend && Ask<=pr && Ask>=pr-Delta*Point)
   {if(TakeProfit>0) tp=Bid-TakeProfit*Point;
    if(StopLoss>0) sl=Bid+StopLoss*Point;
    NewOrder(OP_SELL,Lot,Bid,tp,sl);}

Советник форекс готов! Осталось его протестировать. Советники форекс подобного типа, тестируют только в визуальном режиме как в Уроке 10 «Работа с внешними индикаторами». Запустим тестирование и нарисуем трендовую линию:

Трендовая линия

Наблюдаем как идет тестирование. Вот цена подошла к трендовой линии и открылся ордер:

Открылся ордер

Далее цена развернулась и подошла к нашему профиту:

Развитие ситуации

В итоге ордер закрылся по тейкпрофиту и мы получили прибыль:

Ордер закрыт

Как видно из тестов, созданный нами эксперт МТ4, работает. Его можно использовать как для торговли, так и для тренировки умения рисовать трендовые линии в тестере стратегий Metatrader 4.

Скачать:  советник TrendLine

Рекомендуемый ДЦ - Forex4you !

Будет ли работать советник форекс, если я закрою терминал Metatrader 4? Можно ли сделать так, чтобы советник MT4 работал при выключенном компьютере?

Подобных вопросов довольно много. Отвечу сразу: советники форекс работают пока запущен терминал Metatrader 4. Но есть возможность заставить их работать и при выключенном компьютере. Для этого арендуется VPS (виртуальный выделенный сервер).

Сразу возникают вопросы: А где его взять? А как с ним работать?
Брокерская компания Forex4you предлагает заказать VPS прямо в личном кабинете. В Интернете полно предложений по аренде VPS или VDS (VDS это выделенный сервер, а не виртуальный. Поэтому цена его аренды приличная). Достаточно набрать в любом поисковике слово «VPS» и выбрать наиболее понравившееся предложение. Когда Вы выберете тариф (можно самый дешевый, но обязательно с установленной операционной системой Windows !!! т.к. Metatrader 4 работает только на этой операционной системе) и оплатите его Вам на почту придет письмо с IP адресом, логином и паролем. Обычно тут и возникают вопросы (что делать дальше?)

Опишу как настроить свой VPS и работать с ним:

Для начала подключимся к нашему VPS. Для этого запустим программу «Подключение к удаленному рабочему столу»

Запуск удаленного рабочего стола

Введем IP адрес

Подключение к удаленному рабочему столу

Введем логин и пароль

Авторизация

Мы попали на рабочий стол удаленного компьютера (нашего VPS)

Удаленный рабочий стол

В принципе дальнейшая работа ничем не отличается от работы с Вашим локальным компьютером.

Теперь давайте поговорим о Безопасности VPS.

Хакеры прекрасно знают об этой технологии, а кому хочется подарить своего советника неизвестно кому? Да и платим мы. Поэтому не дадим свой виртуальный сервер никому. Кроме того существуют вирусы, но ресурсы нашего VPS сильно ограничены. Нормального антивируса не поставишь.

Рассмотрим как нас могут атаковать:
1. Хакеры используют программы которые ищут открытые стандартные порты
2. Хакеры используют стандартное имя пользователя «Администратор»
3. Простые пароли подбираются программой
4. Вирусы используют «дыры» в операционной системе
5. Вирусы используют любопытство пользователя (предлагают что-то посмотреть и т.д.)

Начнем защищаться VPS с конца списка. Чтобы вирус не проник на Наш VPS:

1) не будем ставить посторонние программы (любые кроме терминала Metatrader 4).

2) Читать почту на VPS не будем.

3) Интернет странички с VPS открывать не будем.

4) Операционная система прекрасно умеет обновляться сама, поэтому как только она предложит установить обновления — будем соглашаться.

Этого достаточно чтобы защититься от вирусов. И антивирус не нужен!

Теперь займемся защитой VPS от хакеров. Пароль надо придумать сложный (более 8 символов, а лучше 12−15 символов) состоящий из больших и маленьких букв и цифр (например: R73jf5Kms2Ua). Имя пользователя надо будет сменить на нестандартное (например: Ivan934). Изменить стандартный порт на произвольный (например: 5567)

После этого хакеры не будут подозревать о нашем существовании, но если и узнают, то замучаются подбирать имя пользователя и пароль.

Настраивать начнем с файрволла (в Windows его называют «брандмауэр»). Хотя везде и пишут что он ненадежен, но на самом деле основная проблема заключается в его правильной настройке. Итак открываем «панель управления»:

Вызов панели управления

Находим «Брандмауэр» и запускаем его:

Панель управления

Читать полностью »

Столкнулся с проблемой и вот уже третий день бьюсь и решить не могу. В готовом советнике решил вместо лота ввести % риска, поэтому нужен расчёт лота к стопу, например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1 а вот при стопе 200 лот уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне. Надеюсь всё понятно изложил.

Для расчета лота в зависимости от стоплосса мы должны знать стоимость 1 пункта.

Расчет стоимости пункта


Все валютые пары можно условно разделить на три категории — пары с обратной котировкой (EURUSD, GBPUSD), пары с прямой котировкой (USDJPY, USDCHF) и кросс-курсы (GBPCHF, EURJPY и т.п.).

1. Для валютных пар с обратной котировкой стоимость пункта, выраженная в долларах, рассчитывается по формуле
PIP = LOT_SIZE * TICK_SIZE,
где LOT_SIZE — размер лота, TICK_SIZE — размер тика.

Для валютных пар с обратной котировкой стоимость пункта постоянна и не зависит от текущей котировки.

Пример:
Для EURUSD размер лота 100,000 евро, размер тика — 0.0001
PIP = 100,000 * 0.0001 = $10.00

2. Для валютных пар с прямой котировкой стоимость пункта, выраженная в долларах, рассчитывается по формуле
PIP = LOT_SIZE * TICK_SIZE / CURRENT_QUOTE,
где LOT_SIZE — размер лота, TICK_SIZE — размер тика, CURRENT_QUOTE — текущая котировка пары.

Для валютных пар с прямой котировкой стоимость пункта меняется в зависимости от текущей котировки.

Пример:
Для USDJPY размер лота 100,000 долларов, размер тика — 0.01. При котировке USDJPY 114.66
PIP = 100,000 * 0.01 / 114.66 = $8.72

3. Для кросс-курсов стоимость пункта, выраженная в долларах, рассчитывается по формуле
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
где LOT_SIZE — размер лота, TICK_SIZE — размер тика, BASE_QUOTE — текущая котировка базовой (первой) валюты к доллару США, CURRENT_QUOTE — текущая котировка пары.

Для кросс-курсов стоимость пункта меняется в зависимости от текущих котировок как самой пары, так и базовой валюты.

Пример:
Для GBPJPY размер лота 100,000 фунтов, размер тика — 0.01, базовая валюта — GBPUSD. При котировке GBPJPY 230.82 и котировке GBPUSD 2.0107
PIP = 100,000 * 0.01 * 2.0107 / 230.82 = $8.71

Разработчики MetaTrader позаботились об этом и предоставили нам функцию: MarketInfo(Symbol(),MODE_TICKVALUE) — стоимость 1 пункта в валюте депозита для 1 лота. Напишем скрипт для расчета лота:

//±-----------------------------------------------------------------+
//| Расчет лота в зависимости от размера стоплосса |
//| Copyright © 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link "http://mql4you.ru"
#property show_inputs
extern int MaxRisk=2;
extern int StopLoss=100;
//±-----------------------------------------------------------------+
int start()
{double Free =AccountFreeMargin();
double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor((Free*MaxRisk/100)/(StopLoss*LotVal)/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
Alert(Lot);
return(0);}
//±-----------------------------------------------------------------+

Скачать скрипт: lotstop.mq4

Добрый день! В интернете полно стратегий для 3 часового или 6 часового тайм-фрейма. В MetaTrader 4  нет таких интервалов. Там после часового идет 4 часовой, а после 4 часового идет дневной. Можно ли как-нибудь настроить нестандартный таймфрейм?

Отвечаю: Нестандартный тайм-фрейм в MT4 настроить Можно!

Опишу пример открытия 3 часового графика для валютно пары GBPUSD. Первое что нужно сделать — это открыть часовой график необходимой нам валюты:

Часовой график GBPUSD

После этого запускаем скрипт period_converter.mq4 (он есть в стандартной поставке терминала Metatrader 4)

Скрипт period_converter.mq4

Указываем множитель (количество свечей в необходимом нам периоде):

Параметры скрипта period_converter.mq4

Нажимаем кнопочку «OK». После этого идем в меню Файл — Открыть автономно:

Открытие автономного графика

Откроется окно:

Список валют для автономного графика

Находим в нем выбранную нами валютную пару и тайм-фрейм H3. Нажимаем кнопочку «Открыть».
В итоге получаем 3 часовой график для GBPUSD:

3 часовой график GBPUSD

Рекомендуемый ДЦ - Forex4you !

Недавно мне пришло письмо: Уважаемый Александр Парнюк! если вас не затруднит подскажите пожалуйста как написать индикатор на основе 4х цен свечного графика? Визуально это должно выглядеть как обычный свечной или баровский график только свечи не показывают тренд а выровнены по цене открытия по нулевой оси, т.е. бычьи свечи будут над осью Х а медвежьи под ней но цена открытия всегда на ней и главное тени (весь обьем взятого интервела времени) можно конечно представить как макд только в столбце тело свечи отображено одним цветом а тени другим чтоб явно читались четыре цены.

Подобного урока по индикаторам форекс у меня нет. Поэтому сегодня я решил показать как пишутся такие индикаторы. Для начала запускаем мастер создания советников forex:

Мастер создания советников

Выбираем «Пользовательский индикатор». В следующем окне указываем название Нашего индикатора форекс. Так как входные параметры нам не нужны — оставим их не заполненными:

Параметры индикатора

На следующем окне указываем что индикатор будет выводиться в отдельном окне, указываем цвета Нашего индикатора и тип вывода (линия, гистограмма, стрелки):

Буфера индикатора

Мы выбрали тип рисования — гистограмма для отображения значений в виде вертикальных линий. После нажатия кнопочки «Готово» будет сгенерирован код индикатора форекс для MT4:

//±-----------------------------------------------------------------+
//| Cand.mq4 |
//| Copyright © 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link "http://mql4you.ru"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//±-----------------------------------------------------------------+
int init()
{SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,ExtMapBuffer2);
return(0);}
//±-----------------------------------------------------------------+
int deinit() {return(0);}
//±-----------------------------------------------------------------+
int start()
{int counted_bars=IndicatorCounted();
return(0);}
//±-----------------------------------------------------------------+

Для начала нам необходимо увеличить ширину линий, которыми рисуются свечи. Что бы визуально свечи отличались от теней не только цветом. Для этого зададим ширину линий по умолчанию:

#property indicator_width1 2
#property indicator_width2 1

Для линий первого буфера (свечей) мы задали ширину в 2 пиксела, а для линий второго буфера (теней) мы задали ширину в 1 пиксель.
Осталось заполнить буферы значениями по свечам. Для этого пробежимся в цикле по свечам и занесем в первый буфер высоту свечи (Close[]-Open[]), а во второй высоту тени (High[]-Low[]). Так как свечи бывают бычьи (Close>Open) и медвежьи (Close<Open), а высота тени всегда High>Low, то необходимо еще определить знак. В итоге код нашего цикла получиться:

int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars;
for(int i=0; i<limit; i++)
{ExtMapBuffer1[i]=Close[i]-Open[i];
int zn=1;
if(Close[i]<Open[i]) zn=-1;
ExtMapBuffer2[i]=(High[i]-Low[i])*zn;
}

Вот что у нас получилось в итоге:

График с индикатором

Скачать: индикатор Сand.mq4

Рекомендуемый ДЦ - Alpari !

Для того чтобы написать программу на языке MQL — необходимо знать как в ней хранятся данные, ведь программа должна их где-то хранить.

Константа в MQL - это составная часть программы; объект, имеющий значение. Понятие «константа» в программе аналогично тому же понятию, используемому в математических уравнениях. Это — неизменная величина.

Встретив в программе 2+2 мы понимаем что происходит сложение двух чисел. Так как их в процессе работы программы изменить нельзя, то они являются константами. Встретив другой пример 2+x уже нельзя сказать однозначно: с чем складывается число (с константой или переменной)? Дело в том, что константам можно присвоить имя и использовать ее не по значению, а по имени. Для присвоения имени константе используется #define.

Например:

#define x 2
2+x

Переменная в MQL — это составная часть программы, имеющая значение и название. Понятие переменной в языке MQL4 аналогично понятию переменной, принятому в математике.

Переменные очень похожи на константы, но их значение можно изменять. Например сложим 2+2 и сохраним значение в переменной:

x=2+2

Так как переменная может изменять свои значения в процессе работы программы, то необходимо указывать ее тип. Иначе компилятор MT4 не будет знать что в ней хранить (число, строку и т.д.). Поэтому при описании переменной указывают ее тип.

В языке MQL4 различают следующие типы данных:

int — целые числа (например: 1).
double — действительные числа (например: 0.1).
bool — значения логического типа (например: true).
string — значения строкового типа (например: «Super Expert»).
color — значения цветового типа (например: White).
datetime — значение даты и времени (например: 01.01.2010 12:00).

Наш пример для сложения чисел приобретет свой окончательный вид:

int x=2+2;

Мы сложили два числа (константы) и поместили результат в переменную x целого типа.

Какие еще операции существуют в языке MQL4?

В языке MQL4 различают следующие виды операций:

• арифметические операции;
• операции присваивания;
• операции отношения;
• логические операции;

Читать полностью »

Размер каталога в который установлен MetaTrader постоянно растет. Что можно почистить для уменьшения размера?

Эта проблема не только терминала MetaTrader, но и многих других программ. Дело в том, что терминал MT4 сохраняет поступающие котировки валют, журналы работы и другие служебные данные. Объемы современных жестких дисков позволяют хранить эту информацию особо не переживая за ее размер. Но если для Вас размер является критическим, то можно почистить следующие папки:

C:\Program Files\<каталог терминала>\history\*.* — история котировок
C:\Program Files\<каталог терминала>\
logs\*.* — журналы работы терминала
C:\Program Files\<каталог терминала>\mailbox\*.* — почтовый ящик
C:\Program Files\<каталог терминала>\
deleted\*.* — история открытых и в последствии удаленных графиков
C:\Program Files\<каталог терминала>\experts\logs\*.* — журналы работы экспертов
C:\Program Files\<каталог терминала>\
tester\history\*.* — история работы тестера
C:\Program Files\<каталог терминала>\tester\logs\*.* — журналы работы тестера

Для себя я сделал командный файл для очистки этих папок: clear.bat

И один раз в неделю запускаю его. Так как я много пишу советников для Metatrader 4 и разумеется приходится их постоянно тестировать и оптимизировать, соответственно за неделю каталог с установленным у меня терминалом МТ4 вырастает от десятка Мегабайт до одного Гигабайта — на помощь мне и приходит командный файл clear.bat.

Рекомендуемый ДЦ - Forex4you !

В прошлых уроках «Первые шаги по MQL», мы разобрались как работает терминал MetaTrader: что и где находится, как в терминале MT4 запускаются советники. Теперь можно переходить собственно к изучению языка MQL.

Давайте взглянем на типичную программу написанную на MQL4:

//±-----------------------------------------------------------------+
//| Tester.mq4 |
//| Copyright c 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright c 2010."
#property link "http://mql4you.ru"
//±-----------------------------------------------------------------+
int init() {return(0);}
//±-----------------------------------------------------------------+
int deinit() {return(0);}
//±-----------------------------------------------------------------+
int start() {return(0);}
//±-----------------------------------------------------------------+

Как видно из примера, программа представляет собой обычный текст состоящий из ключевых слов. Давайте разберемся что они означают:

Комментарий— это необязательная и неисполняемая часть программы. Готовая программа будет работать в соответствии с заложенным в неё кодом независимо от того, есть в ней комментарии или нет. Однако комментарии очень облегчают понимание кода программы. Они могут быть однострочными и многострочными. Однострочный комментарий — это любая последовательность символов, перед которой стоят две косые черты (//). Признак однострочного комментария заканчивается вместе с переводом строки. Многострочный комментарий начинается символами /* и заканчивается символами */

Давайте удалим комментарии и посмотрим что получиться:

#property copyright "Copyright c 2010."
#property link "http://mql4you.ru"
int init() {return(0);}
int deinit() {return(0);}
int start() {return(0);}

У нас осталось всего 5 строк. Что же еще можно удалить из программы, написанной на MQL,  не нарушая ее работоспособности?

У каждой MQL4 программы можно указать дополнительные специфические параметры #property, которые помогают клиентскому терминалу Metatrader 4 правильно обслуживать программы без необходимости их явного запуска.
Читать полностью »

Рекомендуемый ДЦ - Alpari !

Мне поступил интересный ворос: Как установить ордер на закрытии минутного бара?

Первая мысль отлавливать последнюю котировку по времени. Допустим пропускаем все котировки до 59 секунды, а на последней секунде выставляем ордер. Решение кажется простым. Но давайте разберемся так ли это?

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

А если учесть крупных «Игроков», таких как банки, то может показаться вообще хаотичной. То сотни сделок проидут за минуту, а может и не одной. Вы наверное замечали такой эффект на своих графиках. Кстати на минутном графике это прекрасно видно:

Минутный график котировок

Горизонтальная черточка означает что за минуту прошла всего одна сделка. Поэтому поступающие котировки принято называть ТИКами.

Поставщиком тиков для каждого клиентского терминала является сервер, установленный у брокера форекс. А для брокера котировки поставляет вышестоящий брокер, и так далее. Все это связано в единую сеть и поэтому котировки у всех одинаковые.

Возникает закономерный вопрос: Почему тогда у некоторых брокеров forex 5 значные котировки, а у других 4 значные?

Я не знаю точно сколько знаков после запятой используется на самом верхнем уровне, но прекрасно представляю что для уменьшения количества знаков их просто округляют.

Хорошо. А что тогда такое "тиковый объем"? Логично предположить что это величина совершенной сделки, но я вас разочарую. Величина совершенной сделки — это определение объема а, "тиковый объем" это — сколько раз за бар приходили ТИКи. Поэтому и ведутся споры насчет полезности его на рынке Forex.

Теперь мы знаем откуда и как поступают котировки форекс. И первоначальное решение уже не кажется таким простым. Ведь если мы откроем ордер на последней секунде, то нет ни каких гарантий что он откроется по текущей цене. Даже скорее всего он откроется по новой цене (цене открытия нового бара). А можем получить ошибку от сервера брокера форекс о том, что цена изменилась.

Поэтому в ответ я посоветовал сразу использовать цену открытия бара. Точнее первый поступивший ТИК. Ведь деление на бары получается условным. И новый бар может открыться не в 00 секунд.

Теперь мы знаем как поступают котировки. А как тогда работают советники forex в терминале Metatrader 4?

Очень просто. При поступлении нового ТИКа управление передается советнику. Когда советник закончит работу — он возвращает управление терминалу и ожидает пока терминал опять не передаст ему управление. Как же я собирался отлавливать 59 секунд? Ведь за это время котировка может не прийти и советник не получит управление. Здесь тоже нет ничего сложного. Можно зациклить управление в советнике. И тогда он будет работать постоянно, пока его не отключат. Но как я уже писал выше — это безсмысленно. Хотя для решения других задач можно использовать этот метод.

Рекомендуемый ДЦ - Forex4you !

Добрый день, Уважаемые читатели!

Мне поступает много вопросов от людей, которые хотят научиться программировать на языке MQL. И я понял что немного не с того начал вести свой блог «MQL для тебя». Многие читатели не понимают таких простых вещей, которые я использую «на автомате».

Поэтому сегодняшней публикацией я открываю новый раздел: «Первые шаги в MQL».
Для начала давайте познакомимся с торговым терминалом, для которого мы будем писать наши скрипты, советники и т.п. на языке MQL4 — Metatrader 4. Я понимаю, что многие уже его используют. А кто еще не пользуется данной торговой платформой — можете скачать и установить его, например отсюда: Forex4you.

Мы привыкли запускать терминал MT4 через иконку на рабочем столе компьютера. И даже не задумываемся: из чего он состоит? В начале работы с терминалом нам вполне достаточно тех инструментов, что в нем встроены. Но со временем появляется желание испробовать новые индикаторы или советники форекс. Допустим, мы нашли на просторах интернета интересный индикатор. Скачали его. А как быть дальше? Что надо сделать, что бы его можно было установить на график выбранной валютной пары? Вроде бы понятно, что его надо куда-то положить. Но вопрос: "Куда?"

Вот структура папок установленного терминала Metatrader 4:

Папка терминала

В основном нас будет интересовать папка experts:

Папка experts

Как видно из рисунка, в папке experts есть еще несколько папок.
Читать полностью »