Ваши вопросы по языку MQL4

matro3

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

AsTs

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

Да я тоже, думаю, что как нибудь с применением магического номера. Только не могу пока придумать как это в код загнать.
 

CrazyDoc

Новичок форума
Доброго дня. Пожалуйста подскажите, есть ли метод позволяющий использовать msd команды в MQL? в частности "Application.".
 

vladradon

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

Lalaland

Прохожий
Нужна помощь со стохастиком. Принцип использования прост, при достижении стохастика значения х, открывается позиция. Помогите если не с кодом, то хоть с логикой. Не могу понять, как выудить нужное значение из стохастика и как сравнить.
 

matro3

Почетный гражданин
Не пойму проблемы
_http://docs.mql4.com/ru/indicators/istochastic
 

vladradon

Программист
Нужна помощь со стохастиком. Принцип использования прост, при достижении стохастика значения х, открывается позиция. Помогите если не с кодом, то хоть с логикой. Не могу понять, как выудить нужное значение из стохастика и как сравнить.

if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)>iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
&& iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)>zoneBUY)
{
.. Открытие бай
}
if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)<iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
&& iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)<zoneSELL)
{
.. Открытие селл
}

per_K,per_D,slow,MODE_LWMA - параметры стохастика:
extern int per_K =200;
extern int per_D =20;
extern int slow =20;
extern int zoneBUY =50;
extern int zoneSELL =50;
и, соответственно, зоны zoneBUY и zoneSELL, при выходе за которые будут открываться ордера. Начальные параметры чисто ориентировочные для другого советника.
Как вариант, взял из своего старого сова. Может пригодится.)))
 
Последнее редактирование:

vladradon

Программист
Да я тоже, думаю, что как нибудь с применением магического номера. Только не могу пока придумать как это в код загнать.

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

Вложения

  • BestAdvisor2.mq4
    10,9 КБ · Просмотры: 28

Dapxah85

Интересующийся
Помогите разобраться

Здравствуйте Уважаемые Форумчане, большая просьба, помогите разобраться с индикатором , FX TrendBand MTF.ex4

Я не могу понять какие входные параметры, т.е.

...
extern string Indicator[A]Name = "FX TrendBand MTF v1.01"
//[A] - что тут ставить : подчеркивание, или слитно не пойму
...
два одинаковых параметра section

Если можно то напишите весь код по входным параметрам, хочу сову написать! Хотя там все очень просто пересечение 5EMA и 10EMA.

Просто мне очень интересно!))
А ЕСЛИ ЕСТЬ У КОГО ИСХОДНИК , ТО ЕЩЕ ЛУЧШЕ САМ ПОЙМУ!

Заранее огромное спасибо!
 

Вложения

  • FX TrendBand MTF.ex4
    277,5 КБ · Просмотры: 28
  • Входные параметры FX TrendBand MTF.jpg
    Входные параметры FX TrendBand MTF.jpg
    75,8 КБ · Просмотры: 22

AlexeyVik

Программист mql4 mql5
Здравствуйте Уважаемые Форумчане, большая просьба, помогите разобраться с индикатором , FX TrendBand MTF.ex4

Я не могу понять какие входные параметры, т.е.

...
extern string Indicator[A]Name = "FX TrendBand MTF v1.01"
//[A] - что тут ставить : подчеркивание, или слитно не пойму
...
два одинаковых параметра section

Если можно то напишите весь код по входным параметрам, хочу сову написать! Хотя там все очень просто пересечение 5EMA и 10EMA.

Просто мне очень интересно!))
А ЕСЛИ ЕСТЬ У КОГО ИСХОДНИК , ТО ЕЩЕ ЛУЧШЕ САМ ПОЙМУ!

Заранее огромное спасибо!
Можно ничего не ставить. Это информативные строки, они в расчётах никак не участвуют.
 

Semenov Semen

Прохожий
Всем привет! Помогите пожалуйста привязать советник к счету. Читал на mql5 форуме что нужно писать int AccountNumber(); и еще что то после int start,а у меня только int OnInit .
 

ansol

Местный знаток
Всем привет! Помогите пожалуйста привязать советник к счету. Читал на mql5 форуме что нужно писать int AccountNumber(); и еще что то после int start,а у меня только int OnInit .

PHP:
int OnInit()
  {
//---
   Sleep(5000);
   if(Account > 0 && Account != AccountNumber()) 
      { Comment("Trade on account: ",AccountNumber()," FORBIDDEN!\n", TimeToStr(TimeLocal(),TIME_MINUTES)); return(INIT_PARAMETERS_INCORRECT); }
}
Где Account - внешняя переменная, в которую прописывается номер счета
 

Semenov Semen

Прохожий
PHP:
int OnInit()
  {
//---
   Sleep(5000);
   if(Account > 0 && Account != AccountNumber()) 
      { Comment("Trade on account: ",AccountNumber()," FORBIDDEN!\n", TimeToStr(TimeLocal(),TIME_MINUTES)); return(INIT_PARAMETERS_INCORRECT); }
}
Где Account - внешняя переменная, в которую прописывается номер счета

