Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 240

 
Санек:

1) - Эта часть открывает файл 11112222.txt для чтения с него данных:

//=================================BUY=========================================
    int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения

2) - Далее идет условие, если handle2>0


  if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
   {

3) - Вот эта часть для чего я не понял:


       Print(FileReadString(handle2));

4) - Эта часть закрывает файл:


       FileClose(handle2); // закрытие текстового файла

5) - Так как условие handle2>0 выполнено, то есть файл 11112222.txt содержит в себе 1, то открывается ордер на покупку:

  //ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ      
                    if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
                     {
                        OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
                        FileClose(handle2); // закрытие текстового файла
                     }
                    else
                      Print("NE USPESHNO!!!");
                      FileClose(handle2); // закрытие текстового файла

   }
//=================================конец кода BUY=========================================

Какие части я перепутал местами?

1) открывает файл, но не читает его содержимое.

2) хендл файла ВСЕГДА больше нуля. Соответственно условие будет выполнено всегда, если файл существует независимо от его содержимого.

3) Это как раз и есть чтение содержимого файла. Правда не понимаю почему сделано чтение строки если прочесть надо число... Но всё-же это уже может относиться к другой проблеме. А сейчас главное расписать последовательность действий.

4) Конечно файл надо закрыть и он закрывается.

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

 
Alexey Viktorov:

1) открывает файл, но не читает его содержимое.

2) хендл файла ВСЕГДА больше нуля. Соответственно условие будет выполнено всегда, если файл существует независимо от его содержимого.

3) Это как раз и есть чтение содержимого файла. Правда не понимаю почему сделано чтение строки если прочесть надо число... Но всё-же это уже может относиться к другой проблеме. А сейчас главное расписать последовательность действий.

4) Конечно файл надо закрыть и он закрывается.

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

Не-е-е... INVALID_HANDLE имеет значение -1

Вот когда он получит ошибку открытия файла, тогда он и получит сигнал на продажу...

Прочие константы

Специальные константы, используемые для указания состояния параметров и переменных. Mогут быть следующими величинами:

Константа

Описание

Значение

NULL

Ноль любого типа. Также указывает пустое состояние строки

0

EMPTY

Указывает пустое состояние параметра

-1

EMPTY_VALUE

Пустое значение в индикаторном буфере

2147483647 (0x7FFFFFFF)

CLR_NONE, clrNONE

Отсутствие цвета. Значение по умолчанию, указатель пустого значения. Используется в пользовательских индикаторах

-1

CHARTS_MAX

Максимально возможное количество одновременно открытых графиков в терминале

100

INVALID_HANDLE

Некорректный хэндл

-1

IS_DEBUG_MODE

Признак работы mq5-программы в режиме отладки

в режиме отладки не равно нулю, в противном случае 0

IS_PROFILE_MODE

Признак работы mq5-программы в режиме профилирования

в режиме профилирования не равно нулю, в противном случае 0

WHOLE_ARRAY

Означает количество элементов, оставшееся до конца массива, то есть, будет обработан весь массив

0

WRONG_VALUE

Константа может неявно приводиться к типу любого перечисления

-1

 

Не Видел эту тему, потому создал новую. Посмотрите пожалуйста https://www.mql5.com/ru/forum/206126

Как в тестере стратегий получить TimeGMT();
Как в тестере стратегий получить TimeGMT();
  • 2017.06.28
  • www.mql5.com
Справочник MQL5, Дата и время, TimeGMT TimeGMT - При работе в тестере стратегий время TimeGMT() всегда равно моделируемому серверному времени TimeT...
 
Alexey Viktorov:

1) открывает файл, но не читает его содержимое.

2) хендл файла ВСЕГДА больше нуля. Соответственно условие будет выполнено всегда, если файл существует независимо от его содержимого.

3) Это как раз и есть чтение содержимого файла. Правда не понимаю почему сделано чтение строки если прочесть надо число... Но всё-же это уже может относиться к другой проблеме. А сейчас главное расписать последовательность действий.

4) Конечно файл надо закрыть и он закрывается.

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

Уважаемые гуру MQL - если вам не трудно, то помогите мне пожалуйста с этим кодом, пол дня ковыряю поисковики но подобного найти не могу.

Там же походу дело в нескольких строчках, для знающего - дело трех минут)))

 

Как в dll в c++ принять строку из mql4 и переделать ее в char*?

struct MqlStr
{
        int               len;
        char             *string;
};

static int proc_func(char* Name);

MT4_EXPFUNC int __stdcall myfunc(MqlStr sym_name)
{
        proc_func(sym_name[0].string);
        
}
int proc_func(char* Name)
{
}
Вот такой код же правильный?
 

Всем привет! Подскажите пожалуйста, написал советник где-то год назад, работал все нормально было. Все это время не пользовался им. Сейчас при установке на график ничего не происходит. Может это быть из-за того что поменялся Build? Сейчас Build терминала 1090.

 
СанекУважаемые гуру MQL - если вам не трудно, то помогите мне пожалуйста с этим кодом, пол дня ковыряю поисковики но подобного найти не могу.

Там же походу дело в нескольких строчках, для знающего - дело трех минут)))

Потратил 2 часа. Надо систему проверять по частям. Запустите оба советника сразу на соседних графиках - все будет видно. Советник 1 = Запись в файл

//+------------------------------------------------------------------+
//| Запись в файл -1  0  1                                     1.mq4 |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Инициализация - установка интервала таймера                      |
//+------------------------------------------------------------------+
void OnInit()
{
   EventSetTimer(7);
}


//+------------------------------------------------------------------+
//| Деинициализация - удаление метки                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int Зачем)
{
   ObjectDelete("Семафор");
}


//+------------------------------------------------------------------+
//| По таймеру каждые 7 секунд                                       |
//+------------------------------------------------------------------+
void OnTimer()
{
   int x=0;
   if(rand()<20000)
   {
     x=1;
     if(rand()<16000) x=-1;
   }

   ObjectCreate("Семафор",OBJ_LABEL,0,0,0);
   ObjectCreate("Семафор", OBJ_LABEL, 0, 0, 0);  // Создание
   ObjectSet("Семафор", OBJPROP_CORNER, 3);      // В правый нижний угол
   ObjectSet("Семафор", OBJPROP_XDISTANCE, 0);   // Координата X   
   ObjectSet("Семафор", OBJPROP_YDISTANCE, 40);  // Координата Y
   ObjectSetText("Семафор",(string)x+" Открываю",20,"Arial",Yellow);
   ChartRedraw(0);
   Sleep(2000);

   int handle = FileOpen("123.txt", FILE_BIN | FILE_WRITE);
   if(handle == -1)
   {
      ObjectSetText("Семафор","Ошибка",20,"Arial",Salmon);
      ChartRedraw(0);
      return;
   }

   ObjectSetText("Семафор",(string)x+" Записываю",20,"Arial",DeepSkyBlue);
   ChartRedraw(0);

   FileWriteInteger(handle, x, 4);
   Sleep(2000);

   ObjectSetText("Семафор","",20,"Arial",White);
   ChartRedraw(0);
   FileClose(handle);
}

Советник 2 = Чтение файла

//+------------------------------------------------------------------+
//| Чтение файла  -1  0  1                                     2.mq4 |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Инициализация - установка интервала таймера                      |
//+------------------------------------------------------------------+
void OnInit()
{
   EventSetTimer(1);
}


//+------------------------------------------------------------------+
//| Деинициализация - удаление метки                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int Зачем)
{
   ObjectDelete("Семафор");
}


//+------------------------------------------------------------------+
//| По таймеру каждую секунду                                        |
//+------------------------------------------------------------------+
void OnTimer()
{
   int x=0;

   ObjectCreate("Семафор",OBJ_LABEL,0,0,0);
   ObjectCreate("Семафор", OBJ_LABEL, 0, 0, 0);  // Создание
   ObjectSet("Семафор", OBJPROP_CORNER, 2);      // В правый нижний угол
   ObjectSet("Семафор", OBJPROP_XDISTANCE, 0);   // Координата X   
   ObjectSet("Семафор", OBJPROP_YDISTANCE, 40);  // Координата Y
   ObjectSetText("Семафор","",20,"Arial",Yellow);
   ChartRedraw(0);

   Sleep(500);
   int handle = FileOpen("123.txt", FILE_BIN | FILE_READ);  // Получаем НОМЕР файла в ОС
   if(handle == -1)                // Если производится запись, файл занят, будет ошибка
   {
      ObjectSetText("Семафор","Ошибка",20,"Arial",Salmon);
      ChartRedraw(0);
      return;
   }

   x = FileReadInteger(handle,4);                          // Получаем СОДЕРЖИМОЕ файла
   ObjectSetText("Семафор",(string)x+" Прочитал",20,"Arial",DeepSkyBlue);
   ChartRedraw(0);

   FileClose(handle);
}
 
toni_stark:

Всем привет! Подскажите пожалуйста, написал советник где-то год назад, работал все нормально было. Все это время не пользовался им. Сейчас при установке на график ничего не происходит. Может это быть из-за того что поменялся Build? Сейчас Build терминала 1090.


Вполне возможно, было много нововведений. Начните с проверки на ошибки при компиляции. С директивой #PropertyStrict

 
Vladimir Zubov:

Вполне возможно, было много нововведений. Начните с проверки на ошибки при компиляции. С директивой #PropertyStrict

Нет такой директивы...

Такая есть:

#property strict
 
Vladimir Zubov:

Вполне возможно, было много нововведений. Начните с проверки на ошибки при компиляции. С директивой #PropertyStrict


Artyom Trishkin:

Нет такой директивы...

Такая есть:


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

Причина обращения: