Студопедия

КАТЕГОРИИ:


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




Технический Индикатор Стохастический Осциллятор (Stochastic Oscillator) сопоставляет текущую цену закрытия с диапазоном цен за выбранный период времени. Индикатор представлен двумя индикаторными линиями. Главная линия называется %K. Вторая линия %D, сигнальная, это - скользящее среднее линии %K. Обычно %K изображается сплошной линией, а %D - пунктирной. Согласно одному из вариантов трактовки показаний индикатора следует покупать, если линия %K поднимается выше линии %D и продавать, если линия %K опускается ниже линии %D. Наиболее благоприятным моментом для совершения торговой операции считается момент пересечения линий.

double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift)

Параметры:

symbol - символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.

timeframe - период. Может быть одним из периодов графика. 0 означает период текущего графика.

%Kperiod - период(количество баров) для вычисления линии %K.

%Dperiod - период усреднения для вычисления линии %D.

slowing - значение замедления.

method - метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).

price_field - Параметр выбора цен для расчета. Может быть одной из следующих величин: 0 - Low/High или 1 - Close/Close.

mode - индекс линии индикатора. Может принимать одно из значений: MODE_MAIN или MODE_SIGNAL.

shift - индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Использование осциллятора Stochastic Oscillator предполагает необходимость анализа относительного положения линий. Для того, чтобы вычислить какое торговое решение необходимо осуществлять, следует принять во внимание значения каждой линии на текущем и на предыдущем барах (см. Рис. 107). При пересечении линий в точке А (зелёная линия пересекает красную снизу вверх) необходимо закрыть рыночный ордер Sell и открыть Buy. На всём протяжении участка А - В (нет пересечения линий, зелёная выше красной) необходимо удерживать открытым рыночный ордер Buy. В точке В (зелёная линия пересекает красную сверху вниз) необходимо закрыть Buy и открыть Sell. Далее - удерживать открытым ордер Sell до следующего пересечения линий (нет пересечений, зелёная остаётся ниже красной).


Рис. 107. Пересечение главной и сигнальной линий осциллятора Stochastic Oscillator.

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

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

// callstohastic.mq4

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

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

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

{

double M_0, M_1, // Значение MAIN на 0 и 1 барах

S_0, S_1; // Значение SIGNAL на 0 и 1барах

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

// Обращение к функции техн.индикат.

M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 бар

M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);// 1 бар

S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 бар

S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 бар

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

// Анализ ситуации

if(M_1 < S_1 && M_0 >= S_0) // Зеленая пересекает красную снизу

Alert("Пересечение снизу вверх. ПОКУПКА."); // Сообщение

if(M_1 > S_1 && M_0 <= S_0) // Зеленая пересекает красную свеху

Alert("Пересечение сверху вниз. ПРОДАЖА."); // Сообщение

 

if(M_1 > S_1 && M_0 > S_0) // Зелёная выше красной

Alert("Продолжаем держать покупку."); // Сообщение

if(M_1 < S_1 && M_0 < S_0) // Зелёная ниже красной

Alert("Продолжаем держать продажу."); // Сообщение

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

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

}

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

Для получения значения линии %K (сплошная зелёная) на нулевом баре используется следующая строка вычислений:

M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 бар

Здесь параметр MODE_MAIN указывает линию, значение которой запрашивается, а последний параметр 0 - индекс бара, для которого необходимо вычислить значение указанной линии. В последующих трёх строках программы аналогично вычисляются другие значения - для линии %D (красная пунктирная, параметр MODE_SIGNAL) для нулевого и первого баров.

В следующем блоке выполняется анализ соотношения полученных значений, и эксперт сообщает пользователю о текущем состоянии на каждом тике. Например, в строках:

if(M_1 < S_1 && M_0 >= S_0) // Зеленая пересекает красную снизу
Alert("Пересечение снизу вверх. ПОКУПКА."); // Сообщение

