Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Стохастический Осциллятор (Stochastic Oscillator). 6 страница




Для исполнения функции iCustom() не требуется, чтобы соответствующий технический индикатор был прикреплён к окну финансового инструмента. Также и вызов функции iCustom() из какой-либо прикладной программы не приводит к присоединению соответствующего индикатора к окну финансового инструмента. Присоединение технического индикатора к окну финансового инструмента тоже не приводит к вызову функции iCustom() в какой-либо прикладной программе.

Торговые критерии в эксперте (блок 5-6) вычисляются на основе значений элементов массивов, полученных с помощью функции Custom(). Например, критерий для открытия Buy и закрытия Sell вычисляется так:

if (L_5<=-Level && L_1>L_5)

{

Opn_B = true; // Критерий откр. Buy

Cls_S = true; // Критерий закр. Sell

}

Если последнее известное значение средней сглаженной линии скорости изменения цены (L_5) меньше заданного уровня (значение настраиваемого параметра Level = 0.001) и при этом последнее известное значение линии скорости изменения цены в текущем таймфрейме (L_1) больше средней сглаженной линии скорости цены (L_5), то значимыми являются критерий для открытия ордера Buy и критерий закрытия ордера Sell. Для подтверждения значимости противоположных критериев используются зеркальные условия.

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

Стандартные функции

 

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

 

Общие функции.
В этой группе функции, которые не вошли ни в одну из специализированных групп. Это функции Print(), Alert(), Comment(), MarketInfo(), Sleep() и т.д.

Графические объекты.
Терминал MetaTrader 4 позволяет прикреплять к ценовым графикам множество графических объектов. В этой группе собраны функции, которые позволяют создавать такие объекты программно, а также изменять их свойства, перемещать и удалять.

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

Строковые функции и функции преобразование данных.
Строковые функции предназначены для обработки переменных типа string: поиск значения, объединение (конкатенация) строк, извлечение подстроки и так далее. Функции преобразования позволяют производить преобразования переменной одного типа в переменную другого типа. Функция NormalizeDouble() производит округления числа типа double до указанной точности.

Дата и время.
Данная группа функций позволяет получить время в том или ином представлении: LocalTime() сообщает локальное время компьютера, TimeCurrent() сообщает серверное время последней поступившей котировки. Кроме того, можно получить для указанного значения времени такие параметры как день недели, день месяца, час, минута и так далее.

Файловые операции.
Эта группа функций необходима при операциях чтения/записи на жесткий диск.

Операции с массивами и доступ к таймсериям.
Обеспечивают доступ к ценовым данным любого доступного символа/периода.

Математические функции.
Стандартный набор математических и тригонометрических функций.

Глобальные переменные GlobalVariable.
Функции для работы с глобальными переменными клиентского терминала.

Пользовательские индикаторы.
Эти функции можно использовать только при написании пользовательских индикаторов.

Клиентский терминал, проверка состояния и информация о счёте.
Функции сообщают информацию о клиентском терминале, состоянии счета и проверяют текущее состояние клиентского терминала (в том числе состояние окружения выполняемой MQL4-программы).

Торговые функции.
Функции для проведения торговых операций.

 

Для получения подробного описания любой стандартной функции необходимо обратиться к справочной документации на MQL4.community, сайте MetaQuotes Software Corp. или к разделу "Справка" в редакторе MetaEditor.

Общие функции

 

Одной из самых простых и наиболее распространённых функций является функция Comment().

Функция Comment()

void Comment(...)

Функция выводит комментарий, определенный пользователем, в левый верхний угол окна финансового инструмента. Параметры могут иметь любой тип. Количество параметров не может превышать 64. Массивы нельзя передавать в функцию Comment(). Массивы должны печататься поэлементно. Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью необходимо использовать функцию DoubleToStr(). Типы bool, datetime и color будут напечатаны как числа. Чтобы вывести данные типа datetime в виде строки необходимо использовать функцию TimeToStr().

Параметры:
... - любые значения, разделенные запятыми.

Примером использования этой функции может служить простой эксперт comment.mq4, отражающий информацию о количестве ордеров.

//--------------------------------------------------------------------

// comment.mq4

// Предназначен для использования в качестве примера в учебнике MQL4.

//--------------------------------------------------------------------

int start() // Спец. функция start