Наверно,я неправильно сформулировал. Мне нужно привязать советник к своему счету и скомпилировать в ex4 файл. Так как вы сказали тоже не получается-куча ошибок....(
 

Dobryj

Почетный гражданин
Приветы !
прошу помощи с кодом советника , логика советника основана на том что он должен торговать от вертикальных линий (по времени )
1. если время бара и линии совпадает -> вход

datetime t1 = ObjectGet("1",OBJPROP_TIME1); //извлекаем время линии
if(t1==Time[0]) a=true; // сравним время линии с нулевым баром
если а =true тогда входим в рынок
...
Вопрос , из 10 линий только на Шести-Семи срабатывает условие открытия ордера , при этом на разных участках теста по времени срабатывают разные линии , например с июня по июль сработали линии 1
2 4 6 8 9 а в мае 2-4-5-8-9... почему так ?
при компиляции выбивает предупреждение вот в этой строке
datetime t1 = ObjectGet("1",OBJPROP_TIME1); // время линии
possible loss of data due to type conversion
---------------------------------------------------------
В данном примере компилятор предупреждает о возможной потере точности при присвоении различных типов данных и неявном преобразовании типа
, как такое возможно если я извлекаю время в переменную типа datetime ?
может поэтому время линии и бара не совпадает ...
Как это исправить?
Возможно что тестор глючит , хотя подкачал все котировки ...?

СПАСИБО!
 
Последнее редактирование:

ansol

Местный знаток
Наверно,я неправильно сформулировал. Мне нужно привязать советник к своему счету и скомпилировать в ex4 файл. Так как вы сказали тоже не получается-куча ошибок....(

Пишем
PHP:
int Account=Номер_счета;
int OnInit() 
  { 
   if(Account > 0 && Account != AccountNumber())  return(INIT_PARAMETERS_INCORRECT);
}
Какие еще ошибки, если это работает в сове прямо сию минуту?
Если номер заданного вами счета и счета, на котором запущен сов не совпадает, то инициализация завершится с ошибкой и торговать сов не будет.
 

matro3

Почетный гражданин
datetime t1 = ObjectGet("1",OBJPROP_TIME1); //извлекаем время линии
if(t1==Time[0]) a=true; // сравним время линии с нулевым баром
Попробуйте так: TimeCurrent()>=t1
при компиляции выбивает предупреждение вот в этой строке
datetime t1 = ObjectGet("1",OBJPROP_TIME1); // время линии
possible loss of data due to type conversion
ObjectGet - возвращает тип double
 

AlexeyVik

Программист mql4 mql5
Приветы !
прошу помощи с кодом советника , логика советника основана на том что он должен торговать от вертикальных линий (по времени )
1. если время бара и линии совпадает -> вход

datetime t1 = ObjectGet("1",OBJPROP_TIME1); //извлекаем время линии
if(t1==Time[0]) a=true; // сравним время линии с нулевым баром
если а =true тогда входим в рынок
...
Вопрос , из 10 линий только на Шести-Семи срабатывает условие открытия ордера , при этом на разных участках теста по времени срабатывают разные линии , например с июня по июль сработали линии 1
2 4 6 8 9 а в мае 2-4-5-8-9... почему так ?
при компиляции выбивает предупреждение вот в этой строке
datetime t1 = ObjectGet("1",OBJPROP_TIME1); // время линии
possible loss of data due to type conversion
---------------------------------------------------------
В данном примере компилятор предупреждает о возможной потере точности при присвоении различных типов данных и неявном преобразовании типа
, как такое возможно если я извлекаю время в переменную типа datetime ?
может поэтому время линии и бара не совпадает ...
Как это исправить?
Возможно что тестор глючит , хотя подкачал все котировки ...?

СПАСИБО!
Обрати внимание на скобки
datetime t1 = datetime (ObjectGet("1", OBJPROP_TIME1));
или
datetime t1 = (datetime) ObjectGet("1", OBJPROP_TIME1);

избавит от предупреждения. А если не поможет в основной проблеме, то надо более внимательно проверять время создания линий. Возможно там и есть несовпадение.
 

vladradon

Программист
Пишем
PHP:
int Account=Номер_счета;
int OnInit() 
  { 
   if(Account > 0 && Account != AccountNumber())  return(INIT_PARAMETERS_INCORRECT);
}
Какие еще ошибки, если это работает в сове прямо сию минуту?
Если номер заданного вами счета и счета, на котором запущен сов не совпадает, то инициализация завершится с ошибкой и торговать сов не будет.
Может просто эти строки нужно не в Онините прописать, а в Онтике в первых строках (Старте) - тогда сов не будет работать, а в Онините прошла проверка или нет, только ретерн что-то выдал и все, дальше сов работает. А лучше вместо ретерна сразу поставить завершение работы сова с каким-то сообщением:

if(Account != AccountNumber())
{
Print ("Какое-то сообщение о несовпадении номера счета");
ExpertRemove();
}
если используем ExpertRemove(), то проверку можно и в Онините прописать.
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Может просто эти строки нужно не в Онините прописать, а в Онтике в первых строках (Старте) - тогда сов не будет работать, а в Онините прошла проверка или нет, только ретерн что-то выдал и все, дальше сов работает.
Лучше в ините по условию несовпадения номера счёта выполнить ExpertRemove();
Только я заметил такую особенность, сначала выполняется весь код, а потом советник выгружается. Тоесть если в ините прописано открытие ордеров, то они будут открыты независимо от того, что ExpertRemove(); прописан раньше чем OrderSend() и условие выгрузки советника выполнено.
 
Верх