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

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


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

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

есть ли возможность изменять текст объекта, прямо на графике, не входя в его свойства? или есть что то подобное,?
спасибо..

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

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

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

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

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

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

Перейти

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

Перейти

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

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

есть ли возможность изменять текст объекта, прямо на графике, не входя в его свойства? или есть что то подобное,?
спасибо..


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

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

есть ли возможность изменять текст объекта, прямо на графике, не входя в его свойства?


Если я правильно понял, типа два раза нажать ЛКМ и в вести нужное значение, то такой возможности нет. Предусмотрено изменение чего либо через код(эксперт, индикатор, скрипт), ну или вызова окошка "свойства" чего либо на графике. Конечно можно через тот же код вывести статичное окошко на график с полем для ввода значения или текста в зависимости от задачи. И это значение будет передаваться куда надо, например в тот же текст объекта.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

есть ли возможность изменять текст объекта, прямо на графике, не входя в его свойства?

Можно, если объект OBJ_EDIT
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Может кто подсказать какое условие нужно советнику чтоб он открывал позиции на покупку и на продажу при наличии сигналов? Например стоит покупка и появляется сигнал на продажу, тут советник ставит ещё ордер и на продажу.
Можно так?
if (если есть сигнал на покупку)
{ открываем ордер на покупку}
||
if (если есть сигнал на продажу)
{ открываем ордер на продажу}
т.е. вся конструкция без else

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

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


Может кто подсказать какое условие нужно советнику чтоб он открывал позиции на покупку и на продажу при наличии сигналов?


Все верно написал! С маленькой поправкой.

if (если есть сигнал на покупку)
{ открываем ордер на покупку}
|| if (если есть сигнал на продажу)
{ открываем ордер на продажу}


Добавлено: 18-03-2019 20:49:16

Изучаю код индикатора и наткнулся на не понятные мне строки. Прошу разъяснить.

extern string TimeFrame = "Current time frame";
bool calculateValue;
bool returnBars;

int init()
{
calculateValue = (TimeFrame=="calculateValue");
returnBars = (TimeFrame=="returnBars");
}
Изменено пользователем MikR0ReR
Ссылка на сообщение
Поделиться на другие сайты

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



Может кто подсказать какое условие нужно советнику чтоб он открывал позиции на покупку и на продажу при наличии сигналов?


Все верно написал! С маленькой поправкой.

if (если есть сигнал на покупку)
{ открываем ордер на покупку}
|| if (если есть сигнал на продажу)
{ открываем ордер на продажу}


Добавлено: 18-03-2019 20:49:16

Изучаю код индикатора и наткнулся на не понятные мне строки. Прошу разъяснить.

extern string TimeFrame = "Current time frame";
bool calculateValue;
bool returnBars;

int init()
{
calculateValue = (TimeFrame=="calculateValue");
returnBars = (TimeFrame=="returnBars");
}


Совет. Не изучайте старую версию языка.
bool a=b==c; -означает, что если b==c, то a=true, иначе a=false.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день!! Подскажите, пожалуйста, как можно прописать решение подобного уравнение (1,6x+3.4)/(x+2)=1.6333 в коде. :-? Заранее благодарю!! ^:)^

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

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

Подскажите что не так в индикаторе выдает предупреждение на эту строку "drawLine(indicator_name+" "+tn+ur1+"V",tn,(ur21-ur1)/k,tn+(86400-(UTC*3600)),N,ur1);" Пишет
implicit conversion from 'number' to 'string' High_Low.mq4 193 30

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

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


Подскажите что не так в индикаторе выдает предупреждение на эту строку "drawLine(indicator_name+" "+tn+ur1+"V",tn,(ur21-ur1)/k,tn+(86400-(UTC*3600)),N,ur1);" Пишет
implicit conversion from 'number' to 'string' High_Low.mq4 193 30


Это значит что в строку(типа string) хотите впихнуть числовое значение(типа int, long, char или double и т.д.).
Это не ошибка, будет и так работать. НО надо приучаться к написанию правильного кода. Типа так:
Я понимаю что drawLine это функция и Вы передаете в нее переменные. Скорее всего ошибка тут indicator_name+" "+tn+ur1+"V"
indicator_name - уж по любому тип string, значит все в порядке
tn - если целое числовое значение (типа int, long, char) то компилятор ее хочет видеть так IntegerToString(tn)
ur1 - например если дробное значение (double) то компилятор ее хочет видеть так DoubleToString(ur1)
и т.д.