{

int Orders=OrdersTotal(); // Количество ордеров

if (Orders==0) // Если кол.орд равно 0

Comment("Ордеров нет"); // Комментарий в угол окна

else // Если есть ордера

Comment("В торговле имеется ",Orders," ордеров.");// Коммент.

return; // Выход

}

//--------------------------------------------------------------------

В начале программы с помощью функции OrdersTotal() вычисляется общее количество ордеров. В случае, если переменная Orders (количество ордеров) равна 0, то исполняется функция Comment() с параметром "Ордеров нет". Если же в торговле присутствует хотя бы один ордер, то выполняется функция Comment() со списком параметров, перечисленных через запятую. В данном случае используется 3 параметра, первый из которых - строковое значение "В торговле имеется ", второй - целое число Orders и третий - строковое значение " ордеров.". В результате исполнения эксперта при каждом запуске на исполнение функции start() в левом верхнем углу окна финансового инструмента будет отображаться одна из надписей. На Рис. 132 показано окно финансового инструмента в ситуации, когда в торговле одновременно присутствует один ордер.


Рис. 132. Отображение текста в левом верхнем углу окна финансового инструмента в результате исполнения Comment().

 

Для воспроизведения звуковых файлов используется функция PlaySound().

Функция PlaySound()

void PlaySound(string filename)

Функция воспроизводит звуковой файл. Файл должен быть расположен в каталоге каталог_терминала\sounds или его подкаталоге.

Параметры:
filename - путь к звуковому файлу.

Набор рекомендуемых звуковых файлов приведен в приложении Звуковые файлы.

 

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

Функция MessageBox()

int MessageBox(string text=NULL, string caption=NULL, int flags=EMPTY)

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

Параметры:
text - текст, содержащий сообщение для отображения;
caption - необязательный текст для отображения в заголовке окна сообщения. Если этот параметр пустой, в заголовке окна будет отображено название эксперта;
flags - необязательные флаги, определяющие вид и поведение диалогового окна. Флаги могут быть комбинацией флагов из следующих групп флагов (см. Коды возврата функции MessageBox).

Рассмотрим пример использования функции MessageBox().

Задача 31. Представить код эксперта, который за 5 минут до выхода важных новостей открывает диалоговое окно, содержащее вопрос о закрытии всех ордеров. Если пользователь нажимает кнопку Yes, то закрыть все ордера, если No, то не выполнять никаких действий.

Эксперт, поддерживающий диалог с пользователем (dialogue.mq4), может быть, например, таким:

//--------------------------------------------------------------------

// dialogue.mq4

// Предназначен для использования в качестве примера в учебнике MQL4.

//--------------------------------------------------------------- 1 --

#include // Нужно для MessageBox

extern double Time_News=15.30; // Время важных новостей

bool Question=false; // Флажок (вопрос ещё не задан)

//--------------------------------------------------------------- 2 --

int start() // Спец. функция start

{

PlaySound("tick.wav"); // На каждом тике

double Time_cur=Hour()+ Minute()100.0;// Текущее время (double)

if (OrdersTotal()>0 && Question==false && Time_cur>=Time_News-0.05)

{ // При некоторых условиях

PlaySound("news.wav"); // На каждом тике

Question=true; // Флажок (вопрос уже задан)

int ret=MessageBox("Время важных новостей. Закрыть все ордера?",

"Вопрос", MB_YESNO|MB_ICONQUESTION|MB_TOPMOST); // Диалог. окно

//--------------------------------------------------------- 3 --

if(ret==IDYES) // Если получен ответ ДА

Close_Orders(); // То закрываем все ордера

}

return; // Выход

}

//--------------------------------------------------------------- 4 --

void Close_Orders() // Польз. ф-ия закрытия ордеров

{

Alert("Работает функция закрытия всех ордеров.");// Для иллюстрации

return; // Выход

}

//--------------------------------------------------------------- 5 --

В блоке 1-2 в программу включён файл WinUser32.mqh, в котором определены коды возврата функции MessageBox(). В этом блоке также задана внешняя переменная Time_News - время выхода важных новостей. В течение всего периода исполнения эксперта вопрос о закрытии ордеров должен быть задан пользователю всего один раз. Для того, чтобы учитывать в эксперте был ли задан вопрос, объявлена переменная Question.

