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

От xbms, 13 апреля, 2013 в Уголок Программиста

#5476

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

#5477

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


Из терминала нельзя, из программы без проблем.
#5478

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


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

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

Можно, если объект OBJ_EDIT
#5480

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

Изменено 18 марта, 2019 пользователем diodio

#5481


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


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

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");
}

Изменено 18 марта, 2019 пользователем MikR0ReR

#5482



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


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

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.
#5483

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

#5484

Подскажите что не так в индикаторе выдает предупреждение на эту строку "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

#5485

Новый урок:
http://tradelikeapro.ru/mql4-upravlenie-pc-iz-sovetnika/

#5486


Подскажите что не так в индикаторе выдает предупреждение на эту строку "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"
#5487

Это значит что в строку(типа 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");" , но хотелось бы чтобы приходило сообщение с указанием на каком инструменте. Как это возможно сделать?

Изменено 19 марта, 2019 пользователем Partorius

#5488

как можно прописать решение подобного уравнение (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"

Изменено 19 марта, 2019 пользователем 0ll

#5489

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


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

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

#5491


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


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



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


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


Да, всё точно так!!!
#5493


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



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
#5494



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



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.mq41 скач.

#5495




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



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;
#5496





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



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;


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






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



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
#5498

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

#5499


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


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



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


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

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

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

Перейти к списку тем
Форум · 2.0.20260627.0025