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

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


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

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

Я правильно поняла, что проще использовать индикатор и советник параллельно, чем объединять их в одном коде?

Я смотрю мнения разделились... Постараюсь высказать мнение, которое всех удовлетворит: проще объединить, если Вы программист и не нужна визуализация значений на истории, но бывают сложные индикаторы, которые проще подключить к советнику.
В общем, если без конкретики, то так - общий трёп. ;)

Подскажите пожалуйста ,в чём ошибка и как исправить!

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

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

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

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

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

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

Перейти

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

Перейти

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

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


но это работает достаточно медленно, поэтому если есть возможность лучше перенести код индикатора в сову.


если в коде советника считывать индикатор один раз в свечу, то тормоза вряд ли добавятся(если логика индикатора подразумевает расчет по свечам, а не по тикам).

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

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



Здравствуйте! Подскажите пожалуйста ,в чём ошибка и как исправить! Спасибо!

Это не ошибка, скорее предупреждение. Он-лайн переводчик: empty controlled statement found / найден пустой управляемый оператор! строка 63. Я тоже учусь, и учусь помогать, Если работает с предупреждением то хорошо если как у меня нет, то лучше целиком выкладывать код. Возможно ";" лишнее строка 63. да простят меня гуру.

Спасибо!Оказались лишними ";" !

Добавлено: 20-11-2018 09:11:14

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

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

Добрый день. Прошу помочь, кому не сложно.
Есть индикатор itddots_.mq4 (во вложении), который рисует TD-точки.
Вызываю из совы строками:

double levelbuy = iCustom(NULL,OpenBarTimeFrame,"extremum\itddots_",dotLevel,OpenBarTimeFrame,0,1);
double levelsell = iCustom(NULL,OpenBarTimeFrame,"extremum\itddots_",dotLevel,OpenBarTimeFrame,1,1);

Однако приходят нулевые значения. Как правильно получить цены по которым построены точки?

itddots_.mq4

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

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

Как правильно получить цены по которым построены точки?

В справке по функции iCustom написано: ""Examples\\имя_индикатора" (обязательно указание двойного обратного слеша вместо одиночного в качестве разделителя)."
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Я пробовал. Не влияет на результат, не работает в обоих случаях. Пробовал поменять индикатор на другой - значения приходят нормально, но мне непонятно, что не так с этим индикатором.

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

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

Всем Доброго дня! Изучал урок " Изучаем MQL : Трейлинг-стоп". При написании кода, Трейлинг-стоп " плавает" вместе с ценой на тестере. Подскажите, что исправить в коде, чтобы при развороте цены Трейлинг-стоп не возвращался назад к открытому ордеру!

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

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

Приветствую! Прошу помощи с Уровнями Фибоначчи. Нарисовать то нарисовал при помощи ObjectCreate. А вот как узнать что цена дошла или если правильно выразиться как узнать какой уровень на какой цене?


Всем Доброго дня! Изучал урок " Изучаем MQL : Трейлинг-стоп". При написании кода, Трейлинг-стоп " плавает" вместе с ценой на тестере. Подскажите, что исправить в коде, чтобы при развороте цены Трейлинг-стоп не возвращался назад к открытому ордеру!


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

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

А вот как узнать что цена дошла или если правильно выразиться как узнать какой уровень на какой цене?

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

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

код, что бы трейлинг стоп двигался за ценой по средней

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

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

Комрады, как собирать показания сигналов советников стоящих на разных графиках/таймфреймах в один, устаешь переключать таймфреймы и перебирать графики?

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

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

как собирать показания сигналов советников стоящих на разных графиках/таймфреймах в один


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

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


как собирать показания сигналов советников стоящих на разных графиках/таймфреймах в один


Как вариант, через глобальные переменные терминала. Если советники с открытым кодом и в него можно внести соответствующие правки.


А можно пример небольшой, сейчас копаюсь в инете, про GlobalVariable практически ничего толкового нет,
покажите как в 1 советнике обьявлять глобальную переменную, а в 2 советнике видеть эту переменную. а дальше я сам!
Ссылка на сообщение
Поделиться на другие сайты

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

А можно пример небольшой


В советнике, после получения сигнала на вход задаешь какую либо глобальную:
bool signal = true;
GlobalVariableSet("MyValue",signal);

Т.е. сигнал есть, он true (можно и значение double передать). Эти данные можно посмотреть через клавишу F3. Когда сигнала нет, выставляешь false.

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

bool mySignal = false;
if(GlobalVariableCheck("MyValue")) mySignal = GlobalVariableGet("MyValue");


В OnDeinit не забывай потом чистить терминал от них:
GlobalVariableDel("MyValue")


Если много советников, то можно задать общее имя глобальной "MyValue" плюс для каждого графика добавлять ТФ+Имя пары, т.е. к примеру "MyValue EURUSD M15". Тогда в общем управляемом коде делать поиск глобальной обычный перебором for всех глобальных GlobalVariablesTotal() по имени "MyValue", но тогда и в OnDeinit удалять их тоже перебором.
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

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


А можно пример небольшой


В советнике, после получения сигнала на вход задаешь какую либо глобальную:
bool signal = true;
GlobalVariableSet("MyValue",signal);

