Студопедия

КАТЕГОРИИ:


Архитектура-(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). 12 страница




Параметры:

index - порядковый номер линии (допускаются значения от 0 до 7);

array[] - имя массива, связанного с расчетным буфером.

Функция SetIndexStyle()

void SetIndexStyle(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)

Функция устанавливает новый тип, стиль, ширину и цвет для указанной линии индикатора.

Параметры:

index - порядковый номер линии (допускаются значения от 0 до 7);

type - стиль отрисовки линии индикатора. Может быть одним из перечисленных стилей отрисовки линии (см. Стили отображения индикаторных линий);

style - стиль линии. Используется для линий толщиной в 1 пиксель. Может быть одним из стилей линии, указанных в приложении Стили отображения индикаторных линий. Пустое значение (EMPTY) указывает, что стиль не будет изменен;

width - ширина линии; допустимые значения - 1,2,3,4,5; пустое значение (EMPTY) указывает, что ширина не будет изменена;

clr - цвет линии. Пустое значение CLR_NONE указывает, что цвет не будет изменен.

 

Функция SetIndexLabel()

void SetIndexLabel(int index, string text)

Функция позволяет устанавливать имя линии индикатора для отображения информации в окне DataWindow и всплывающей подсказке.

Параметры:

index - порядковый номер линии (допускаются значения от 0 до 7);

text - Текст описания линии индикатора. NULL означает, что значение этой линии не показывается в DataWindow.

 

Пример простого индикатора, отображающего линию High (indicatorstyle.mq4), использующий указанные выше функции:

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

// indicatorstyle.mq4

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

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

#property indicator_chart_window // Индик. рисуется в основном окне

#property indicator_buffers 1 // Количество буферов

#property indicator_color1 Blue // Цвет первой линии

 

double Buf_0[]; // Открытие индикаторного массива

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

int init() // Специальная функция init()

{

SetIndexBuffer(0,Buf_0); // Назначение массива буферу

SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии

SetIndexLabel (0,"Линия High");

return; // Выход из спец. ф-ии init()

}

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

int start() // Специальная функция start()

{

int i, // Индекс бара

Counted_bars; // Количество просчитанных баров

Counted_bars=IndicatorCounted(); // Количество просчитанных баров

i=Bars-Counted_bars-1; // Индекс первого непосчитанного

while(i>=0) // Цикл по непосчитанным барам

{

Buf_0[i]=High[i]; // Значение 0 буфера на i-ом баре

i--; // Расчёт индекса следующего бара

}

return; // Выход из спец. ф-ии start()

}

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

В блоке 1-2 индикатора выполнены общие настройки. С помощью директивы #property указано, что индикатор должен отображаться в основном окне, индикатор использует один буфер, цвет индикаторной линии - синий. В блоке 1-2 также открыт один буферный массив.

В блоке 2-3 используются указанные выше функции. В строке:

SetIndexBuffer(0,Buf_0); // Назначение массива буферу

буферу с индексом 0 ставится в соответствие массив с именем Buf_0. В строке:

SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии

определяется стиль индикаторной линии, имеющей индекс 0. Константа DRAW_LINE означает, что отображаемая линия - простая, указание константы STYLE_SOLID означает, что линия сплошная, а 2 определяет толщину линии. В строке:

SetIndexLabel (0,"Линия High");

индикаторной линии с индексом 0 присваивается имя. Указанное имя можно видеть в окне данных и во всплывающей подсказке в окне финансового инструмента (см. Рис. 810_3). Именование линий удобно использовать в случаях, когда в окне одновременно отражено несколько индикаторных линий; иногда это единственный способ отличить одну линию от другой. В блоке 3-4 выполняется простой расчёт значений элементов индикаторного массива для линии, отображающей максимальные значения баров (порядок расчёта индикаторных массивов подробно рассмотрен в разделе Программирование пользовательских индикаторов.).

 

Если индикатор отображается в отдельном подокне, то в этом окне можно отобразить горизонтальные уровни.

Функция SetLevelValue()

void SetLevelValue(int level, double value)

Устанавливает значение для указанного горизонтального уровня индикатора, выводимого в отдельное окно.

