Пример использования функции OrderSend()
Сегодня, разбирая почту, я наткнулся на очень давнее письмо, в которым один из читателей моего блога попросил мне помочь в написании такого эксперта:
Советник должен в определенное время (параметры MyHour и MyMinute) на заранее заданном расстоянии от текущей цены (параметр MyPendingLevel) выставлять два ордера - Sell Stop и Buy Stop. При этом должны выставляться ордера Stop Loss на расстоянии MySL пипсов от цены ордера и Take Profit на расстоянии MyTP пипсов. |
Я очень долго не отвечал на эту просьбу читателя, т.к. постоянно был чем-то занят по работе, но это неотвеченное письмо мне постоянно не давало спать спокойно, и я решил завершить неначатое и опубликовать решение, о котором этот читатель просил еще в конце августа.
//+------------------------------------------------------------------+ //| 2nd Expert.mq4 | //| Andrey Vedikhin | //| http://www.vedikhin.ru | //+------------------------------------------------------------------+ #property copyright "Andrey Vedikhin" #property link "http://www.vedikhin.blog-forex.org"
//---- input parameters extern int MyPendingLevel=15; extern int MySL=30; extern int MyTP=15; extern int MyHour=19; extern int MyMinute=40; extern int MyLots=1.0;
datetime LastTradeTime; // время последней торговой операции
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- // установим время последней торговой операции вчерашним днем LastTradeTime = CurTime()-24*60*60; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // проверим, не выставляли ли мы ордер уже сегодня // если выставляли - выходим if (TimeDayOfYear(CurTime())==TimeDayOfYear(LastTradeTime)) return(0);
// проверим, не наступило ли время выставить ордер if ((TimeHour(CurTime())==MyHour)&&(TimeMinute(CurTime())==MyMinute)) { // выставим Buy Stop if (OrderSend(Symbol(), OP_BUYSTOP, MyLots, Ask+Point*MyPendingLevel, 0, Ask+Point*MyPendingLevel-Point*MySL, Ask+Point*MyPendingLevel+Point*MyTP)!=-1) LastTradeTime = CurTime(); // ордер не выставлен else return(0);
// обязательная пауза в 10 секунд Sleep(10000);
// обновим текущий Bid и Ask RefreshRates();
// выставим Sell Stop if (OrderSend(Symbol(), OP_SELLSTOP, MyLots, Bid-Point*MyPendingLevel, 0, Bid-Point*MyPendingLevel+Point*MySL, Bid-Point*MyPendingLevel-Point*MyTP)!=-1) LastTradeTime = CurTime(); // ордер не выставлен else return(0); } //---- return(0); } //+------------------------------------------------------------------+
В следующем выпуске я разберу этот эксперт по "косточкам".
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: