[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 431

 
Escapee: Посоветуйте решение;
нужно, чтобы скрипт при открытии ордера автоматически устанавливал минимально возможный на сервере стоплосс по текущему финансовому инструменту. Что же нужно тут написать? OrderSend(Symbol(),OP_BUY,0.01,Ask,10,?,0);

Читаем

При установке отложенного ордера цена открытия не может быть слишком близкой к рынку. Минимальное расстояние отложенной цены от текущей рыночной цены в пунктах также можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае неправильной цены открытия отложенного ордера будет сгенерирована ошибка 130 (ERR_INVALID_STOPS).
Получаем
OrderSend(Symbol(),OP_BUY,0.01,Ask,10, Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point, 0);
 

В документации есть 2 момента касательно индикаторов.

В специальных константах, это:

" indicator_buffers количество буферов для расчета индикатора, максимум до 8 "

В разделе пользовательские индикаторы:

" Распределяет память для буферов, используемых для вычислений пользовательского индикатора. Количество буферов не может превышать 8 и быть менее значения, указанного в свойстве indicator_buffers. Если пользовательский индикатор требует дополнительных буферов для счета, следует использовать эту функцию для указания общего числа буферов. "

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

 

Доброго времени суток. Вопрос по файловому указателю... В книге по MQL4, к-я находится на MQL4.community в главе "Стандартные функции", в разделе "Файловые операции" приведен пример скрипта timetablenews.mq4, к-й предназначен для считывания данных из файла и отображения графических объектов в окне финансового инструмента:

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Ниже, при анализе данного скрипта в Книге по MQL4 приведена следующая фраза: "если указанную проверку (2 последние строки в блоке 5-6) удалить, то в процессе исполнения программы будет создан лишний объект. И лишь после этого сработает условие окончания цикла while и управление будет передано в блок 8-9"

Правильно ли я понимаю???... Файловый указатель находится НЕ МЕЖДУ СИМВОЛАМИ ТЕКСТА (напр.: тек|ст, где | — файловый указатель), а является указателем С ВЫДЕЛЕНИЕМ, напр.: текст, где к — символ "к", к-й выделен файловым указателем. Этим и объясняется необходимость наличия строк (см. стр.164):

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

Действительно. На предпоследней итерации, после создания ПОСЛЕДНЕГО объекта

2007.05.11 18:30;JPY Промышленное производство

файловый указатель находится в позиции последнего объекта, т.е.:

2007.05.11 18:30;JPY Промышленное производство

(где о — символ "о", к-й выделен файловым указателем). Тогда при передаче упра­вления в заголовок оператора while, функция FileIsEnding(handle), очевидно вернет true, т.к. файловый указатель находится НЕ В КОНЦЕ файла, а на ПОСЛЕДНЕМ СИМВОЛЕ этого файла. Тогда при выполнении первых двух строк файловый указатель переместится на ПУСТОЕ место и при отсутствии строк

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

скрипт создаст графический (т.е. линию) с пустым описанием и координатой времени, к-я соответствует 0. Это и имеется в виду во фразе: "если указанную проверку (2 последние строки в блоке 5-6) удалить, то в процессе исполнения программы будет создан лишний объект."

Вопрос: правильно ли я понимаю:

а) определение файлового указателя;

б) смысл фразы "если указанную проверку (2 последние строки в блоке 5-6) удалить, то в процессе исполнения программы будет создан лишний объект. И лишь после этого сработает условие окончания цикла while и управление будет передано в блок 8-9"

P.S. Чтобы не захламлять форум, заранее благодарю за ответ

 

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

 
cubus:

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


Читаем:

https://book.mql4.com/ru/basics/common

 
Большое спасибо !
 
Vladero:

Здравствуйте! Меня вот волнует один вопрос по индикаторам на MQL4, и никак не могу до конца понять... Например, есть несложный индикатор фракталов:

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

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

Почему это происходит? Почему, получается, обязательно надо при подгрузке истории пересчитывать весь индикатор? И почему надо обнулять значения "пустых" элементов инд. массива?

Если бы бары индексировались слева направо, то при подгрузке истории индексы баров сменялись бы и индикатор без перерасчёта отображался бы неверно, тогда был бы понятен такой глюк... Но ведь в МТ4 бары индексируются справа налево, значит, при подгрузке истории, индексы тех баров, которые были, должны были остаться теми же (и значения индикатора тоже), тогда зачем перерасчитывать индикатор и откуда берутся эти сдвиги меток?


Почему обязательно надо при подгрузке истории пересчитывать весь индикатор? И почему надо обнулять значения "пустых" элементов инд. массива? А если этого не делать - то индикаторы отображаются некорректно...
 
hoz:
#property indicator_buffers указывает количество буферов, которые будут отображаться.
IndicatorBuffers указывает общее количество используемых буферов.

Пример.
#property indicator_buffers 2
.......... .................................
IndicatorBuffers 3

Рисуем две линии, третий буфер не отображается, а используется для промежуточных расчетов.
 
Подскажите пожалуйста, как вывести 1 значение и уже перерисованное значение индикатора в виде 2х линий, который перерисовывается в отдельном индикаторе? Не могу сообразить, постоянно выводит последнее перерисованное значение.
 
К сожалению, так никто и не ответил про ошибку при попытке установить 438-й билд https://www.mql5.com/ru/forum/138609/page425