Параметры:

level - номер уровня (0-31).

value - значение для указанного уровня.

Использование горизонтальных уровней бывает очень удобно в тех случаях, когда необходимо зрительно определить находится ли индикаторная линия выше или ниже некоторых заданных значений. Представленный ниже простой индикатор рассчитывает разницу между максимальной и минимальной ценами бара. События на рынке представляют интерес для пользователя (условно, в данном примере), если индикаторная линия находится выше уровня 0.001 или ниже уровня -0.001. Пример индикатора, отображающего разницу High и Low (linelevel.mq4).

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

// linelevel.mq4

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

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

#property indicator_separate_window // Индик. рисуется в отдельн. окне

#property indicator_buffers 1 // Количество буферов

#property indicator_color1 Red // Цвет линии

 

double Buf_0[]; // Открытие индикаторного массива

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

int init() // Специальная функция init()

{

SetIndexBuffer(0,Buf_0); // Назначение массива буферу

SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии

SetIndexLabel (0,"Разница High и Low");

SetLevelValue (0, 0.0010); // Задан уровень горизонт. линии

SetLevelValue (1,-0.0010); // Задан ещё один уровень

return; // Выход из спец. ф-ии init()

}

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

int start() // Специальная функция start()

{

int i, // Индекс бара

Counted_bars; // Количество просчитанных баров

 

Counted_bars=IndicatorCounted(); // Количество просчитанных баров

i=Bars-Counted_bars-1; // Индекс первого непосчитанного

 

while(i>=0) // Цикл по непосчитанным барам

{

Buf_0[i]=High[i]-Low[i]; // Значение 0 буфера на i-ом баре

if(Open[i]>Close[i]) // Если свеча чёрная..

Buf_0[i]=-Buf_0[i]; //.. то реверс значения

i--; // Расчёт индекса следующего бара

}

return; // Выход из спец. ф-ии start()

}

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

Рассматриваемая функция используется в индикаторе в блоке 2-3. В данном случае задано два горизонтальных уровня. Первое значение в списке параметров - номер горизонтального уровня, а второе - заданное значение уровня:

SetLevelValue (0, 0.0010); // Задан уровень горизонт. линии
SetLevelValue (1,-0.0010); // Задан ещё один уровень

Параметры настроенных таким образом индикаторов indicatorstyle.mq4 и linelevel.mq4 отражаются в окне финансового инструмента и в окне данных.


Рис. 154. Отображение настроек индикаторов в различных окнах клиентского терминала.

На Рис. 154 представлено два окна - окно данных и окно финансового инструмента. В окне данных можно наблюдать строку, содержащую текст "Линия High" и значение 1.3641. Такие же надписи отображаются в нижней строке всплывающей подсказки. В окне данных указанная строка присутствует в течение всего времени исполнения индикатора, название линии при этом не изменяется, а значение в правой части строки зависит от места положения курсора в окне финансового инструмента. Название линии, отображаемое во всплывающей подсказке, соответствует той индикаторной линии, к которой подведен курсор.

В подокне индикатора linelevel.mq4 отображены горизонтальные линии, установленные в соответствии со значениями, заданными пользователем. Если подвести стрелку курсора к красной индикаторной линии, то во всплывающей подсказке можно видеть название этой линии, в данном случае "Разница High и Low", и чуть правее - значение линии в точке курсора.

Функции для настройки пользовательских индикаторов

 

Функция Краткое описание
IndicatorBuffers Распределяет память для буферов, используемых для вычислений пользовательского индикатора. Количество буферов не может превышать 8 и быть менее значения, указанного в директиве #property indicator_buffers. Если пользовательский индикатор требует дополнительных буферов для счета, следует использовать эту функцию для указания общего числа буферов.
IndicatorCounted Функция возвращает количество баров, не измененных после последнего вызова индикатора. Большинство подсчитанных баров не нуждается в пересчете.
IndicatorDigits Установка формата точности (количество знаков после десятичной точки) для визуализации значений индикатора.
IndicatorShortName Установка "короткого" имени пользовательского индикатора для отображения в подокне индикатора и в окне DataWindow.
SetIndexArrow Назначение значка для линии индикаторов, имеющей стиль DRAW_ARROW.
SetIndexBuffer Связывает переменную-массив, объявленный на глобальном уровне, с предопределенным буфером пользовательского индикатора.
SetIndexDrawBegin Установка порядкового номера бара от начала данных, с которого должна начинаться отрисовка указанной линии индикатора.
SetIndexEmptyValue Устанавливает значение пустой величины для линии индикатора. Пустые значения не рисуются и не показываются в DataWindow.
SetIndexLabel Установка имени линии индикатора для отображения информации в окне DataWindow и всплывающей подсказке.
SetIndexShift Установка смещения линии индикатора относительно начала графика. При положительном значении изображение линии смещается вправо, при отрицательном - влево. Т.е. значение, рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего бара.
SetIndexStyle Устанавливает новый тип, стиль, ширину и цвет для указанной линии индикатора (см. Стили отображения индикаторных линий).
SetLevelStyle Устанавливает новый стиль, ширину и цвет для горизонтальных уровней индикатора, выводимого в отдельное окно (см. Стили отображения индикаторных линий).
SetLevelValue Устанавливает значение для указанного горизонтального уровня индикатора, выводимого в отдельное окно.

 

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

Информация о счёте

 

Функции клиентского терминала и проверки состояния удобно применять, например, для ограничения использования программ при коммерческом распространении. Рассмотрим как может быть решена такая задача:

Задача 39. Представить защитный код программы, распространяемой на коммерческой основе, удовлетворяющий следующим требованиям: для исполнения программы на реальных счетах индивидуальных клиентов требуется ввести пароль; для исполнения программы на реальных счетах корпоративных клиентов пароль не требуется; ограничения при исполнении программы на демо-счёте не предусмотрены.

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

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

Решение Задачи 39 для ограничения прав использования программ может быть таким (эксперт сheck.mq4):

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

// сheck.mq4

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

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

extern int Parol=12345;

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

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

{

if(Check()==false) // Если условия использования..

return; //..не выполняются, то выход

 

// Здесь должен быть указан основной код программы

Alert("Исполнение программы"); // Алерт для примера

 

return; // Выход из start()

}

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

bool Check() // Пользов. функция проверки..

{ //.. условий использования

if (IsDemo()==true) // Если это демо-счёт, то..

return(true); //.. других ограничений нет

if (AccountCompany()=="SuperBank") // Для корпоративных клиентов..

return(true); //..пароль не нужен

int Key=AccountNumber()*2+1000001; // Вычисляем ключ

if (Parol==Key) // Если пароль верный, то..

return(true); //..разрешаем работу на реале

Alert("Неправильный пароль. Эксперт не работает.");

return(false); // Выход из пользов. функции

}

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

В данном примере необходимая проверка выполняется в первых строках специальной функции start (блок 2-3):

if(Check()==false) // Если условия использования..

Если в результате выполнения проверки пользовательская функция Check() (блок 3-4) вернула false, то управление передаётся на оператор return и специальная функция start() заканчивает работу. Основной код программы располагается непосредственно после указанной проверки. В результате успешной проверки функция Check() вернёт true, в этом случае основной код программы будет исполнен.

В пользовательской функции Check() выполняется проверка по трём критериям:
- является ли счёт демонстрационным;
- принадлежит ли сервер корпоративному клиенту;
- подходит ли пароль к реальному счёту.

Для проверки по первому критерию используется функция IsDemo().

Функция IsDemo()

bool IsDemo()

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

Если функция IsDemo() возвращает true, то пользователь работает на демо-счёте. Это значит, что выполнять другие проверки нет необходимости (т.к. опробование программы на демо-счёте позволено для всех желающих). В этом случае функция Check() прекращает работу, и возвращает значение true:

if (IsDemo() == true) // Если это демо-счёт, то..
return(true); //.. других ограничений нет

Если же в функция IsDemo() вернёт значение false, значит пользователь работает на реальном счёте. В этом случае необходимо выяснить достаточно ли у пользователя прав. В данном примере сначала выполняется проверка корпоративных клиентов, для этого используется функция AccountCompany().

Функция AccountCompany()

string AccountCompany()

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

Если в результате выполнения проверки:

if (AccountCompany() == "SuperBank")// Для корпоративных клиентов..
return(true); //..пароль не нужен

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

В строке:

int Key = AccountNumber()*2+1000001;// Вычисляем ключ

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

Функция AccountNumber()

int AccountNumber()

Функция возвращает номер текущего счета.

Ранее вычисленный по тому же алгоритму пароль передаётся пользователю. Если в результате проверки оказывается, что пароль и ключ совпадают, то функция Check() прекращает работу и возвращает значение true:

if (Parol == Key) // Если пароль верный, то..
return(true); //..разрешаем работу на реале

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

Функции, возвращающие информацию о клиентском терминале

 

Функция Краткое описание
TerminalCompany Возвращает наименование компании-владельца клиентского терминала.
TerminalName Возвращает имя клиентского терминала.
TerminalPath Возвращает директорий, из которого запущен клиентский терминал.

Функции, позволяющие определить текущее состояние клиентского терминала, в том числе состояние окружения выполняемой MQL4-программы

 

Функция Краткое описание
GetLastError Функция возвращает код последней ошибки, после чего значение специальной переменной last_error, в которой хранится код последней ошибки обнуляется. Так что последующий вызов GetLastError() вернет значение 0.
IsConnected Возвращает состояние главного соединения клиентского терминала с сервером, по которому производится подкачка данных. TRUE - связь с сервером установлена, FALSE - связь с сервером отсутствует или прервана.
IsDemo Возвращается TRUE, если программа работает на демонстрационном счете, в противном случае возвращает FALSE.
IsDllsAllowed Возвращает TRUE, если DLL вызов функции разрешены для эксперта, иначе возвращает FALSE.
IsExpertEnabled Возвращает TRUE, если в клиентском терминале разрешен запуск экспертов, иначе возвращает FALSE.
IsLibrariesAllowed Возвращает TRUE, если эксперт может назвать библиотечную функцию, иначе возвращает FALSE.
IsOptimization Возвращается TRUE, если эксперт работает в режиме оптимизации тестирования, иначе возвращает FALSE.
IsStopped Возвращается TRUE, если программа (эксперт или скрипт) получила команду на завершение своей работы, иначе возвращает FALSE.
IsTesting Возвращается TRUE, если эксперт работает в режиме тестирования, иначе возвращает FALSE.
IsTradeAllowed Возвращается TRUE, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает FALSE.
IsTradeContextBusy Возвращается TRUE, если поток для выполнения торговых операций занят, иначе возвращает FALSE.
IsVisualMode Возвращается TRUE, если эксперт тестируется в режиме визуализации, иначе возвращает FALSE.
UninitializeReason Возвращает код причины завершения экспертов, пользовательских индикаторов и скриптов. Возвращаемые значения могут быть одним из кодов деинициализации. Эту функцию можно также вызывать в функции init() для анализа причин деинициализации предыдущего запуска.

Функции для доступа к информации об активном счете

 

Функция Краткое описание
AccountBalance Возвращает значение баланса активного счета (сумма денежных средств на счете).
AccountCredit Возвращает значение кредита для активного счета.
AccountCompany Возвращает название брокерской компании, в которой зарегистрирован текущий счет.
AccountCurrency Возвращает наименование валюты для текущего счета.
AccountEquity Возвращает сумму собственных средств для текущего счета. Расчет equity зависит от настроек торгового сервера.
AccountFreeMargin Возвращает значение свободных средств, разрешенных для открытия позиций на текущем счете.
AccountFreeMarginCheck Возвращает размер свободных средств, которые останутся после открытия указанной позиции по текущей цене на текущем счете.
AccountFreeMarginMode Режим расчета свободных средств, разрешенных для открытия позиций на текущем счете.
AccountLeverage Возвращает значение плеча для текущего счета.
AccountMargin Возвращает сумму залоговых средств, используемых для поддержания открытых позиций на текущем счете.
AccountName Возвращает имя пользователя текущего счета.
AccountNumber Возвращает номер текущего счета.
AccountProfit Возвращает значение прибыли для текущего счета в базовой валюте.
AccountServer Возвращает имя активного сервера.
AccountStopoutLevel Возвращает значение уровня, по которому определяется состояние Stop Out.
AccountStopoutMode Возвращает режим расчета уровня Stop Out.

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