вычисляется факт пересечения красной линии зелёной сигнальной линией сверху вниз. Если на предыдущем баре зелёная линия была ниже красной (т.е. истинным является выражение M_1 < S_1), а на текущем баре зелёная линия поднялась выше красной или их значения совпадают (т.е. истинным является выражение M_0 >= S_0), то это значит, что в период с момента образования предыдущего бара по настоящий момент зелёная линия пересекла красную снизу вверх. Таким образом, вычисленное условие в операторе if является истинным, поэтому управление передаётся в тело оператора if, в результате чего исполняется функция Alert() для вывода соответствующего сообщения пользователю.

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

На Рис. 108 показан результат работы эксперта callstohastic.mq4.


Рис. 108. Результат работы эксперта callstohastic.mq4.

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

Простой эксперт

 

В этом параграфе рассматриваются принципы построения простого торгующего эксперта.

Задача 29. Создать торгующий эксперт.

Предварительные рассуждения

 

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

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

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

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

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

Структура простого эксперта

 

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

 


Рис. 109. Структурная схема простого эксперта.

 

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

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

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

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

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

После того, как необходимые ордера закрыты, управление передаётся в блок вычисления размера новых ордеров. Существует множество алгоритмов для вычисления объема ордера. Самый простой из них - постоянный, фиксированный лот. Этот алгоритм удобно включать в программу для тестирования стратегии. Более распространённый способ определения размера ордера состоит в том, что количество лотов ставится в зависимость от суммы свободных средств, например, может составлять 30-40%. Если средств на счёте недостаточно, то программа заканчивает работу, предварительно уведомив пользователя о причине.

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

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

Торговая стратегия

 

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


Рис. 110. Флэт и тренд на рынке.

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

Торговые критерии

 

В данном примере мы попробуем построить трендовый эксперт, т.е. такой, который будет открывать ордера в сторону движения цены. Для этого среди множества показателей различных технических индикаторов необходимо найти такие, которые свидетельствуют о начале тренда. Один из наиболее простых методов поиска торговых критериев основан на анализе сочетания средних МА с различным периодом усреднения. На Рис. 111 и Рис. 112 показано расположение двух различных МА (с периодами усреднения 11 и 31) на различных участках рынка. Средние с небольшим периодом усреднения (красного цвета) располагаются ближе ценовому графику, они более извилисты и подвижны. В то же время средние с большим периодом усреднения (синего цвета) более инертны, имеют большее запаздывание и располагаются дальше от рыночных цен. Обратим внимание на те места, в которых МА с разным периодом усреднения пересекаются и попробуем решить: можно ли факт пересечения МА использовать в качестве торгового критерия.

 


Рис. 111. Пересечения МА(11) и МА(31) при изменении направления движения цены.

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

 


Рис. 112. Пересечения МА(11) и МА(31) при изменении направления движения цены.

В то же время на рынке попадаются и другие участки, на которых МА также пересекаются, однако это не приводит к существенному последующему повышению или снижению цены (Рис. 112). Ордера, открытые по факту пересечения МА на таких участках оказываются убыточными. Если в точке А открыть Sell, а в точке В его закрыть, то результатом такой торговой операции окажется убыток. То же можно сказать и об ордере Buy, открытом в точке В закрытом в точке С.

Успешность всей стратегии, реализованной на основе факта пересечения МА, в конечном счёте зависит от количества участков, которые можно охарактеризовать как тренд и флэт. На флэте частое пересечение МА является закономерным явлением, которое сильно вредит любой трендовой стратегии. Множественные ложные сигналы, как правило, приводят к общему убытку. Поэтому данный признак - факт пересечения МА с различным периодом усреднения - можно использовать для построения трендовых стратегий только в сочетании с другими признаками, подтверждающими наличие тренда. В данном примере (для построения простого эксперта) мы вынуждены отказаться от использования этого признака.

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


Рис. 113. Сильное движение цены может привести к развитию тенденции.