При каждом запуске на исполнение функции start() (блок 2-3) исполняется функция PlaySound(). Воспроизводимый при этом звук tick.wav напоминает слабый щелчок, наилучшим образом отражающий факт нового тика. Решение об использовании звуков в программе программист принимает по своему выбору. В ряде случаев применение звуков оказывается полезным. Например, по звуку тиков можно судить о факте исполнения эксперта. Другие звуки могут соответствовать иным событиям, например, срабатыванию торгового критерия, закрытию ордера и т.д.

Значение действительной переменной Time_cur соответствует текущему серверному времени. В эксперте анализируются условия, при которых необходимо вывести диалоговое окно. Если в торговле имеется один или более ордеров, диалоговое окно ранее не выводилось и при этом серверное время отличается от времени важных новостей менее, чем на 5 минут, то в программе выполняются определённые действия. Прежде всего исполняется функция PlaySound(), воспроизводимый звук привлекает пользователя обратить внимание на экран. Флаг Question получает значение true (в следующий раз диалог не выводить). В следующей строке исполняется MessageBox():

int ret=MessageBox("Время важных новостей. Закрыть все ордера?",
"Вопрос", MB_YESNO|MB_ICONQUESTION|MB_TOPMOST); // Диалог. окно

В данном случае на диалоговой панели будет отображено значение строковой константы "Время важных новостей. Закрыть все ордера?", а значение "Вопрос" будет отображено в верхней строке панели. Флаг MB_YESNO определяет наличие кнопок - в данном случае кнопки ДА и кнопки НЕТ (см. Коды возврата функции MessageBox). Флаг MB_ICONQUESTION определяет иконку, отображаемую в левой части диалогового окна (каждая операционная среда имеет свой набор иконок, на Рис. 133 показана иконка из набора Widows XP). Флаг MB_TOPMOST наделяет диалоговое окно свойством "всегда сверху", т.е. окно всегда будет находиться в области видимости, независимо от того, какие программы исполняются в текущий момент на компьютере пользователя. В результате исполнения функции MessageBox() с указанными параметрами на экран выводится диалоговое окно:


Рис. 133. Диалоговое окно, выводимое в результате исполнения функции MessageBox().

В момент, когда диалоговое окно выведено на экран, исполнение программы приостанавливается до того момента, пока пользователь нажмёт одну из клавиш в диалоговом окне. Как только это произойдёт, управление будет передано в строку, следующую за вызовом функции MessageBox(), в данном случае, в блок 3-4. Это свойство диалогового окна удерживать управление является очень важным и его обязательно необходимо учитывать при составлении программ. Например, если пользователь отлучился от компьютера и в этот период было выведено диалоговое окно, то в течение всего времени отсутствия пользователя (пока не нажата одна из кнопок на диалоговом окне) программа будет находиться в режиме ожидания ответа и никакой другой код в этот период исполняться не будет.

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

Если пользователь нажал кнопку ДА, то в блоке 3-4 будет вызвана функция Close_Orders(), предназначенная для закрытия всех ордеров. В данном примере содержание этой функции не рассматривается, а для обозначения факта исполнения этой функции исполняется Alert("Работает функция закрытия всех ордеров."). Если пользователь ответил НЕТ, то функция закрытия ордеров не вызывается. В текущем сеансе исполнения эксперта диалоговое окно больше выводиться не будет.

Общие функции

 

Функция Краткое описание
Alert Отображает диалоговое окно, содержащие пользовательские данные. Параметры могут быть любого типа. Количество параметров не может превышать 64.
Comment Функция выводит комментарий, определенный пользователем, в левый верхний угол графика. Параметры могут иметь любой тип. Количество параметров не может превышать 64.
GetTickCount Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. Счетчик ограничен разрешающей способностью системного таймера. Так как время хранится как беззнаковое целое, то он переполняется каждые 49.7 дней.
MarketInfo Возвращает различную информацию о финансовых инструментах, перечисленных в окне "Обзор рынка". Часть информации о текущем финансовом инструменте хранится в предопределенных переменных (см. Идентификаторы функции MarketInfo()).
MessageBox Функция MessageBox создает и отображает окно сообщений, а также управляет им. Окно сообщений содержит определенные приложением сообщение и заголовок, любую комбинацию предопределенных значков и командных кнопок. Если функция успешно выполняется, возвращаемое значение - одно из значений кодов возврата MessageBox(). Функцию нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить
PlaySound Функция воспроизводит звуковой файл. Файл должен быть расположен в каталоге каталог_терминала\sounds или его подкаталоге.
Print Печатает некоторое сообщение в журнал экспертов. Параметры могут иметь любой тип. Количество параметров не может превышать 64.
SendFTP Посылает файл по адресу, указанному в окне настроек на закладке "Публикация". В случае неудачи возвращает FALSE. Функция не работает в режиме тестирования. Из пользовательских индикаторов также нельзя вызывать эту функцию. Отсылаемый файл должен находиться в папке каталог_терминала\experts\files или ее подпапках. Отсылка не производится, если в настройках не указан адрес FTP и/или пароль доступа.
SendMail Посылает электронное письмо по адресу, указанному в окне настроек на закладке "Почта". Отсылка может быть запрещена в настройках, также может быть не указан адрес электронной почты.
Sleep Функция задерживает выполнение текущего эксперта или скрипта на определенный интервал. Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.

