Операции с графиками

Группа функций, предназначенных для работы с окном текущего графика.

 

HideTestIndicators

void HideTestIndicators(bool hide)

Функция выставляет флаг скрытия индикаторов, вызываемых экспертом. При открытии графика после тестирования индикаторы, помеченные флагом скрытия, не будут выведены на график тестирования. Перед каждым вызовом индикатор помечается текущим установленным флагом скрытия.
Необходимо отметить, что на график тестирования могут быть выведены только те индикаторы, которые непосредственно вызываются из тестируемого эксперта.

Параметры:

hide — TRUE — если нужно прятать индикаторы, иначе FALSE.

Пример:

HideTestIndicators(true);
MaCurrent=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,1);
HideTestIndicators(false);

 

Period

int Period()

Возвращает значение числа минут периода для текущего графика.

Пример:

Print("Период ", Period());

 

RefreshRates

bool RefreshRates()

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

Пример:

int ticket;

while(true)
{
  ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"комментарий эксперта",255,0,CLR_NONE);

  if(ticket<=0)
  {
     int error=GetLastError();

     //---- недостаточно денег
     if(error==134) break;

     //---- 10 секунд ожидания
     Sleep(10000);

     //---- обновим ценовые данные
     RefreshRates();
  }
  else
  {
     OrderSelect(ticket,SELECT_BY_TICKET);
     OrderPrint();
     break;
  }
}

 

Symbol

string Symbol()

Возвращает текстовую строку с именем текущего финансового инструмента.

Пример:

int total=OrdersTotal();

for(int pos=0;pos<total;pos++)
{
   // результат выбора проверки, так как ордер может быть закрыт или удален в это время!
   if(OrderSelect(pos, SELECT_BY_POS)==false) 
      continue;

   if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) 
      continue;

   // делает некоторую обработку...
}

 

WindowBarsPerChart

int WindowBarsPerChart()

Функция возвращает количество баров, помещающихся в окно текущего графика.

Пример:

// обработка видимых баров.
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--)
{
   // номера баров уменьшаются, так как нумерация идет в обратном порядке.
   // ...
}

 

WindowExpertName

string WindowExpertName()

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

Пример:

string name=WindowExpertName();
GlobalVariablesDeleteAll(name);

 

WindowFind

int WindowFind(string name)

Возвращает номер подокна графика, содержащего индикатор с указанным именем name, если он найден, иначе возвращается -1.
WindowFind() возвращает -1, если пользовательский индикатор ищет сам себя в процессе инициализации init().

Параметры:

name — Короткое имя индикатора.

Пример:

int win_idx = WindowFind("MACD(12,26,9)");

 

WindowFirstVisibleBar

int WindowFirstVisibleBar()

Функция возвращает номер первого видимого бара в окне текущего графика. Необходимо иметь в виду, что ценовые бары нумеруются задом наперед, от последнего к первому. Текущий бар, самый последний в ценовом массиве, имеет индекс 0. Самый старый бар имеет индекс Bars-1. Если номер первого видимого бара меньше, чем количество видимых баров на графике на 2 и более, это значит, что окно графика заполнено не до конца и имеется поле справа.

Пример:

// обработка видимых баров.
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--)
{
   // номера баров уменьшаются, так как нумерация идет в обратном порядке.
   // ...
}

 

WindowHandle

int WindowHandle(string symbol, int timeframe)

Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.

Параметры:

symbol — Символ.
timeframe — Период. Может быть одним из периодов графика.

Пример:

int win_handle=WindowHandle("USDX",PERIOD_H1);
if(win_handle!=0)
   Print("Окно с USDX, H1 обнаружено. Массив будет скопирован.");

 

WindowIsVisible

bool WindowIsVisible(int index)

Возвращает TRUE, если подокно графика видимо, иначе возвращает FALSE. Подокно графика может быть скрыто из-за свойств видимости помещенного в него индикатора.

Параметры:

index — Индекс подокна графика.

Пример:

