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

Vanek_V

Прохожий
ПОМОГИТЕ НАЧИНАЮЩЕМУ

Подскажите пожалуйста как в MQL 4 прописать условие, чтобы советник проверял динамику рынка в определенный промежуток времени (например, нахождение точек экстремума только в период с 01:00 до 13:00 каждого дня, а не за весь день)?
Если можно пропишите кодом.
Заранее спасибо.
 

officialboob

Элитный участник
Подскажите пожалуйста как в MQL 4 прописать условие, чтобы советник проверял динамику рынка в определенный промежуток времени (например, нахождение точек экстремума только в период с 01:00 до 13:00 каждого дня, а не за весь день)?
Если можно пропишите кодом.
Заранее спасибо.


Активация функции:

PHP:
if(isTradeTimeInt(01,00,13,00)) {

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

}


Функция:

PHP:
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени. *испр.         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

Andrew9999

Прохожий
mgl4 запись в файл

Подскажите пожалуйста как записывать строку в файл через каждую минуту? Не получается сделать задержку времени!!!!!!
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int filehandle;
//ResetLastError();
filehandle=FileOpen("my_file.txt",FILE_WRITE|FILE_TXT);
if(filehandle!=INVALID_HANDLE)
{
while(1)
{
FileWrite(filehandle,"строку надо записать в файл");
Sleep(60000); //функция не работает
}
FileClose(filehandle);
Print("FileOpen OK");
}
else Print("Операция FileOpen неудачна, ошибка ",GetLastError());

}
//+------------------------------------------------------------------+
 

_SERG_

Активный участник
Подскажите пожалуйста как записывать строку в файл через каждую минуту? Не получается сделать задержку времени!!!!!!
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int filehandle;
//ResetLastError();
filehandle=FileOpen("my_file.txt",FILE_WRITE|FILE_TXT);
if(filehandle!=INVALID_HANDLE)
{
while(1)
{
FileWrite(filehandle,"строку надо записать в файл");
Sleep(60000); //функция не работает
}
FileClose(filehandle);
Print("FileOpen OK");
}
else Print("Операция FileOpen неудачна, ошибка ",GetLastError());

}
//+------------------------------------------------------------------+


А как ты пришел к выводу, что не работает ?

{
<------- Вставь сюда Prinr("[" + TimeToStr (TimeLocal(), TIME_DATE | TIME_SECONDS) +"]"); и посмотри лог, мож чё и поменяется. :laugh:
FileWrite(filehandle,"строку надо записать в файл");
Sleep(60000); //функция не работает
}
 

AlexeyVik

Программист mql4 mql5
Подскажите пожалуйста как записывать строку в файл через каждую минуту? Не получается сделать задержку времени!!!!!!

А как ты пришел к выводу, что не работает ?
В тестере функция Sleep() не работает.
 

_SERG_

Активный участник
В тестере функция Sleep() не работает.

Скрипт в тестере? :facepalm:
Оригинально!

Я в курсе :laugh:,что слип не работает и циклить скрипт на тестере не стоит, но человек свято верит в идентичность условий на "Демо"/"Реале", вот и задаю вопрос: "Как к такому віводу пришел?".

Имея абсолютную уверенность в своих навыках, люди так же уверены и в том, с чем работают, не ставя эту уверенность под сомнение, проверяя её, и в дальнейшем используя как навык и опыт.
Не спорю, что большинство имеет как правило бесполезный опыт, в связи с чем занимается бОльшую часть времени поиском ошибок и нестыковок в т.ч. и не по своей вине.
Во завернул! :laugh:
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Я в курсе :laugh:,что слип не работает и циклить скрипт на тестере не стоит, но человек свято верит в идентичность условий на "Демо"/"Реале", вот и задаю вопрос: "Как к такому віводу пришел?".

Имея абсолютную уверенность в своих навыках, люди так же уверены и в том, с чем работают, не ставя эту уверенность под сомнение, проверяя её, и в дальнейшем используя как навык и опыт.
Не спорю, что большинство имеет как правило бесполезный опыт, в связи с чем занимается бОльшую часть времени поиском ошибок и нестыковок в т.ч. и не по своей вине.
Во завернул! :laugh:
Да я что-то совсем не глянул на шапку. Вот и получилось что поумничал...:D
 

derzerack

Интересующийся
Уважаемые товарищи программисты. Необходимо сделать так чтобы при наступление условия открывался 1 отложенный ордер, а не куча. Задача осложняется тем что необходимо держать открытыми несколько отложек, планирую 3. Другими словами появилось условие открылась одна отложка, позже опять появляется условие открывается вторая. Далее при появлении условий удаляю лишнюю отложку и выставляю новую. Немогу понять как ограничить выставление отложек по количеству и цене. Чтоб в одну цену не устанавливалось 100500 ордеров. Заранее благодарен за ответ.
 