На Рис. 113 показан участок рынка, на котором сильное движение цены привело к продолжению изменения цены в том же направлении. В качестве показателя "сильного движения" можно использовать разницу значений МА с различным периодом усреднения. Чем сильнее движение, тем большее отставание МА с большим периодом усреднения от МА с малым периодом усреднения. Показательно, что даже сильные скачкообразные изменения цен с последующим возвратом не приводят к большой разнице значений между различными МА, т.е. не возникает много нежелательных ложных сигналов. Например, скачкообразное изменение цены на 50 пунктов, сопровождаемое последующим откатом (в центре Рис. 113), привело к увеличению разницы между МА всего на 20 пунктов. В то же время, действительно сильное движение (которое обычно не сопровождается значительной коррекцией) в точке А повлекло за собой увеличение разницы между МА до 25 - 30 пунктов.

Если при достижении некоторого значения разницы между значениями различных МА, например, в точке А, открыть ордер Buy, то вполне вероятно, что в конечном итоге этот ордер окажется прибыльным, когда цена достигнет уровня заявленного значения его стоп-приказа. Используем этот показатель в качестве торгового критерия в нашем эксперте.

Количество ордеров

 

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

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

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

Отношение торговых критериев

 

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


Рис. 114. Соотношение критериев открытия и закрытия ордеров (а и b - правильные критерии, с - неправильные).

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

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

Вариант соотношения торговых критериев с, является ошибочным. Согласно этому варианту допускается открытие рыночного ордера в условиях, когда ещё не закрыты противоположные ордера, что противоречит здравому смыслу. Возможны исключительные случаи, отчасти оправдывающие это вариант. Открытие встречного ордера иногда допускается для того, чтобы компенсировать убытки, возникающие при небольших коррекциях после сильных движений рыночных цен. В таких случаях встречный ордер может быть открыт на ту же или несколько меньшую сумму, чем уже имеющийся, а после окончания коррекции - закрыт. Такая тактика позволяет не затрагивать "основной" ордер, открытый в пользу тренда.

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

В нашем примере используется вариант b соотношения торговых критериев. Все открытые рыночные ордера закрываются либо по стоп-приказу, либо в результате срабатывания критерия открытия ордера в противоположном направлении (при этом критерий закрытия Buy совпадает с критерием открытия Sell и наоборот).

Размер открываемых ордеров

 

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

Слишком маленький размер ордеров позволит получить больше уверенности в работе при непредсказуемом изменении рынка, но и сумма прибыли при успешной работе в этом случае окажется незначительной. При слишком большом размере ордеров можно получить и пропорционально большую прибыль, однако такой эксперт будет слишком рисковым. Обычно размер открываемых ордеров устанавливается таким образом, чтобы залоговые средства не превышали 2 - 35% от баланса или от суммы свободных средств (если стратегия допускает только один ордер, то значения баланса и свободных средств в момент, предшествующий открытию ордера, совпадают).

В данном примере реализованы оба варианта. Пользователь может по своему выбору либо прямо указать стоимость ордеров, либо установить для стоимости ордеров значение в процентах от суммы свободных средств.

Подробности программирования

 

Простой трендовый эксперт tradingexpert.mq4, построенный на основе предыдущих рассуждений, может выглядеть так:

Описание переменных

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

// tradingexpert.mq4

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

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

#property copyright "Copyright © Book, 2007"

#property link "http://AutoGraf.dp.ua"

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

// Численные значения для М15

extern double StopLoss =200; // SL для открываемого ордера

extern double TakeProfit =39; // ТР для открываемого ордера

extern int Period_MA_1=11; // Период МА 1

extern int Period_MA_2=31; // Период МА 2

extern double Rastvor =28.0; // Расстояние между МА

extern double Lots =0.1; // Жестко заданное колич. лотов

extern double Prots =0.07; // Процент свободных средств

 

bool Work=true; // Эксперт будет работать.

string Symb; // Название финанс. инструмента

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

int start()

{

int

Total, // Количество ордеров в окне

Tip=-1, // Тип выбран. ордера (B=0,S=1)




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


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


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



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




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