В итоге в место indicator_name+" "+tn+ur1+"V" надо indicator_name+" "+IntegerToString(tn)+DoubleToString(ur1)+"V"
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Это значит что в строку(типа string) хотите впихнуть числовое значение(типа int, long, char или double и т.д.).
Это не ошибка, будет и так работать. НО надо приучаться к написанию правильного кода. Типа так:
Я понимаю что drawLine это функция и Вы передаете в нее переменные. Скорее всего ошибка тут indicator_name+" "+tn+ur1+"V"
indicator_name - уж по любому тип string, значит все в порядке
tn - если целое числовое значение (типа int, long, char) то компилятор ее хочет видеть так IntegerToString(tn)
ur1 - например если дробное значение (double) то компилятор ее хочет видеть так DoubleToString(ur1)
и т.д.

В итоге в место indicator_name+" "+tn+ur1+"V" надо indicator_name+" "+IntegerToString(tn)+DoubleToString(ur1)+"V"




Спасибо

Добавлено: 19-03-2019 13:31:24

Еще вопрос. Прописал в индикаторе чтобы выдавал сообщение на мобильник "SendNotification(" сигнал на покупку High/Low");" , но хотелось бы чтобы приходило сообщение с указанием на каком инструменте. Как это возможно сделать? Изменено пользователем Partorius
Ссылка на сообщение
Поделиться на другие сайты

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

как можно прописать решение подобного уравнение (1,6x+3.4)/(x+2)=1.6333 в коде.

Вы просите математическую консультацию? х = 4,3(363), в коде: double x = 4.336;
или что Вы имели в виду?

Прописал в индикаторе чтобы выдавал сообщение на мобильник "SendNotification(" сигнал на покупку High/Low");" , но хотелось бы чтобы приходило сообщение с указанием на каком инструменте. Как это возможно сделать?

SendNotification(_Symbol + " сигнал на покупку High/Low");


Не подскажете где можно скачать SPY++ ?

Попробуйте набрать в строке поиска Гугл: "spy++ download" Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

Вы просите математическую консультацию? х = 4,3(363), в коде: double x = 4.336;
или что Вы имели в виду?


Спасибо за ответ! У меня получилась такая формула x = (1.633*2 - 3.4)/(1.6-1.633), ее и хотел, это на автоматический подсчет лота следующего ордера в сетке в зависимости от поставленной цели безубытка.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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


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


Приветствую! Если я правильно понял то ситуация такая. Предположим мы отслеживаем тренд, два МА, медленная и быстрая. Произошло пересечение, далее вход в сделку. Сделка отработала в профит, тренд теперь тоже считается отработанным. Теперь задача стоит не входить в сделку, ждать нового тренда. Когда новый тренд придет, все повториться по новому, сделка, отработка, ожидание. Верно я Вас понял?
Ссылка на сообщение
Поделиться на другие сайты

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



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


Приветствую! Если я правильно понял то ситуация такая. Предположим мы отслеживаем тренд, два МА, медленная и быстрая. Произошло пересечение, далее вход в сделку. Сделка отработала в профит, тренд теперь тоже считается отработанным. Теперь задача стоит не входить в сделку, ждать нового тренда. Когда новый тренд придет, все повториться по новому, сделка, отработка, ожидание. Верно я Вас понял?


Да, всё точно так!!!
Ссылка на сообщение
Поделиться на другие сайты

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


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



