[ARCHIVE!] Any rookie question, so as not to clutter up the forum. Professionals, don't pass by. Can't go anywhere without you - 4. - page 430

 

Guys,help with the code.

Help find the price of the first arrow up (on the chart marked these places in yellow) or down (green).I can find the price and time of formation of the last arrow up and down(on the chart marked these places in black) is this:

for(u=Bars-1;u>0;u--){

if(iRSI(NULL,PERIOD_M5,14,PRICE_CLOSE,0) >70)

{time70=iTime(Symbol(), PERIOD_M5,u);//shows time of the last arrow down

price70=iOpen(Symbol(), PERIOD_M5, u);}} //shows price of the last down arrow

for(p=Bars-1;p>0;p--) {

if(iRSI(NULL,PERIOD_M5,14,PRICE_CLOSE,0) <30)

{some_time30=iTime(Symbol(), PERIOD_M5,p); //showstime oflast arrow up

price30=iOpen(Symbol(), PERIOD_M5, p);}}//shows price of last up arrow
 
Escapee: Please advise solution;
I need the script to automatically set the minimum server stop loss on the current symbol when opening an order. What should be written here? OrderSend(Symbol(),OP_BUY,0.01,Ask,10,?,0);

Read

When setting a pending order, the opening price cannot be too close to the market. The minimum distance of the pending price from the current market price in points can also be obtained using the MarketInfo() function with the MODE_STOPLEVEL parameter. If the pending order opens at an incorrect price, error 130 (ERR_INVALID_STOPS) will be generated.
Get
OrderSend(Symbol(),OP_BUY,0.01,Ask,10, Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point, 0);
 

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

In special constants, these are:

" indicator_buffers number of buffers to calculate the indicator, up to a maximum of 8 "

Under custom indicators:

" Allocates memory for buffers used for custom indicator calculations. The number of buffers cannot exceed 8 and be less than the value specified in the indicator_buffers property. If the custom indicator requires additional buffers for counting, you should use this function to specify the total number of buffers. "

If the number of buffers is specified, I think this already means allocating memory for buffers. Correct me if you mean something else here, please.

 

Good afternoon. Question about a file pointer... In the MQL4 book, found at MQL4.community, in the "Standard Functions" section, there is an example of the script "File Operations", which is intended for reading data from a file and displaying graphical objects in a symbol window:

//--------------------------------------------------------------------
// 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 --

Below, when analyzing this script in the Book on MQL4, the following phrase is given: "if the specified check (the last 2 lines in block 5-6) is removed, an extra object will be created at runtime. And only after that, the while loop's termination condition will trigger and control will be passed to block 8-9".

Do I understand it correctly? A file pointer is NOT INFLOWED BY TEXT SIGNS (for example: text| where | is a file pointer), but is a pointer WITH EXPRESSION, for example: text where k is the "to" character, k-th is highlighted by a file pointer. This explains the need for strings (see p.164):

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

Indeed. On penultimate iteration, after creating LAST object

2007.05.11 18:30;JPY

the file pointer is at the position of the last object, i.e:

2007.05.11 18:30;JPY IndustrialManufacture

(where o is the "o" character, k is the file index). Then when passing control to while statement header, FileIsEnding(handle) function will obviously return true, because file pointer is NOT at end of file, but at LAST character of that file. Then when the first two lines are executed, the file pointer will move to empty space and if there are no lines

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

the script will create a graphic (i.e. a line) with an empty description and a time coordinate that corresponds to 0. This is what is meant in the phrase: "if the specified check (the last 2 lines in block 5-6) is removed, then an extra object will be created at runtime. "

Question: do I understand correctly:

a) the definition of a file pointer;

b) the meaning of the phrase "If the specified check (the last 2 lines in block 5-6) is deleted, then an extra object will be created at program execution.And only after that the while loop's end condition will be triggered and control will be passed to block 8-9".

P.S. In order not to litter the forum, thank you in advance for your answer

 

Please tell me, I have no experience, if between two ticks my program sends several commands to the server, will they all be executed, or only the first command ? Where can I find information on this subject ?

 
cubus:

Please tell me, I have no experience, if between two ticks my program sends several commands to the server, will they all be executed, or only the first command ? Where can i find information on this subject ?


Read:

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

 
Thank you very much !
 
Vladero:

Hello! I have a question about indicators in MQL4 and I can't figure it out... For example, I have a simple fractal indicator:

If I compile it in this form, when extending the left border of the chart and loading history, it starts glitching and shows marks where they should not be (see screenshot in attachment). If we comment out a part of the code:

Then these glitches disappear... The same glitches appear when loading history, if you fill only "nonempty" elements of the indicator array and don't reset indicator value where there are no labels...

Why does this happen? Why, it turns out, is it necessary to recalculate the whole indicator when loading the history? And why do I have to null the values of "empty" elements of the array?

If the bars were indexed from left to right, at history loading the indexes of the bars would change, and the indicator would be incorrectly displayed without recalculation, then we would understand this glitch ... But in MT4 bars are indexed from right to left, so, when loading the history, the indexes of the bars, that were indexed, should remain the same (and the indicator values, too), then why recalculate the indicator and where do these mark shifts come from?


Why is it necessary to recalculate the whole indicator when loading the history? And why should the values of "empty" elements of the array be zeroed? And if you don't do this, then the indicators are displayed incorrectly...
 
hoz:
#property indicator_buffers specifies the number of buffers to be displayed.
IndicatorBuffers specifies the total number of buffers used.

Example.
#property indicator_buffers 2
.......... .................................
IndicatorBuffers 3

Draws two lines, the third buffer is not shown but is used for intermediate calculations.
 
Can you please tell me how to output 1 value and an already redrawn indicator value as 2 lines, which is redrawn in a separate indicator? I can't figure it out, it always outputs the last redrawn value.