Для получения подробного описания этих и других функций необходимо обратиться к справочной документации на MQL4.community, сайте MetaQuotes Software Corp. или к разделу "Справка" в редакторе MetaEditor.

Графические объекты

 

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

К графическим объектам относятся, например, горизонтальные и вертикальные линии, канал линейной регрессии, уровни Фибоначчи, прямоугольник, текстовая метка и пр. Такие изображения, как индикаторные линии, уровни индикатора, изображения свечей, надписи, выводимые функцией Comment(), и др. выделить и удалить невозможно, поэтому они не являются графическими объектами.

Графические объекты отображаются клиентским терминалом в окне финансового инструмента в соответствии с заданными координатами. Каждый графический объект, в зависимости от своего типа, имеет одну, две или три координаты и другие настраиваемые параметры. Любой графический объект можно установить в окно финансового инструмента вручную (с панели инструментов и из системного меню), а также в результате исполнения прикладной программы, запущенной в этом окне финансового инструмента, в том числе, эксперта, скрипта или пользовательского индикатора. Преобразование вида и места положения графического объекта может осуществляться вручную или программно, путём сообщения графическому объекту новых значений координат и других параметров.

Способы позиционирования графических объектов

 

В MQL4 принято два способа позиционирования объектов: относительно ценового графика и относительно окна финансового инструмента. Чтобы наглядно продемонстрировать разницу между этими способами, установим вручную в окне финансового инструмента два различных графических объекта: текст (OBJ_TEXT) и текстовую метку (OBJ_LABEL). Для этого можно воспользоваться кнопками А и Т на панели графических инструментов клиентского терминала. Установим размер окна таким образом, чтобы оно занимало приблизительно половину площади экрана (Рис. 134). Проследим как будут реагировать эти графические объекты на изменение размеров окна (а также на горизонтальное и вертикальное масштабирование ценового графика).


Рис. 134. Графические объекты с различными способами позиционирования в окне финансового инструмента.

Позиционирование относительно окна финансового инструмента

 

Графический объект OBJ_LABEL будет оставаться неподвижным, если размер окна изменять путём перемещения его правой или нижней границы. Если же размер окна менять перемещая верхнюю или левую границу, то объект будет смещаться, при этом положение объекта относительно каждой их этих границ будет оставаться неизменным. Это происходит потому, что позиционирование графического объекта OBJ_LABEL осуществляется относительно границ окна финансового инструмента. В данном случае точкой привязки графического объекта к окну финансового инструмента является левый верхний угол окна финансового инструмента. Координаты объекта относительно указанной точки привязки задаются в пикселях - 193 и 48 на Рис. 135.


Рис. 135. Настройки графического объекта OBJ_LABEL.

Точкой отсчёта координат самого объекта (в данном случае) является верхний левый угол курсорной рамки, видимой при выделении объекта мышью. В левом верхнем углу курсорной рамки можно видеть небольшую точку, свидетельствующую о настройках данного графического объекта. В случае, если указана иная точка привязки, то и на курсорной рамке точка будет указана в другом углу.

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

Позиционирование относительно ценового графика

 

При любом способе изменения размеров окна, а также при масштабировании ценового графика объект типа OBJ_TEXT не меняет своего положения относительно ценового графика. Точкой отсчёта координат для этого объекта является середина верхней линии курсорной рамки, координатой по оси Х - время, а по оси Y - цена по финансовому инструменту (Рис. 136).