int maywin=WindowFind("MyMACD");
if(maywin>-1 && WindowIsVisible(maywin)==true)
  Print("окно MyMACD видимое");
else
  Print("окно MyMACD не обнаружено или не видимое");

 

WindowOnDropped

int WindowOnDropped()

Возвращает индекс окна, в которое был брошен эксперт, пользовательский индикатор или скрипт. Это значение будет верным только в том случае, если эксперты, пользовательские индикаторы и скрипты прикреплены с помощью мыши (технология «drag and drop»).
Для пользовательских индикаторов, находящихся в процессе инициализации (вызов из функции init()) этот индекс не определен.
Возвращаемый индекс является номером окна (0-главное окно графика, подокна индикаторов нумеруются с 1), в котором работает пользовательский индикатор. В процессе инициализации пользовательский индикатор может создать свое собственное новое подокно и его номер будет отличаться от номера окна, на которое действительно был брошен индикатор.
См. также WindowXOnDropped(), WindowYOnDropped()

Пример:

if(WindowOnDropped()!=0)
{
   Print("Скрипт MyVisualTrading должен быть брошен на основное окно графика!");
   return(0);
}

 

WindowPriceMax

double WindowPriceMax(int index=0)

Возвращает максимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). Если индекс подокна не указан, то возвращается максимальное значение ценовой шкалы главного окна графика.
См. также WindowPriceMin(), WindowFirstVisibleBar(), WindowBarsPerChart()

Параметры:

index — Индекс подокна текущего графика (0 — основной график цены).

Пример:

double top=WindowPriceMax();
double bottom=WindowPriceMin();
datetime left=Time[WindowFirstVisibleBar()];
int right_bound=WindowFirstVisibleBar()-WindowBarsPerChart();

if(right_bound<0) 
   right_bound=0;

datetime right=Time[right_bound]+Period()*60;
//----
ObjectCreate("Padding_rect",OBJ_RECTANGLE,0,left,top,right,bottom);
ObjectSet("Padding_rect",OBJPROP_BACK,true);
ObjectSet("Padding_rect",OBJPROP_COLOR,Blue);
WindowRedraw();

 

WindowPriceMin

double WindowPriceMin(int index=0)

Возвращает минимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). Если индекс подокна не указан, то возвращается минимальное значение ценовой шкалы главного окна графика.
См. также WindowPriceMax(), WindowFirstVisibleBar(), WindowBarsPerChart()

Параметры:

index — Индекс подокна текущего графика (0 — основной график цены).

Пример:

double top=WindowPriceMax();
double bottom=WindowPriceMin();
datetime left=Time[WindowFirstVisibleBar()];
int right_bound=WindowFirstVisibleBar()-WindowBarsPerChart();

if(right_bound<0)
   right_bound=0;

datetime right=Time[right_bound]+Period()*60;
//----
ObjectCreate("Padding_rect",OBJ_RECTANGLE,0,left,top,right,bottom);
ObjectSet("Padding_rect",OBJPROP_BACK,true);
ObjectSet("Padding_rect",OBJPROP_COLOR,Blue);
WindowRedraw();

 

WindowPriceOnDropped

double WindowPriceOnDropped()

Возвращает значение цены в точке графика, на которой был брошен эксперт или скрипт. Значение будет верным только в случае, если эксперт или скрипт перемещены с помощью мыши (технология «drag and drop»).
Для пользовательских индикаторов это значение не определено.
См. также WindowTimeOnDropped(), WindowYOnDropped(), WindowOnDropped()

Пример:

double drop_price=WindowPriceOnDropped();
datetime drop_time=WindowTimeOnDropped();

//---- может быть неопределенным (нуль)
if(drop_time>0)
{
   ObjectCreate("Уровень цены", OBJ_HLINE, 0, drop_price);
   ObjectCreate("Значение времени", OBJ_VLINE, 0, drop_time);
}

 

WindowRedraw

void WindowRedraw()

Принудительно перерисовывает текущий график. Обычно применяется после изменения свойств объектов.

Пример:

