Уроки по программированию на языке MQL4 от eevviill

eevviill

Заблокирован
ну а как вы определяете?
[IMPORTANT]3.1)После функции iCustom где нибудь в конце пишем строчку
Alert(arrow_up," ",arrow_down). Это делается для того чтобы узнать что(какое значение) нам возвращает индикатор.
3.2)Заходим в тестер. Запускаем советник с визуализацией. После окончания тестирования заходим в вкладку журнал тестера и смотрим что там нам Алерт писал.
3.3)Итак. Когда стрелок нет Алерт выдаёт (0 0). Вывод (0-стрелки вверх нету 0-стрелки вниз нету).
Если (1.2345 0). Вывод. Ага! Если появилась стрелка вверх, то индикатор возвпащает цену где появилась. Ну и наоборот.
Конечный итог. 0=нету сигнала. >0 есть сигнал.
[/IMPORTANT]
 

admtw

Прохожий
здравствуйте, извините за глупый вопрос, не покажете урок с условиями?

Как сделать чтоб при запуске советника при первичной установке отложек не исполнялось условия
PHP:
if (Bid>=Open[0] )
а после первичной установки ордеров это условие подключалось?
хотел сначала функцию "return" но не получилось.
просто если так оставить ,при первоначальном запуске советника пока это условие не выполнится, ордера не поставятся
PHP:
void SetOrders() {
double ldStop=0, ldTake=0;
double pBid=Open[0]-DistanceSet*Point;

if (Bid>=Open[0] )
  {
  if (!ExistOrder(1)){ 
    SetOrder(OP_SELLSTOP ,pBid, ldStop, ldTake, 4);
  }
}
 

eevviill

Заблокирован
здравствуйте, извините за глупый вопрос, не покажете урок с условиями?

Как сделать чтоб при запуске советника при первичной установке отложек не исполнялось условия
PHP:
if (Bid>=Open[0] )
а после первичной установки ордеров это условие подключалось?
хотел сначала функцию "return" но не получилось.
просто если так оставить ,при первоначальном запуске советника пока это условие не выполнится, ордера не поставятся
PHP:
void SetOrders() {
double ldStop=0, ldTake=0;
double pBid=Open[0]-DistanceSet*Point;
 
if (Bid>=Open[0] )
  {
  if (!ExistOrder(1)){ 
    SetOrder(OP_SELLSTOP ,pBid, ldStop, ldTake, 4);
  }
}
Не знаю или я правильно понял.
Полистайте пару страниц назад. Там похожее было.
Сначало добавляй функцию подсчёта ордеров.
Выйдет что то похожее на
PHP:
if(buy_stop>0 && sell_stop>0)
{
if (Bid>=Open[0]);
}
 

romaks

Местный житель
Не знаю или я правильно понял.
Полистайте пару страниц назад. Там похожее было.
Сначало добавляй функцию подсчёта ордеров.
Выйдет что то похожее на
PHP:
if(buy_stop>0 && sell_stop>0)
{
if (Bid>=Open[0]);
}

Добрый день уважаемый Еevviill! Спасибо за труд. Вы правы, любой трейдер должен для саморазвития хоть малость изучить MQL4. Продолжайте. Ждём новых уроков.
 

saenko

Интересующийся
eevviill...что нужно добавить в советник чтобы он не открывал ордера на каждой свече?
 

romaks

Местный житель
Наверно надо не добавлять, а правильно условие на вход написать.

Добрый вечер Еevviill! Я вот что подумал, многие на форумах говорят про перерисовку индикаторов, запаздывание. Может сделаете урок по этой теме, а то всё советники и советники.
 

eevviill

Заблокирован
Добрый вечер Еevviill! Я вот что подумал, многие на форумах говорят про перерисовку индикаторов, запаздывание. Может сделаете урок по этой теме, а то всё советники и советники.
Хмм. Ну а что ж там расказывать? С тех что я пробовал 94% пере или дорисовывались. Сигнал именно где появляется в советник не вставишь. Только по направлению.
 

romaks

Местный житель
Хмм. Ну а что ж там расказывать? С тех что я пробовал 94% пере или дорисовывались. Сигнал именно где появляется в советник не вставишь. Только по направлению.

И всёж подумайте над этим. Рассказали бы почему может в индюке быть перерисовка, почему запаздывание на примерах. Ясен пень, что нет 100 % вещей, но какие-то варианты решения этих моментов. Было бы интересно. Жалко будет если умрёт ветка. Подумайте.
 

saenko

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

saenko

Интересующийся
можно вопрос по 17 уроку?
Какое условие нужно поставить чтобы ордер открывался единыжды...
Например: открылся ордер по сигналу индикатора, потом он закрылся по стопу, но тут же открывается другой ордер в эту же сторону...что мне нужно сделать что бы этого не произошло?
 

e-partner

Местный знаток
Re: Урок 3 - разделительные знаки и операции

1) Разделительные знаки.
1.1) , (запятая) - применяется для отделения названий свойств некоторой операции. Может не понятно объяснил, но по примеру поймёте.
Пример
PHP:
MarketInfo(Symbol(),MODE_LOTSTEP);
1.2) ; (точка с запятой) - используеться для завершения какого то расчёта. Смысл примерно такой как точка в конце предложения.
1.3) {} (квадратные скобки) - применяются для начала фунции и конца.
1.4) () (скобки) - в них(не всегда) записываются свойства операции.
1.5) " " (не знаю как называются) - то что в них не используется в самых расчётах, но можна выводить на экран или в настройки.
1.6) // или /* */ - используются для коментирования кода. 
Если // в начале строки то всё что дальше закрасится в серый цвет и експертом вообще не будет применятся.
Если надо больше одной строки, то в начале /* и в конце */ надо поставить.

