Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Подскажите, люди добрые, как реализовать удаление отложенного ордера по времени через определенное количество свечей и чтобы можно было использовать на любом таймфрейме. Например, если ордер был выставлен на прошлой свече и не сработал, то удалить его.

Видел в сети вариант прописывать в OrderSend в параметре Expiration команду вида TimeCurrent() + (время через, которое удалить ордер)*60. Но не пойму как это будет работать. Ведь TimeCurrent возвращает тип datetime, а время если указывать во внешних переменных, то в минутах. Как сочетать эти два типа. И зачем умножение на 60, в некоторых вариантах два раза на 60.

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано


Как конкретно подключиться к сокету,приведите пример на mql4 ?



Работа с сокетами в MQL
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Извиняюсь за настойчивость, но повторюсь. Уважаемые программисты! Возможно глупый вопрос, но не могу сообразить. Собираю советник по индикатору и двум таймфреймам Н1 и М15, на Н1 есть сигнал и пока он держится на М15 может быть несколько потенциальных входов. Подскажите как прописать условие чтобы брался только первый или один? Или хотя бы дайте какой нибудь ориентир.


Добавлено: 14-01-2017 18:14:16

Alexandrkas у меня есть такой вариант удаления отложек по времени.
//==================================================================== удаление отложек
if((Hour() == hk && Minute() >= mk) || Hour() > hk)
{
for(i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if ((OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
c = OrderDelete(OrderTicket());
ii = 0;
while (c == false && OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true && (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP))
{
ii++;
Print("Error =",GetLastError());
Sleep(sec);
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
c = OrderDelete(OrderTicket());
}
}
}
}
Изменено пользователем afert
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Имхо, не будет примеров на мкл... Это сложная тема и стоит немалых денег.
Если скорость передачи значений между терминалами не критична, то передавать можно через файл в общей папке терминалов - эти примеры видел в сети.




Это и сделал.Зачем тогда умничать?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Имхо, не будет примеров на мкл... Это сложная тема и стоит немалых денег.
Если скорость передачи значений между терминалами не критична, то передавать можно через файл в общей папке терминалов - эти примеры видел в сети.




Это и сделал.Зачем тогда умничать?

Причем тут умничать. Вы задали вопрос я вам ответил как это делается. Работа через файл это опытный путь ветерана костылестроения. Писать все за вас и учить как это делать никто не будет. Вам дадут только общую информацию для того чтобы понять куда копать.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Если скорость передачи значений между терминалами не критична, то передавать можно через файл в общей папке терминалов



а если критична - то терминалы запускать на виртуальном диске в оперативной памяти))
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

у меня есть такой вариант удаления отложек по времени.



Спасибо. Это я так понимаю вариант с удалением ордера в определенное заданное время? Не совсем то, что нужно. Но я уже нашел решение без использования времени.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Извиняюсь за настойчивость, но повторюсь. Уважаемые программисты! Возможно глупый вопрос, но не могу сообразить. Собираю советник по индикатору и двум таймфреймам Н1 и М15, на Н1 есть сигнал и пока он держится на М15 может быть несколько потенциальных входов. Подскажите как прописать условие чтобы брался только первый или один? Или хотя бы дайте какой нибудь ориентир.


лайк? Можно через пользовательскую функцию учета ордеров.
А лучше показать пациента.
Спойлер

if(CountTotal()==0)
{
OrderOpen();
}

int CountTotal()
{
int CountTotal=0;
for(int i=OrdersTotal(); i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
CountTotal++;
}
}
return(CountTotal);
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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

Ставлю на демо не работает. Перекомпилировал на одной пара начал открывать сделки, но при повторной установке на эту же пару с другим мэджиком советник молчит. Пробовал поставить на реал - тоже тишина. Уже всё проверил (на сколько хватает знаний и гугла) ни чего не помогает. Ни как не хочет работать в реальном времени.

Посмотрите пожалуйста код и помогите разобраться в том, где я делаю ошибку.

Revers_1.02.ex4
Revers_1.02.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Стандартную функцию OrdersTotal() необходимо заменить на пользовательскую с проверкой на Magic.
Например,

int OrdersCount(int magic)
{
int count = 0;
for(int i=0; i {
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic) count++;
}
}
return(count);
}
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
SilverKZ, спасибо. Заменил стандартные функции OrdersTotal() и OrdersHistoryTotal() на пользовательские и все заработало. Не знал, что это может влиять на работу советника.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Alexandrkas, ну так и выложите исправленного бота! :)

Вам с форума консультация - форумчанам бот, пусть и новичка. :)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Пожалуйста, исправленный советник.
Или предлагаете отдельную тему с ботом создать? Просто пока думаю рановато. Сегодня поставил его на демо, пусть с месяцок поработает, а там видно будет.

Revers_1.02.1.ex4
Revers_1.02.1.mq4

Изменено пользователем Alexandrkas
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Коллега, а чего ж тему не создать?!
Потестируйте сначала, конечно, во всех вариантах.

Темы полезны: людям бот - разработчику практика доводки, тесты и предложения по доработке от людей.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Коллега, а чего ж тему не создать?!
Потестируйте сначала, конечно, во всех вариантах.



Тогда создам тему, как подготовлю всю информацию. Так как это не только советник. Данную ТС юзаю уже 3 месяца. Разработал полуавтоматический вариант торговли с помощью ProTrader и теперь еще автоматический. Полуавтоматом торгую на реале. По всем мажорам провел оптимизацию и тестирование, но только за 2016 год с использованием TDS и дукасовских котировок.

Есть еще небольшая идея по доработке советника в плане расчета лота, как сделаю так создам тему.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Мои первые шаги в обучении языку MQL4 под MetaTrader 4 привели к тому, что в платформе МТ4 исчез русский язык, а стала какая-то абракадабра.
Ещё раз присмотревшись к клавиатуре я поняла , что на кнопку с точкой с запятой нажимала не ту. Их, оказывается, две.
Так же и пароль в skype стал писаться не экране монитора не точками , а квадратиками.
Скажите, пожалуйста, как всё это исправить и привести в исходное положение.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Мои первые шаги в обучении языку MQL4 под MetaTrader 4 привели к тому, что в платформе МТ4 исчез русский язык, а стала какая-то абракадабра.
Ещё раз присмотревшись к клавиатуре я поняла , что на кнопку с точкой с запятой нажимала не ту. Их, оказывается, две.
Так же и пароль в skype стал писаться не экране монитора не точками , а квадратиками.
Скажите, пожалуйста, как всё это исправить и привести в исходное положение.



востановление системы с точки времени когда все было нормально.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Дмитрий (домашнее задание к последнему уроку)!
Помоги,пожалуйста, разобраться.Советник в тестере "по ценам открытия" работает хорошо. Но на Демо счете, на контрольных точках и всех тиках в тестере - выставляет до 500 ордеров за несколько секунд, а за день - 2-3 пачки таких ордеров.Как сделать, чтобы на Демо и реальном счете он выставлял 1 ордер на Д1 ?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Как то в теме был мой вопрос как подсчитать количество свечей меньшего таймфрейма на более старшем. Например
подсчитать сколько всего свечей M1 на таймфрейме D1(Symbol(),Period(),0); Решение найдено, может кому понадобится

datetime t=iTime(Symbol(),PERIOD_D1,0);
datetime tt=iTime(Symbol(),PERIOD_M1,0);
int i=0;
while(t {
i++;
tt=iTime(Symbol(),PERIOD_M1,i);
}

сам советник t1=старший тф, t2=младший

Count_candle.ex4
Count_candle.mq4

Изменено пользователем vitek01
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здравствуйте! Попытался сделать советника скидывающего на телефон уведомление о появлении сигнала. Что то получилось, вроде бы даже работает как задумано, но как то криво. Подскажите есть ли другое, более красивое решение такой задачи.

IB_Signal.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Здравствуйте! Попытался сделать советника скидывающего на телефон уведомление о появлении сигнала. Что то получилось, вроде бы даже работает как задумано, но как то криво. Подскажите есть ли другое, более красивое решение такой задачи.


"как то криво" – понятие растяжимое. Что именно не устраивает?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

"как то криво" – понятие растяжимое. Что именно не устраивает?


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Необходимо перебрать определенное количество баров, выделив из них тело бара и посчитав его среднее значение.

double SredBar()
{
int KolBar=200;
double brazmerbara=0;
for(int i=1; i {
double op = iOpen(Symb,TimFr,i);
double cl = iClose(Symb, TimFr, i);
pp=MarketInfo(OrderSymbol(),MODE_POINT);
double bop =NormalizeDouble(op/pp,2);
double bcl =NormalizeDouble(cl/pp,2);

if(cl>op) brazmerbara=bcl-bop;
if(cl brazmerbara++;
}
double sred=NormalizeDouble((brazmerbara/KolBar),2);
return(NormalizeDouble(sred,2));
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Необходимо перебрать определенное количество баров, выделив из них тело бара и посчитав его среднее значение.



Можно так
double AvgBars(int bars)
{
double sum = 0;
if(bars == 0 || _Point == 0) return(0);
for(int i = 0; i {
sum += MathAbs(Open - Close);
}
return(NormalizeDouble((sum / bars) / _Point, 2));
}
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здравствуйте, помогите начинающему горе "программисту".

Сейчас смотрю уроки с сайта, параллельно "балуюсь" с кодом и формулами (вспоминаю алгебру за 5й класс).

Решил посчитать АТР дневной свечи и поиграться с этим значением. Не трогая пока массивы и прочие сложности, получил детский код:

double CandleHigh = iHigh(Symbol(), 0, 0);
double CandleLow = iLow(Symbol(), 0, 0);
double CandleATR = (CandleHigh - CandleLow) / Point;

Далее я работаю с CandleATR, использую его в расчете Стоп-Лосса, вывожу на экран через Comment и тд.
Я кидаю ЕА на график D1, и все работает нормально, значение CandleATR считается и отображается хорошо, сделки открываются.

Но когда я запуская тестер, то получаю zero divide. Путем подмены переменных на числа, я дошел до формулы CandleATR.
Как я понял тестер в начале прогона пытается получить значения iHigh и iLow, но не может (своим нубским мышлением я пришел к выводу что на начало работе ЕА, тестер просто не успевает "нарисовать" свечу, хотя скорей всего это чушь) и возвращает значения 0. 0-0=0 / Point
Соответственно CandleATR = 0, а так как далее в формулах я делю на CandleATR, получаю критическую ошибку и остановку тестера.

Я залез чутка дальше своего развития и попытался использовать

High и Low
, но результат тот же. В онлайне все работает, в тестере zero divide.
Поиск в интернете результатов пока не приносит, проблема с zero divide встречается часто, но конкретно мой случай я пока не нашел.

Подскажите как быть?

p.s. Все котировки для тестера загружены и в других ЕА работают корректно. Изменено пользователем Nikavl
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...