Т.е. сигнал есть, он true (можно и значение double передать). Эти данные можно посмотреть через клавишу F3. Когда сигнала нет, выставляешь false.

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

bool mySignal = false;
if(GlobalVariableCheck("MyValue")) mySignal = GlobalVariableGet("MyValue");


В OnDeinit не забывай потом чистить терминал от них:
GlobalVariableDel("MyValue")


Если много советников, то можно задать общее имя глобальной "MyValue" плюс для каждого графика добавлять ТФ+Имя пары, т.е. к примеру "MyValue EURUSD M15". Тогда в общем управляемом коде делать поиск глобальной обычный перебором for всех глобальных GlobalVariablesTotal() по имени "MyValue", но тогда и в OnDeinit удалять их тоже перебором.

Rever27 Даже не знаю как вам выразить благодарность, большое спасибо!
-----------------------------------------------------------------------------------------------
А как с одного терминала на другой перекидывать данные переменных? Изменено пользователем vitek01
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте.
Если ордеров несколько, то одновременная модификация или закрытие нескольких ордеров происходит долго (несколько секунд).
Возможно ли сделать так, чтобы приказ на модификацию или закрытие следующего ордера подавался не дожидаясь ответа на предыдущий приказ? Чтобы все ордера закрывались или модифицировались одномоментно.

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

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

Возможно ли сделать так, чтобы приказ на модификацию или закрытие следующего ордера подавался не дожидаясь ответа на предыдущий приказ?


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

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


Возможно ли сделать так, чтобы приказ на модификацию или закрытие следующего ордера подавался не дожидаясь ответа на предыдущий приказ?


Невозможно, все закрытие идет последовательно, циклом перебора ордеров. Если закрывается сетка, то нужно вначале закрывать ордера с бОльшим лотом.
Несколько секунд задержка не из-за обработки терминалом кода, а из-за пинга и ожидания ответа брокера.


Мне пришла такая мысль:Допустим у меня возможны 10 ордеров. Я открываю 10 графиков и ставлю на них программу для модификации и закрытия ордеров. каждая из программ имеет свой магик. При открытии ордеров каждому присваивается отдельный магик. Когда появляется сигнал на модификацию или закрытие, он через глобальную переменную раздается всем десяти программам и каждая программа управляет только одним ордером.
Так будет одномоментное исполнение приказов?
(торгую руками и управляю ордерами с кнопок нарисованных на графике)
Изменено пользователем mmaxx
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте.
Если выделить несколько строк и нажать TAB, то строки вместе смещаются вправо, а как сделать что бы они смещались влево?

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

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

Так будет одномоментное исполнение приказов?


Когда прочитал твой пост, у меня возникла такая мысль. Но это танцы с бубнами. Таким образом ты добьешься одновременной отсылки приказов о закрытии ордеров на сервер брокера. Сократишь время, но насколько, трудно сказать . Учитывай тот факт, что брокер сводит твои ордера и противоположного покупателя и пока это не произойдет, твои ордера не закроются. Например, ты хочешь закрыть ордер 1 лотом. Брокер ищет кто хочет купить этот лот. Это может быть как один покупатель, так и несколько, 0.5 лота 0.3 лота и 0.2 лота. Вот это основная задержка помимо пинга от компа до брокера и от брокера до компа. Твоя идея решит только малую часть задержки, первую, пинг от компа до брокера и все. Сам думай, стоит ли овчинка выделки и танцами.

СТОП! Перечитал твои посты еще раз! Так ты модификацию и закрытие производишь кодом(советники, скрипты) или все же руками?

как сделать что бы они смещались влево?


Shift + Tab
В справке к MT4 есть!!! :-W Изменено пользователем MikR0ReR
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
mmaxx в МТ4 одновременно закрыть ордера не получится - терем всё равно будет ждать ответа сервера и не отдаст исполнение другому графику. Вам в МТ5 нужно - там совокупная позиция закрывается в разы быстрее.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

Спойлер


void ClosePosBySizeProfit()
{
double profluser=0;
double prlock=0;
for(int y=OrdersTotal()-1; y>=0; y--) //перебор ордеров
{
if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && (OrderMagicNumber()==magic_b || OrderMagicNumber()==magic_s)) //находим наш единственный ордер с уникальным магиком
{
prlock=OrderProfit();// и если он есть то определяем его профит в переменную
}
}
}
for(int h = 0; h {
if(OrderSelect(h,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL) //определяем их тип
{
profluser += OrderProfit()+OrderSwap()+OrderCommission(); //сумируем их профит с учетом комиссии и свопа
if(MathAbs(profluser) {
if(OrderType() == OP_BUY) bool close_profit_buy = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage);
if(OrderType() == OP_SELL) bool close_profit_sell = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage);
}
}
}
}
}
}

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
0ll,Rever27, подскажите , пожалуйста, еще один момент по скорости закрытия нескольких ордеров.
Если я при закрытии каждого из ордеров записываю в эксель-файл информацию по нему, это увеличивает время закрытия сетки?

Меня в первую очередь интересует спред в момент закрытия ордера. Может существует возможность получать эту информацию из истории?


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

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

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

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

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

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

Войти

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

Войти

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


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

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