//+-----------------------------------------------------------------------------+ //| Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня | //+-----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+-----------------------------------------------------------------------------+ bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) { int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(True); } } } } } return(False); }
Полезные mql функции
#16
Отправлено 22 April 2010 - 09:03
 
#17
Отправлено 22 April 2010 - 09:05
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг существования позиции или ордера около рынка | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| op - торговая операция ( -1 - любая операция) | //| mn - MagicNumber ( -1 - любой магик) | //| ds - расстояние в пунктах от рынка ( 1000000 - по умолчанию) | //+----------------------------------------------------------------------------+ bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) { int i, k=OrdersTotal(), ot; if (sy=="" || sy=="0") sy=Symbol(); double p=MarketInfo(sy, MODE_POINT); if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01; for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { ot=OrderType(); if ((OrderSymbol()==sy) && (op<0 || ot==op)) { if (mn<0 || OrderMagicNumber()==mn) { if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) { if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True); } if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) { if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True); } } } } } return(False); }
#18
Отправлено 22 April 2010 - 09:06
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг существования позиций по цене открытия | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| pp - цена (-1 - любая цена) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool ExistPosByPrice(string sy="", int op=-1, double pp=-1, int mn=-1) { int d, i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { d=MarketInfo(OrderSymbol(), MODE_DIGITS); if (pp<0 || NormalizeDouble(pp, d)==NormalizeDouble(OrderOpenPrice(), d)) { if (mn<0 || OrderMagicNumber()==mn) return(True); } } } } } return(False); }
#19
Отправлено 22 April 2010 - 09:08
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг существования позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| ot - время открытия ( 0 - любое время открытия) | //+----------------------------------------------------------------------------+ bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (ot<=OrderOpenTime()) return(True); } } } } } } return(False); }
#20
Отправлено 22 April 2010 - 09:09
//+----------------------------------------------------------------------------+ //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) { double l=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return(l); }
#21
Отправлено 22 April 2010 - 09:10
//+----------------------------------------------------------------------------+ //| Описание : Возвращает индекс последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetIndexLastPos(string sy="", int op=-1, int mn=-1) { datetime o; int i, k=OrdersTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); r=i; } } } } } } } return(r); }
#22
Отправлено 22 April 2010 - 09:15
//+----------------------------------------------------------------------------+ //| Описание : Возвращает размер лота последней закрытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetLotLastClosePos(string sy="", int op=-1, int mn=-1) { datetime o; double l=-1; int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderCloseTime()) { o=OrderCloseTime(); l=OrderLots(); } } } } } } } return(l); }
- Shipr это нравится
#23
Отправлено 22 April 2010 - 09:16
//+----------------------------------------------------------------------------+ //| Описание : Возвращает размер лота последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetLotLastPos(string sy="", int op=-1, int mn=-1) { datetime o; double l=-1; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); l=OrderLots(); } } } } } } } return(l); }
#24
Отправлено 22 April 2010 - 09:17
//+---------------------------------------------------------------------------------------------+ //| Автор : Немеш Сергей | //+---------------------------------------------------------------------------------------------+ //| Описание : Возвращает значение цены (stop loss) для последней открытой позиции или -1 | //+---------------------------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+---------------------------------------------------------------------------------------------+ double GetStopLossLastPos(string sy="", int op=-1, int mn=-1) { datetime o; double l=-1; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); l=OrderStopLoss(); } } } } } } } return(l); }
#25
Отправлено 22 April 2010 - 09:19
//+----------------------------------------------------------------------------+ //| Автор : Немеш Сергей | //+----------------------------------------------------------------------------+ //| Описание : Возвращает цену открытия последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetPriceLastPos(string sy="", int op=-1, int mn=-1) { datetime o; double l=-1; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); l=OrderOpenPrice( ) ; } } } } } } } return(l); }
#26
Отправлено 22 April 2010 - 09:20
//+-------------------------------------------------------------------------------------------+ //| Автор : Немеш Сергей | //+-------------------------------------------------------------------------------------------+ //| Описание : Возвращает цену открытия предпоследней открытой позиции или -1 | //+-------------------------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+-------------------------------------------------------------------------------------------+ double GetPrePricePos(string sy="", int op=-1, int mn=-1) { datetime o; double l=-1; int i, k=OrdersTotal()-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); l=OrderOpenPrice(); } } } } } } } return(l); }
#27
Отправлено 22 April 2010 - 09:21
//+----------------------------------------------------------------------------+ //| Описание : Возвращает максимальный размер лота из открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetMaxLotFromOpenPos(string sy="", int op=-1, int mn=-1) { double l=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (l<OrderLots()) l=OrderLots(); } } } } } } return(l); }
#28
Отправлено 22 April 2010 - 09:22
//+----------------------------------------------------------------------------+ //| Описание : Возвращает минимальный размер лота из открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetMinLotFromOpenPos(string sy="", int op=-1, int mn=-1) { double l=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (l==0 || l>OrderLots()) l=OrderLots(); } } } } } } return(l); }
#29
Отправлено 22 April 2010 - 09:23
//+----------------------------------------------------------------------------+ //| Описание : Возвращает суммарный профит в валюте депозита | //| закрытых с определённой даты позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| dt - Дата и время в секундах с 1970 года ( 0 - с начала истории) | //+----------------------------------------------------------------------------+ double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0) { double p=0; int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn<0 || OrderMagicNumber()==mn) { if (dt<OrderCloseTime()) { p+=OrderProfit()+OrderCommission()+OrderSwap(); } } } } } } return(p); }
#30
Отправлено 22 April 2010 - 09:27
//+----------------------------------------------------------------------------+ //| Описание : Возвращает суммарный профит открытых позиций в валюте депозита | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) { double p=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (mn<0 || OrderMagicNumber()==mn) { p+=OrderProfit()+OrderCommission()+OrderSwap(); } } } } } return(p); }