datetime timeold;//старое время начала тренда
datetime timenew;//текущее время тренда
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
trendStart();//узнаем время начало тренда
if(timenew!=timeold)//проверяем, что начался новый тренд
{
//да, новый тренд начался
int ticket=OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0);
if(ticket>0) timeold=timenew;//ордер открыт, считаем тренд отработан
}
}
//+------------------------------------------------------------------+
void trendStart()//узнаем время начала тренда
{
for(int i=0;i {
//для восходящего тренда
if(iMA(NULL,0,13,0,0,0,i)>iMA(NULL,0,20,0,0,0,i) && iMA(NULL,0,13,0,0,0,i+1) {
timenew=Time;//определили время начала сигнала
break;
}
//для нисходящего тренда
if(iMA(NULL,0,13,0,0,0,i)iMA(NULL,0,20,0,0,0,i+1))
{
timenew=Time;//определили время начала сигнала
break;
}
}
}

Я думаю в переборе ордеров Вам подсказывать не надо и как впихнуть в условие IF! Единственное в ордерах нас будут интересовать те, которые открылись после начала нового тренда, т.е. timenew
Ссылка на сообщение
Поделиться на другие сайты

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



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



datetime timeold;//старое время начала тренда
datetime timenew;//текущее время тренда
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
trendStart();//узнаем время начало тренда
if(timenew!=timeold)//проверяем, что начался новый тренд
{
//да, новый тренд начался
int ticket=OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0);
if(ticket>0) timeold=timenew;//ордер открыт, считаем тренд отработан
}
}
//+------------------------------------------------------------------+
void trendStart()//узнаем время начала тренда
{
for(int i=0;i {
//для восходящего тренда
if(iMA(NULL,0,13,0,0,0,i)>iMA(NULL,0,20,0,0,0,i) && iMA(NULL,0,13,0,0,0,i+1) {
timenew=Time;//определили время начала сигнала
break;
}
//для нисходящего тренда
if(iMA(NULL,0,13,0,0,0,i)iMA(NULL,0,20,0,0,0,i+1))
{
timenew=Time;//определили время начала сигнала
break;
}
}
}

Я думаю в переборе ордеров Вам подсказывать не надо и как впихнуть в условие IF! Единственное в ордерах нас будут интересовать те, которые открылись после начала нового тренда, т.е. timenew



Честно говоря моих знаний не хватило разобраться с Вашим кодом. Если Вас не затруднит, посмотрите советник, который я собрал и посоветуйте как туда правильно вставить эти функции. Заранее Спасибо!!!

Samostoaytelno.mq4

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

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




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



datetime timeold;//старое время начала тренда
datetime timenew;//текущее время тренда
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
trendStart();//узнаем время начало тренда
if(timenew!=timeold)//проверяем, что начался новый тренд
{
//да, новый тренд начался
int ticket=OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0);
if(ticket>0) timeold=timenew;//ордер открыт, считаем тренд отработан
}
}
//+------------------------------------------------------------------+
void trendStart()//узнаем время начала тренда
{
for(int i=0;i {
//для восходящего тренда
if(iMA(NULL,0,13,0,0,0,i)>iMA(NULL,0,20,0,0,0,i) && iMA(NULL,0,13,0,0,0,i+1) {
timenew=Time;//определили время начала сигнала
break;
}
//для нисходящего тренда
if(iMA(NULL,0,13,0,0,0,i)iMA(NULL,0,20,0,0,0,i+1))
{
timenew=Time;//определили время начала сигнала
break;
}
}
}

Я думаю в переборе ордеров Вам подсказывать не надо и как впихнуть в условие IF! Единственное в ордерах нас будут интересовать те, которые открылись после начала нового тренда, т.е. timenew



Честно говоря моих знаний не хватило разобраться с Вашим кодом. Если Вас не затруднит, посмотрите советник, который я собрал и посоветуйте как туда правильно вставить эти функции. Заранее Спасибо!!!

Вводится переменная bool isOldTrend;
при открытии ордера isOldTrend=true;
Далее отслеживаются на закрытии каждой свечи было ли пересечение и, если было, isOldTrend=false;
Ссылка на сообщение
Поделиться на другие сайты

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





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



datetime timeold;//старое время начала тренда
datetime timenew;//текущее время тренда
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
trendStart();//узнаем время начало тренда
if(timenew!=timeold)//проверяем, что начался новый тренд
{
//да, новый тренд начался
int ticket=OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0);
if(ticket>0) timeold=timenew;//ордер открыт, считаем тренд отработан
}
}
//+------------------------------------------------------------------+
void trendStart()//узнаем время начала тренда
{
for(int i=0;i {
//для восходящего тренда
if(iMA(NULL,0,13,0,0,0,i)>iMA(NULL,0,20,0,0,0,i) && iMA(NULL,0,13,0,0,0,i+1) {
timenew=Time;//определили время начала сигнала
break;
}
//для нисходящего тренда
if(iMA(NULL,0,13,0,0,0,i)iMA(NULL,0,20,0,0,0,i+1))
{
timenew=Time;//определили время начала сигнала
break;
}
}
}

Я думаю в переборе ордеров Вам подсказывать не надо и как впихнуть в условие IF! Единственное в ордерах нас будут интересовать те, которые открылись после начала нового тренда, т.е. timenew



Честно говоря моих знаний не хватило разобраться с Вашим кодом. Если Вас не затруднит, посмотрите советник, который я собрал и посоветуйте как туда правильно вставить эти функции. Заранее Спасибо!!!

Вводится переменная bool isOldTrend;
при открытии ордера isOldTrend=true;
Далее отслеживаются на закрытии каждой свечи было ли пересечение и, если было, isOldTrend=false;


Уроков на эту тему не было, по этому я не понимаю, даже как правильно эти функции написать и куда добавить сюда, но очень нужно. Может быть есть какие то примеры уже в советнике?
Ссылка на сообщение
Поделиться на другие сайты

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






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



datetime timeold;//старое время начала тренда
datetime timenew;//текущее время тренда
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
trendStart();//узнаем время начало тренда
if(timenew!=timeold)//проверяем, что начался новый тренд
{
//да, новый тренд начался
int ticket=OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0);
if(ticket>0) timeold=timenew;//ордер открыт, считаем тренд отработан
}
}
//+------------------------------------------------------------------+
void trendStart()//узнаем время начала тренда
{
for(int i=0;i {
//для восходящего тренда
if(iMA(NULL,0,13,0,0,0,i)>iMA(NULL,0,20,0,0,0,i) && iMA(NULL,0,13,0,0,0,i+1) {
timenew=Time;//определили время начала сигнала
break;
}
//для нисходящего тренда
if(iMA(NULL,0,13,0,0,0,i)iMA(NULL,0,20,0,0,0,i+1))
{
timenew=Time;//определили время начала сигнала
break;
}
}
}

Я думаю в переборе ордеров Вам подсказывать не надо и как впихнуть в условие IF! Единственное в ордерах нас будут интересовать те, которые открылись после начала нового тренда, т.е. timenew



Честно говоря моих знаний не хватило разобраться с Вашим кодом. Если Вас не затруднит, посмотрите советник, который я собрал и посоветуйте как туда правильно вставить эти функции. Заранее Спасибо!!!

Вводится переменная bool isOldTrend;
при открытии ордера isOldTrend=true;
Далее отслеживаются на закрытии каждой свечи было ли пересечение и, если было, isOldTrend=false;


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

Для начала Вам сюда:
https://docs.mql4.com/ru
Ссылка на сообщение
Поделиться на другие сайты

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

Господа, коллеги :) Подскажите с таким вопросом.
Исходные данные: Есть история сделок на счете по определенной паре, она постепенно увеличивается.
Задача сохранять результат каждой сделки во внешний файл (эксель, б/д, текст, не важно) для того что бы в любой момент советник мог обратится к этому файлу с целью извлечения истории сделок. Если есть у кого пример кода для связки "метак- эксель", просьба показать, ну или как обычно пнуть в нужном направлении что почитать. Заранее спасибо.

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

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


Господа, коллеги :) Подскажите с таким вопросом.
Исходные данные: Есть история сделок на счете по определенной паре, она постепенно увеличивается.
Задача сохранять результат каждой сделки во внешний файл (эксель, б/д, текст, не важно) для того что бы в любой момент советник мог обратится к этому файлу с целью извлечения истории сделок. Если есть у кого пример кода для связки "метак- эксель", просьба показать, ну или как обычно пнуть в нужном направлении что почитать. Заранее спасибо.


А доки почитать не пробовали?
https://docs.mql4.com/ru/files
Ссылка на сообщение
Поделиться на другие сайты

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



Господа, коллеги :) Подскажите с таким вопросом.
Исходные данные: Есть история сделок на счете по определенной паре, она постепенно увеличивается.
Задача сохранять результат каждой сделки во внешний файл (эксель, б/д, текст, не важно) для того что бы в любой момент советник мог обратится к этому файлу с целью извлечения истории сделок. Если есть у кого пример кода для связки "метак- эксель", просьба показать, ну или как обычно пнуть в нужном направлении что почитать. Заранее спасибо.


А доки почитать не пробовали?
https://docs.mql4.com/ru/files

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

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

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

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

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

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

Войти

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

Войти

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


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

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