//+----------------------------------------------------------------------------+ //| Описание : Возвращает суммарный профит открытых позиций в пунктах | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) { double p; int i, k=OrdersTotal(), pr=0; 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 (mn<0 || OrderMagicNumber()==mn) { p=MarketInfo(OrderSymbol(), MODE_POINT); if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01; if (OrderType()==OP_BUY) { pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p; } if (OrderType()==OP_SELL) { pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p; } } } } } return(pr); }
Полезные mql функции
#31
Отправлено 22 April 2010 - 09:29
 
#32
Отправлено 22 April 2010 - 09:30
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает тикет последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetTicketLastPos(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=OrderTicket(); } } } } } } } return(r); }
#33
Отправлено 22 April 2010 - 09:32
//+----------------------------------------------------------------------------+ //| Описание : Возвращает тип последней закрытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetTypeLastClosePos(string sy="", int mn=-1) { datetime t; int i, k=OrdersHistoryTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderCloseTime()) { t=OrderCloseTime(); r=OrderType(); } } } } } return(r); }
- Shipr это нравится
#34
Отправлено 22 April 2010 - 09:34
//+----------------------------------------------------------------------------+ //| Описание : Возвращает Magic последней закрытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetMagicLastClosePos(string sy="", int mn=-1) { datetime t; int i, k=OrdersHistoryTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderCloseTime()) { t=OrderCloseTime(); r=OrderMagicNumber(); } } } } } return(r); }
#35
Отправлено 22 April 2010 - 09:36
//+----------------------------------------------------------------------------+ //| Описание : Возвращает тип последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetTypeLastOpenPos(string sy="", int mn=-1) { datetime t; 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=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderType(); } } } } } return(r); }
#36
Отправлено 22 April 2010 - 09:39
//+----------------------------------------------------------------------------+ //| Описание : Возвращает Magic последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetMagicLastOpenPos(string sy="", int mn=-1) { datetime t; 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=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderMagicNumber(); } } } } } return(r); }
#37
Отправлено 22 April 2010 - 09:40
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг закрытия последней позиции по стопу. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) { datetime t; double ocp, osl; int dg, i, j=-1, 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 (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo(OrderSymbol(), MODE_DIGITS); if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; ocp=NormalizeDouble(OrderClosePrice(), dg); osl=NormalizeDouble(OrderStopLoss(), dg); if (ocp==osl) return(True); } return(False); }
#38
Отправлено 22 April 2010 - 09:53
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг закрытия последней позиции по тейку. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) { datetime t; double ocp, otp; int dg, i, j=-1, 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 (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo(OrderSymbol(), MODE_DIGITS); if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; ocp=NormalizeDouble(OrderClosePrice(), dg); otp=NormalizeDouble(OrderTakeProfit(), dg); if (ocp==otp) return(True); } return(False); }
#39
Отправлено 22 April 2010 - 09:54
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг убыточности последней позиции. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isLossLastPos(string sy="", int op=-1, int mn=-1) { datetime t; int i, j=-1, 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 (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { if (OrderProfit()<0) return(True); } return(False); }
#40
Отправлено 22 April 2010 - 09:56
//+----------------------------------------------------------------------------+ //| Описание : Возвращает флаг торгов сегодня. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isTradeToDay(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 (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(True); } } } } } } k=OrdersTotal(); 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 (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(True); } } } } } } return(False); }
#41
Отправлено 22 April 2010 - 09:57
//+----------------------------------------------------------------------------+ //| Описание : Перенос уровня стопа в безубыток | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ( "" - любой символ, | //| NULL - текущий символ) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ void MovingInWL(string sy="", int op=-1, int mn=-1) { double po, pp; int i, k=OrdersTotal(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { po=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) { pp=MarketInfo(OrderSymbol(), MODE_BID); if (pp-OrderOpenPrice()>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1); } } } if (OrderType()==OP_SELL) { if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) { pp=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pp>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1); } } } } } }
#42
Отправлено 22 April 2010 - 09:59
//+----------------------------------------------------------------------------+ //| Описание : Возвращает номер бара закрытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersHistoryTotal(); if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) t=OrderCloseTime(); } } } } } } return(iBarShift(sy, tf, t, True)); }
#43
Отправлено 22 April 2010 - 10:00
//+----------------------------------------------------------------------------+ //| Описание : Возвращает номер бара открытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersTotal(); if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) t=OrderOpenTime(); } } } } } } return(iBarShift(sy, tf, t, True)); }
#44
Отправлено 22 April 2010 - 10:44
//+----------------------------------------------------------------------------+ //| Описание : Возвращает количество убыточных позиций, закрытых сегодня. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) { datetime t; int i, k=OrdersHistoryTotal(), kp=0; 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) { t=OrderCloseTime(); if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) { if (OrderProfit()<0) kp++; } } } } } } } return(kp); }
#45
Отправлено 22 April 2010 - 10:45
//+----------------------------------------------------------------------------+ //| Описание : Возвращает количество позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), kp=0; 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) kp++; } } } } } return(kp); }