//---- установим новые свойства нескольких объектов
ObjectMove(object_name1, 0, Time[index], price);
ObjectSet(object_name1, OBJPROP_ANGLE, angle*2);
ObjectSet(object_name1, OBJPROP_FONTSIZE, fontsize);
ObjectSet(line_name, OBJPROP_TIME2, time2);
ObjectSet(line_name, OBJPROP_ANGLE, line_angle);

//---- теперь все перерисуем
WindowRedraw();

 

WindowScreenShot

bool WindowScreenShot(string filename, int size_x, int size_y, int start_bar=-1, int chart_scale=-1, int chart_mode=-1)

Сохраняет изображение текущего графика в файле формата GIF. В случае неудачи возвращает FALSE. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Скриншот сохраняется в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках.

Параметры:

filename — Имя файла для скриншота.
size_x — Ширина скриншота в пикселах.
size_y — Высота скриншота в пикселах.
start_bar — Номер первого видимого бара на скриншоте. Если указано значение 0, то скриншот снимается с текущего первого видимого бара. Если значение не указано, или указано отрицательное значение, то делается скриншот конца графика с учётом правого отступа.
chart_scale — Масштаб графика, выводимого на скриншот. Может принимать значение от 0 до 5. Если значение не указано, или указано отрицательное значение, то используется текущий масштаб графика.
chart_mode — Вид отображения графика. Может принимать значения: CHART_BAR (0 — последовательность баров), CHART_CANDLE (1 — японские свечи), CHART_LINE (2 — линия по ценам закрытия). Если значение не указано, или указано отрицательное значение, то график выводится в своем текущем виде.

Пример:

int lasterror=0;

//---- тестер закрыл одну или несколько позиций
if(IsTesting() && ExtTradesCounter<TradesTotal())
{
   //---- снимем скриншот для проверки
   if(!WindowScreenShot("shots\tester"+ExtShotsCounter+".gif",640,480))
      lasterror=GetLastError();
   else
      ExtShotsCounter++;

   ExtTradesCounter=TradesTotal();
}

 

WindowTimeOnDropped

datetime WindowTimeOnDropped()

Возвращает значение времени в точке графика, на которой был брошен эксперт или скрипт. Значение будет верным только в случае, если эксперт или скрипт перемещены с помощью мыши (технология «drag and drop»).
Для пользовательских индикаторов это значение не определено.
См. также WindowPriceOnDropped(), WindowXOnDropped(), WindowOnDropped()

Пример:

double drop_price=WindowPriceOnDropped();
datetime drop_time=WindowTimeOnDropped();

//---- может быть неопределенным (нуль)
if(drop_time>0)
{
   ObjectCreate("Уровень цены", OBJ_HLINE, 0, drop_price);
   ObjectCreate("Значение времени", OBJ_VLINE, 0, drop_time);
}

 

WindowsTotal

int WindowsTotal()

Возвращает количество окон индикаторов на графике, включая главное окно графика.

Пример:

Print("Количество окон = ", WindowsTotal());

 

WindowXOnDropped

int WindowXOnDropped()

Возвращает значение координаты по оси X в пикселах точки клиентской области окна графика, на которой был брошен эксперт или скрипт. Значение будет верным только в случае, если эксперт или скрипт перемещены с помощью мыши (технология «drag and drop»).
См. также WindowYOnDropped(), WindowTimeOnDropped(), WindowOnDropped()

Пример:

Print("Эксперт был прикреплен к окну в точке с координатами x=",WindowXOnDropped()," y=",WindowYOnDropped());

 

WindowYOnDropped

int WindowYOnDropped()

Возвращает значение координаты по оси Y в пикселах точки клиентской области окна графика, на которой был брошен эксперт или скрипт. Значение будет верным только в случае, если эксперт или скрипт перемещены с помощью мыши (технология «drag and drop»).
См. также WindowXOnDropped(), WindowPriceOnDropped(), WindowOnDropped()

Пример:

Print("Эксперт был прикреплен к окну в точке с координатами x=",WindowXOnDropped()," y=",WindowYOnDropped());