Рис. 136. Настройки графического объекта OBJ_TEXT.

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

Тот или иной способ позиционирования является собственным свойством графического объекта определённого типа и не может быть изменён пользователем, в том числе программно. Большинство графических объектов позиционируются относительно ценового графика, т.е. в координатах цены и времени.

Создание графических объектов и изменение их свойств

 

Создать графический объект - это значит установить в окне финансового инструмента один из объектов предопределённого типа (см. Типы и свойства графических объектов). Для создания объекта используется функция:

Функция ObjectCreate()

bool ObjectCreate(string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)

Функция создаёт объект указанного типа с заданным именем и начальными координатами в указанном подокне графика. Число координат, связываемых с объектом, может быть от 1 до 3 в зависимости от его типа. При успешном создании объекта функция возвращает TRUE, иначе FALSE. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().

Координаты должны передаваться парами - время и цена. Например, объекту OBJ_VLINE требуется только время, но также нужно передать и цену (любое значение). Графический объект типа OBJ_LABEL игнорирует координаты, указанные в функции; для установки свойств OBJPROP_XDISTANCE и OBJPROP_YDISTANCE этого объекта необходимо использовать функцию ObjectSet().

Параметры:

name - имя объекта;

type - тип объекта (может быть одним из предопределённых типов объектов);

window - номер окна, в которое будет добавлен объект. Нумерация подокон графика (если на графике есть подокна с индикаторами) начинается с 1, главное окно графика есть всегда и имеет номер 0; указываемый номер окна должен быть большим или равным 0 и меньшим, чем значение, возвращаемое функцией WindowsTotal();

time1 - время первой координаты;

price1 - цена первой координаты;

time2 - время второй координаты;

price2 - цена второй координаты;

time3 - время третьей координаты;

price3 - цена третьей координаты.

 

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

Функция ObjectSet()

bool ObjectSet(string name, int prop_id, double value)

Функция изменяет значение указанного свойства объекта. В случае успеха функция возвращает TRUE, иначе FALSE. Для получения информации об ошибке необходимо вызвать функцию GetLastError().

Параметры:

name - имя объекта;

prop_id - идентификатор свойства объекта (указывается одно из свойств объекта);

value - новое значение указанного свойства.

 

Все графические объекты могут иметь также текстовое описание. Текстовое описание каждого объекта доступно пользователю и может быть изменено на панели свойств объекта или программным способом. Для объектов OBJ_TEXT и OBJ_LABEL это описание составляет их основное содержание и всегда отображается в виде текстовой строки. Текстовые описания других объектов отображаются в непосредственной близости от изображения самого объекта в том случае, если включена опция "Показывать описания объектов" на панели свойств окна финансового инструмента (F8). Для изменения текстового описания объекта используется функция:

Функция ObjectSetText()

bool ObjectSetText(string name, string text, int font_size, string font_name=NULL, color text_color=CLR_NONE)

Функция изменения описания объекта. В случае успеха функция возвращает значение TRUE, иначе FALSE. Для получения дополнительной информации об ошибке необходимо вызвать функцию функцию GetLastError().Параметры font_size, font_name и text_color используются только для объектов OBJ_TEXT и OBJ_LABEL. Для объектов других типов эти параметры игнорируются.

Параметры:

name - имя объекта;

text - текст описания обьекта;

font_size - размер шрифта в пунктах;

font_name - наименование шрифта;

text_color - цвет текста.

 

Рассмотрим пример эксперта, в котором полезно используются функции управления графическими объектами.

Задача 32.Используя графический объект сообщить пользователю о торговых критериях, определённых на основе показаний индикатора MACD.

Как известно, индикатор MACD часто используется трейдерами для формирования торговых критериев. Индикатор представлен двумя линиями - главной и сигнальной. Считается, что торговый критерий срабатывает в момент пересечения указанных линий. Если главная линия индикатора (обычно серая гистограмма) пересекает сверху вниз сигнальную линию (обычно красную пунктирную), то нужно продавать, а если снизу вверх, - то покупать. В промежутках между пересечениями линий индикатора необходимо удерживать рыночные ордера, а в момент срабатывания противоположного критерия зарывать их и одновременно открывать новые в противоположном направлении. Таким образом, необходимо подготовить 4 вида сообщения: открытие Buy, открытие Sell, удержание Buy и удержание Sell.

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




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 336; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.099 сек.