Внутренние переменные

Для каждой выполняющейся MQL4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы — эксперта, скрипта или пользовательского индикатора.

Библиотеки пользуются переменными вызвавшего их модуля.

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

Ask

double Ask

Последняя известная цена продажи (запрашиваемая цена) текущего инструмента. Для обновления необходимо использовать функцию RefreshRates().
См. также MarketInfo().

Пример:

if(iRSI(NULL,0,7,PRICE_CLOSE,0) < 25)    
{
     OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid-StopLoss*Point, Ask+TakeProfit*Point, "Order Buy #2",3,D'2017.09.13 10:45',Blue);
     return;    
}

 

Bars

int Bars

Количество баров на текущем графике.
См. также iBars().

Пример:

int counter=1;  
for(int i=1; i<=Bars; i++)    
{
     Print(Close[i-1]);    
}

 

Bid

double Bid

Последняя известная цена покупки (предложение на покупку) текущего инструмента. Для обновления необходимо использовать функцию RefreshRates().
См. также MarketInfo().

Пример:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)    
{
     OrderSend("EURUSD", OP_SELL, Lots, Bid, 3, Ask+StopLoss*Point, Bid-TakeProfit*Point, "Orderl SELL #2",3,D'2017.09.13 10:45',Red);
     return(0);    
}

 

Close

double Close[]

Массив-таймсерия, содержащий цены закрытия каждого бара текущего графика.

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

См. также iClose().

Пример:

int handle = FileOpen("file.csv", FILE_CSV|FILE_WRITE, ";");  
if(handle>0)    
{
     // запись заголовков столбцов таблицы
     FileWrite(handle, "Time;Open;High;Low;Close;Volume");
     // запись данных
     for(int i=0; i<Bars; i++)
       FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
     FileClose(handle);    
}

 

Digits

int Digits

Количество цифр после десятичной точки в цене текущего инструмента.
См. также MarketInfo().

Пример:

Print(DoubleToStr(Close[0], Digits));

 

High

double High[]

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

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

См. также iHigh().

Пример:

//---- maximums counting
i=Bars-KPeriod;  
if(counted_bars>KPeriod)
   i=Bars-counted_bars-1;   

while(i>=0)     
{
      double max=-1000000;
      k=i+KPeriod-1;
      while(k>=i)
      {
         price=High[k];
         if(max<price)
            max=price;
         k--;
      }
      HighesBuffer[i]=max;
      i--;     
}

Low

double Low[]

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

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

См. также iLow().

Пример:

//---- minimums counting   
i=Bars-KPeriod;   
if(counted_bars>KPeriod)
   i=Bars-counted_bars-1;

   while(i>=0)
   {
      double min=1000000;
      k=i+KPeriod-1;

      while(k>=i)
      {
         price=Low[k];
         if(min>price)
             min=price;
         k--;      
      }

      LowesBuffer[i]=min;
      i--;     
}

 

Open

double Open[]

Массив-таймсерия, содержащий цены открытия каждого бара текущего графика.

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

См. также iOpen().

Пример:

i = Bars - counted_bars - 1;   

while(i>=0)     
{
      double high  = High[i];
      double low   = Low[i];
      double open  = Open[i];
      double close = Close[i];

      AccumulationBuffer[i] = (close-low) - (high-close);

      if(AccumulationBuffer[i] != 0)
      {
         double diff = high - low;
         if(0==diff)
            AccumulationBuffer[i] = 0;
         else
         {
            AccumulationBuffer[i] /= diff;
            AccumulationBuffer[i] *= Volume[i];
         }
      }

      if(i<Bars-1)
          AccumulationBuffer[i] += AccumulationBuffer[i+1];
      i--;     
}

 

Point

double Point

Размер пункта текущего инструмента в валюте котировки.
См. также MarketInfo().

Пример:

OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, Ask+TakeProfit*Point);

 

Time

datetime Time[]

Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Данные типа datetime представляют собой время в секундах, прошедшее с 00:00 1 января 1970 года.

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

См. также iTime().

Пример:

for(i=Bars-2; i>=0; i--)
{
      if(High[i+1] > LastHigh) 
         LastHigh = High[i+1];
      if(Low[i+1] < LastLow)
         LastLow  = Low[i+1];

      if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
      {
         P = (LastHigh + LastLow + Close[i+1])/3;
         R1 = P*2 - LastLow;
         S1 = P*2 - LastHigh;
         R2 = P + LastHigh - LastLow;
         S2 = P - (LastHigh - LastLow);
         R3 = P*2 + LastHigh - LastLow*2;
         S3 = P*2 - (LastHigh*2 - LastLow);
         LastLow  = Open[i];
         LastHigh = Open[i];
      }

      PBuffer[i]  = P;
      S1Buffer[i] = S1;
      R1Buffer[i] = R1;
      S2Buffer[i] = S2;
      R2Buffer[i] = R2;
      S3Buffer[i] = S3;
      R3Buffer[i] = R3;
}

 

Volume

double Volume[]

Массив-таймсерия, содержащий тиковые объемы каждого бара текущего графика.

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

См. также iVolume().

Пример:

if(i==0 && time0<i_time+periodseconds)
{
   d_volume += Volume[0];
   if(Low[0]<d_low)   d_low = Low[0];
   if(High[0]>d_high) d_high = High[0];

   d_close = Close[0];
}

last_fpos = FileTell(ExtHandle);
last_volume = Volume[i];

FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);