Торговые функции

 

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

OrderSend() - открытие рыночного ордера и установка отложенного ордера;

OrderClose() - закрытие рыночного ордера;

OrderCloseBy() - встречное закрытие двух разнонаправленных рыночных ордеров;

OrderDelete() - удаление отложенного ордера;

OrderModify() - модификация ордеров всех видов.

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

Функция OrderTotal()

int OrdersTotal()

Функция в озвращает общее количество открытых и отложенных ордеров.

Функция OrderTakeProfit()

double OrderTakeProfit()

Функция возвращает значение заявленной цены закрытия позиции при достижении уровня прибыльности (take profit) для текущего выбранного ордера. Ордер должен быть предварительно выбран с помощью функции OrderSelect().

Функция OrderProfit()

double OrderProfit()

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

Функция OrderLots()

double OrderLots()

Возвращает количество лотов для выбранного ордера. Ордер должен быть предварительно выбран с помощью функции OrderSelect().

Ниже представлен фрагмент программы, в котором вычисляются заявленная цена закрытия TakeProfit, прибыль по ордеру и количество лотов:

for (int i=0; i<OrdersTotal(); i++) // По всем ордерам

{

if((OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующ.

{

double ТР = OrderTakeProfit(); // TakeProfit ордера

double Profit= OrderProfit(); // Прибыль по ордеру

double Lots = OrderLots(); // Количество лотов

//......Использование значений ТР и Profit в программе.....

}

} // Конец тела цикла

Легко заметить, что каждая из рассматриваемых функций (OrderTakeProfit (), OrderProfit() и OrderLots() не имеет настраиваемых параметров, т.е. не предусматривает указание, например, номера ордера, чтобы возвращаемое функцией значение соответствовало характеристике конкретного ордера.

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

Немаловажное значение имеет правильная оценка программистом той или иной характеристики ордера. Например, при решении задачи о порядке закрытия ордеров, необходимо задаться какими-то критериями, чтобы вычислить, какой из ордеров необходимо закрыть раньше, а какой после. Рассмотрим небольшую задачу.

 

Задача 40. В торговле имеются два ордера Buy, открытых по одному финансовому инструменту. Первый ордер открыт по цене 1.2000, на 0.5 лота, второй ордер открыт по цене 1. 3000 на 1 лот. Текущая цена 1.3008. Сработал торговый критерий закрытия ордеров типа Buy. Требуется принять правильное решение, а именно, решить какой из ордеров нужно закрыть первым, а какой - вторым.

Очевидно, что прибыль по первому ордеру составляет 108 пунктов, а по второму 8. Несмотря на то, что первый ордер открыт на меньшее количество лотов, прибыль у него больше, чем у второго, а именно, у первого $540, а у второго $80. На первый взгляд может показаться, что сначала нужно закрыть первый ордер, т.к. у него больше прибыли. Однако, это решение является ошибочным. Для принятия правильного решения необходимо рассмотреть возможный сценарий развития событий.

Если бы заранее было точно известно, что в течение периода закрытия ордеров цена не изменится, то порядок закрытия ордеров не имел бы значения. Однако, за то время, пока исполняется торговый приказ на закрытие одного из ордеров, цена может измениться. Поэтому, закрыть следует тот ордер, который при неблагоприятном развитии событий принесёт больше вреда. При изменении цены на 1 пункт прибыль по первому ордеру уменьшится на $5, а по второму - на $10. Очевидно, что вреда будет больше от второго ордера, т.е. его и следует закрыть первым. Таким образом, в вопросе о порядке закрытия ордеров определяющее значение имеет количество лотов. Благоприятное развитие событий в данном случае рассматривать нельзя, т.к. торговля в правильно составленной программе ведётся в соответствии с торговыми критериями, и в данном случае сработал критерий закрытия ордеров типа Buy.




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


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


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



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




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