2) Операции.

Арифметические операции.
+Сумма величинx + 2 -Вычитание величин или изменение знакаx — 3, y = — y *Умножение величин3 * x /Частное от деленияx / 5 %Остаток от деленияminutes = time % 60 ++Добавление 1 к значению переменнойy++y = y + 1--Вычитание 1 из значения переменной
(+,-,*,/) - это все знают.
% Остаток от деления
++ Добавление 1 к значению переменной - тоесть x=6. Если х++, то х=7
-- Отнемание 1 из значения переменной

Операции присваивания
= Присваивание значения x=6
+= Увеличение значения переменной x+=3 значит x+3
-= Уменьшение значения переменной
*= Умножение значения переменной
/= Деление значения переменной
%= Остаток от деления значения переменной

Операции отношения
== Истина, если x равно y x == y
!= Истина, если x не равно y x != y
< Истина, если x меньше y x < y
> Истина, если x больше y x > y
<= Истина, если x меньше или равно y x <= y
>= Истина, если x больше или равно y x >= y

Логические операции
! (логическое отрицание)
|| (ИЛИ)
&& (И)


P.S. Завтра вечером будем писать простенький скрипт.
Эвил, привет!

Можешь перепостить этот пост, если не трудно, с пробелами где надо, знаками препинания и абзацами, чтобы знаки препинания в тексте не мешались с переменными и символами mql-языка. Т.к. непонятно какой символ что обозначает, только в 50% разобрался. :-( Да и другим понятнее будет. Люблю порядок, и лень разбираться в непорядке)))

Тоже скоро примкну к твоей ветке ненадолго! =) ..Ненадолго - потому что я быстро учусь: в школе информатика - любимый предмет был...; html-язык с нуля самостоятельно за 1,5-2 мес. на 90% выучил и сайт заказчику сделал нормальный. =) (Сам себя не похвалишь - никто не похвалит :):):) ).
 

eevviill

Заблокирован
Эвил, привет!

Можешь перепостить этот пост, если не трудно, с пробелами где надо, знаками препинания и абзацами, чтобы знаки препинания в тексте не мешались с переменными и символами mql-языка. Т.к. непонятно какой символ что обозначает, только в 50% разобрался. :-( Да и другим понятнее будет. Люблю порядок, и лень разбираться в непорядке)))

Тоже скоро примкну к твоей ветке ненадолго! =) ..Ненадолго - потому что я быстро учусь: в школе информатика - любимый предмет был...; html-язык с нуля самостоятельно за 1,5-2 мес. на 90% выучил и сайт заказчику сделал нормальный. =) (Сам себя не похвалишь - никто не похвалит :):):) ).
Там всё красиво разложено. Только арифметические операции криво вышли.

PHP:
Арифметические операции.
+Сумма величинx  +2 
-Вычитание величин или изменение знакаx — 3, y = — y 
*Умножение величин 3*x 
/Частное от деленияx /5 
%Остаток от деления  minutes=time%60 
++Добавление 1 к значению переменной y++y=y+1
--Вычитание 1 из значения переменной
(+,-,*,/) - это все знают.
% Остаток от деления
++ Добавление 1 к значению переменной тоесть x=6. Если х++, то х=7
-- Отнемание 1 из значения переменной
 

eevviill

Заблокирован
можно вопрос по 17 уроку?
Какое условие нужно поставить чтобы ордер открывался единыжды...
Например: открылся ордер по сигналу индикатора, потом он закрылся по стопу, но тут же открывается другой ордер в эту же сторону...что мне нужно сделать что бы этого не произошло?

1)Если индикатор пере или дорисовывается, то сигнал на вход мы можем ставить только по направлению индикатора, а не именно по сигналу. В этом случае надо заглядывать в историю и смотреть какой ордер был закрыт. Проверка перед кодом с открытием ордера. Тоесть если последний ордер был бай, то бай не открываем и наоборот.
PHP:
bool new_open_buy=true;
bool new_open_sell=true;
 
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
 {
 if(OrderMagicNumber()==magic)
 {
 if(OrderType()==OP_BUY) new_open_buy=false; 
 if(OrderType()==OP_SELL) new_open_sell=false;
 }
 }

2)Если индикатор не пере/дорисовывается, то проще. Надо правильно написать условие на вход.
Тоесть цена на позапрошлом баре меньше МА, а на прошлом больше.
PHP:
MA1=iMA(...,1);
MA2=iMA(...,2);
 
Close[2]<MA2 && Close[1]>MA1;
 
Верх