Для каждой выполняющейся 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);