vlad_123

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

officialboob

Элитный участник
Уважаемые товарищи программисты. Необходимо сделать так чтобы при наступление условия открывался 1 отложенный ордер, а не куча. Задача осложняется тем что необходимо держать открытыми несколько отложек, планирую 3. Другими словами появилось условие открылась одна отложка, позже опять появляется условие открывается вторая. Далее при появлении условий удаляю лишнюю отложку и выставляю новую. Немогу понять как ограничить выставление отложек по количеству и цене. Чтоб в одну цену не устанавливалось 100500 ордеров. Заранее благодарен за ответ.




PHP:
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);
}

PHP:
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последнего открытого ордера. *        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastOrder(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>=2) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
Последнее редактирование:

федорини

Прохожий
Добрый день ! Как написать индикатор я знаю. А если у меня два массива в которые я записал в программе MQL4 значения переменных и хочу построить график зависимости значений одного массива от значений другого массива. Может кто-нибудь подскажет хотя бы приблизительно как это написать на MQL4. В виде скрипта или индикатора. Заранее благодарен
 

Ugar

Гуру форума
Добрый день ! Как написать индикатор я знаю. А если у меня два массива в которые я записал в программе MQL4 значения переменных и хочу построить график зависимости значений одного массива от значений другого массива. Может кто-нибудь подскажет хотя бы приблизительно как это написать на MQL4. В виде скрипта или индикатора. Заранее благодарен
Я так понял хочешь сравнить 2 значения буферах. Скорее всего результат будет не соизмерим с графиком цены. Самое простое сделай индикатор с буфером в подвале. В буфер пиши значение после сравнения 2 буферов, которые можно получить по iCustom.
 

derzerack

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

Огромное спасибо за ответ. Такой вариант работает. кнопки "спасибо" не нашёл, поэтому благодарю в этом сообщении.
 

haxbam

Интересующийся
Нужна помошь в доработке индикатора.

Всем привет!
Нашел графический индикатор , скачал ,немного переделал его под свои нужды. Но я не знаю что нужно добавить в графический индикатор что бы с него эксперт мог считывать 2 разных сигнала HighSignal (строка 57) и LowSignal(строка 69).
Я так понимаю нужно обозначить имя индикатора и вставить буфер в который бы потом писались и считывались нужные переменные. Но как это сделать не пойму.
Помогите пожалуйста доделать этот индикатор ,и еще какой командой в эксперте можно считать с него значения ?
 

Вложения

  • ewe.mq4
    4 КБ · Просмотры: 35

AlexeyVik

Программист mql4 mql5
Всем привет!
Нашел графический индикатор , скачал ,немного переделал его под свои нужды. Но я не знаю что нужно добавить в графический индикатор что бы с него эксперт мог считывать 2 разных сигнала HighSignal (строка 57) и LowSignal(строка 69).
Я так понимаю нужно обозначить имя индикатора и вставить буфер в который бы потом писались и считывались нужные переменные. Но как это сделать не пойму.
Помогите пожалуйста доделать этот индикатор ,и еще какой командой в эксперте можно считать с него значения ?
А он у тебя хоть что-то показывает? Рисует трендовые? Бывают-ли алерты?
 

haxbam

Интересующийся
А он у тебя хоть что-то показывает? Рисует трендовые? Бывают-ли алерты?
Да! Конечно рисует! Свою задачу он полностью выполняет, вот только вытянуть из него результат в эксперта никак не могу.
 

Вложения

  • 2016-05-23_20-46-17.png
    2016-05-23_20-46-17.png
    48,1 КБ · Просмотры: 41

AlexeyVik

Программист mql4 mql5
Да! Конечно рисует! Свою задачу он полностью выполняет, вот только вытянуть из него результат в эксперта никак не могу.
У меня совсем молчит, да и по коду вроде-бы долго придётся ждать, потому держи не проверенный вариант.
Из советника можно получить через iCustom() буфер 0 == 0 сигнал Buy, буфер 1 == 1 сигнал Sell
Ну а в принципе наверное сможешь подправить какие значения в буфер ставить.
 

Вложения

  • ewe.mq4
    4,4 КБ · Просмотры: 38

Минька

Активный участник
Всем привет! Возникла идея по закрытию свечи старшего таймфрейма (например М15), сделать расчет индикатора с младшего таймфрейма (например М1), то есть подсчитать 15 свечей для М1, а результат вывести на М15 и так для каждой свечи М15. Не соображу как сделать.
 
Верх