ФОРЕКС 21 Четверг, 02.05.2024, 22:11
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта

Главная » 2009 » Декабрь » 27 » Учимся писать эксперты для MetaTrader. Урок №6
Учимся писать эксперты для MetaTrader. Урок №6
20:00
Учимся писать эксперты для MetaTrader. Урок №6 Обучение MQL II. Урок 6 Здравствуйте, дорогие читатели! Сегодня мы научимся контролировать открытые позиции. В конце урока мы напишем эксперт. Серьезным отличием этого эксперта от прошлых будет то, что выход из позиции будет осуществляться не только по стопордеру, но и по условию закрытия. 6.1. Количество открытых позиций За количество открытых позиций отвечает переменная TotalTrades. Если Вы хотите осуществлять и всегда иметь только одну открытую позицию, то использовать конструкцию If TotalTrades=0 then {-----------}; или If TotalTrades=1 then exit ; 6.2 Функция Order Value Функция OrderValue - параметры значения открытой позиции. Синтаксис: OrderValue (position,mode) Position - порядковый номер открытой позиции; Mode - этот параметр может принимать множество значений в зависимости от того какой параметр открытой позиции нужно получить. Mode может иметь следующий вид:VAL_CLOSEPRICE - текущая цена закрытия; VAL_CLOSETIME - время закрытия; VAL_COMMENT - комментарий; VAL_LOTS - количество лотов; VAL_OPENPRICE - цена открытия позиции; VAL_OPENTIME - время открытия позиции; VAL_PROFIT - текущий профит; VAL_STOPLOSS - цена срабатывания стоплосса; VAL_SWAP - текущий своп за перенос позиции; VAL_SYMBOL - валютная пара; VAL_TAKEPROFIT - цена срабатывания тейкпрофита; VAL_TICKET - номер позиции; VAL_TYPE - тип позиции (buy, sell и т.д.). Имея несколько открытых позиций, или даже одну, для идентификации параметров открытой позиции удобно пользоваться циклом for. for cnt=1 to TotalTrades { if OrderValue(cnt,VAL_TYPE)<=OP_SELL and // это открытая позиция? OP_BUY или OP_SELL OrderValue(cnt,VAL_SYMBOL)=Symbol then // инструмент совпадает? { If OrderValue(cnt,VAL_TYPE)=OP_BUY then // открыта длинная позиция ……………….. 6.3. Функция ModifyOrder Эта функция нужна что бы изменить установленные стоп ордеры. Например, эта функция используется для поджатия стоплосса (трейлинг стоп). С помощью этой функции также можно изменить тейкпрофит. Синтаксис: ModifyOrder(order,price,stoploss,takeprofit,color) Order- по этому параметру осуществляется идентификация конкретного ордера; Stoploss- новый стоплосс; Takeprofit- новый тейкпрофит; Color- цвет в который окрасится значок на графике цен; Пример изменения стоплосса. If TrailingStop>0 then // пользователь выставил в настройкахтрейлингстоп { // значит мы идем его проверять If (Bid-OrderValue (cnt, VAL_OPENPRICE)) > (Point*TrailingStop) then { If OrderValue(cnt, VAL_STOPLOSS) < (Bid-Point*TrailingStop) then { ModifyOrder(OrderValue(cnt, VAL_TICKET), OrderValue(cnt,VAL_OPENPRICE), Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red); Exit; 6.4 Функция CloseOrder С помощью этой функции осуществляется закрытие открытой позиции. Чаще всего это происходит при срабатывании установленного условия. Т.е. совместно с оператором if then. Синтаксис: CloseOrder(order,lots,price,slippage,color); Order - по этому параметру осуществляется идентификация конкретного ордера; Lots - количество лотов у открытой позиции; Slippage - проскльзывание; Color- цвет в который окрасится значок на графике цен; Пример. CloseOrder ( OrderValue ( cnt,VAL_TICKET ), OrderValue(cnt,VAL_LOTS),Bid,3,Violet); 6.5 Эксперт За основу возьмем эксперт из прошлого выпуска, т.к.его цель закрепление материала. Надеюсь, Вы сами разберетесь что делает этот эксперт, все что для этого нужно есть в этом и прошлых уроках. Следующий выпуск я планирую сделать практическим, т.к.теперь Вы обладаете достаточными знаниями, что бы писать довольно серьезные эксперты. Я был бы очень рад, если бы Вы, дорогие читатели, написали мне какой эксперт Вы хотите увидеть на страницах следующего номера. Самый интересный алгоритм будет реализован в следующем выпуске ./*[[ Name := Expert6 Author := Fxtest.ru Link := forextimes.ru Lots := 1.00 Stop Loss := 80 Take Profit := 80 Trailing Stop := 0 ]]*/ defines: per(7),Upzone(70),Downzone(30),BigTrend(100); //per-период RSI; Upzone, Downzone-оверзоны, BigTrend-период средней показывающей глобальный тренд var: r1(0),r2(0),m1(0),m2(0),cnt(0); // r1-прошлое значение RSI r2-позапрошлое значение RSI r1=iRSI(per,1); r2=iRSI(per,2); m1=iMA(BigTrend,MODE_SMA,1); //MA простого типа (SMA) m2=iMA(BigTrend,MODE_SMA,2); if TotalTrades<1 then { //играть если открытых позиций нет if r2>r1 and r2>Upzone and m1m2 then //если образовался экстремум и он ниже нижней оверзоны, и глобальный тренд вверх, покупай { SetOrder(op_buy,lots,ask,3,bid-stoploss*point,bid+takeprofit*point,green); exit; }; }; if TotalTrades>0 then { for cnt=1 to TotalTrades { if OrderValue(cnt,VAL_TYPE)<=OP_SELL and //позиция buy или sell и по валютной паре скоторой работает эксперт OrderValue(cnt,VAL_SYMBOL)=Symbol then { If OrderValue(cnt,VAL_TYPE)=OP_BUY then //если buy { if r2>50 and r1r2 then // условие на закрытие { CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),ask,3,Violet); //закрытие позиции Exit; }; }; }; }; };
Просмотров: 337 | Добавил: forex21 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Календарь новостей
«  Декабрь 2009  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск

Друзья сайта


Статистика

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz