//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает цену открытия последней открытой позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=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 (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
return(r);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 03.06.2008 |//| Описание : Возвращает цену открытия последней закрытой позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double PriceOpenLastClosePos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=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=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
return(r);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 04.06.2008 |//| Описание : Возвращает цену открытия ближайшей позиции. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
double mi, oop=0, p;
int i, k=OrdersTotal(), pp=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 (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) mi=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
pp=MathAbs(OrderOpenPrice()-mi)/p;
oop=OrderOpenPrice();
}
}
}
}
}
}
return(oop);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 05.06.2008 |//| Описание : Возвращает тикет ближайшей к рынку позиции по цене открытия. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int TicketNearPos(string sy="", int op=-1, int mn=-1) {
double mi, p;
int i, k=OrdersTotal(), pp=0, ti=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 (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) mi=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
pp=MathAbs(OrderOpenPrice()-mi)/p;
ti=OrderTicket();
}
}
}
}
}
}
return(ti);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.06.2008 |//| Описание : Возвращает тип ближайшей к рынку позиции или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int TypeNearPos(string sy="", int op=-1, int mn=-1) {
double mi, p;
int i, k=OrdersTotal(), pp=0, ty=-1;
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) {
if (OrderType()==OP_BUY) mi=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
pp=MathAbs(OrderOpenPrice()-mi)/p;
ty=OrderType();
}
}
}
}
}
}
return(ty);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает время открытия последней открытой позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
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 (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(t);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 10.06.2008 |//| Описание : Выполняет пузырьковую сортировку элементов массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| a - массив элементов |//+----------------------------------------------------------------------------+void BubbleSort(double& a[]) {
double t;
int i, j, n=ArraySize(a);
for (i=n-1; i>0; i--) {
for (j=0; j<i; j++) {
if (a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 10.06.2008 |//| Описание : Возвращает количество баров между двумя последними фракталами. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//+----------------------------------------------------------------------------+int BarsBetweenLastFractals(string sy="", int tf=0) {
double fu=0, fd=0;
int i, nu=0, nd=0;
if (sy=="" || sy=="0") sy=Symbol();
for (i=2; i<100; i++) {
fu=iFractals(sy, tf, MODE_UPPER, i);
if (fu!=0) {
if (nu==0) nu=i;
}
fd=iFractals(sy, tf, MODE_LOWER, i);
if (fd!=0) {
if (nd==0) nd=i;
}
if (nu>0 && nd>0) return(MathAbs(nu-nd));
}
Print("BarsBetweenLastFractals(): Фракталы не найдены");
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество секунд после закрытия последней позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
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 (t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество секунд после открытия последней позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
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 (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Выполняет поиск элемента массива по значению |//| и возвращает индекс найденного элемента или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов |//| e - значение элемента |//+----------------------------------------------------------------------------+int ArraySearchDouble(double& m[], double e) {
for (int i=0; i<ArraySize(m); i++) {
if (m[i]==e) return(i);
}
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Выполняет поиск элемента массива по значению |//| и возвращает индекс найденного элемента или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов |//| e - значение элемента |//+----------------------------------------------------------------------------+int ArraySearchInt(int& m[], int e) {
for (int i=0; i<ArraySize(m); i++) {
if (m[i]==e) return(i);
}
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 04.03.2008 |//| Описание : Выполняет поиск элемента массива по значению |//| и возвращает индекс найденного элемента или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов |//| e - значение элемента |//+----------------------------------------------------------------------------+int ArraySearchString(string& m[], string e) {
for (int i=0; i<ArraySize(m); i++) {
if (m[i]==e) return(i);
}
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.06.2008 |//| Описание : Возвращает размер лота последней закрытой позиции или -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);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 17.05.2008 |//| Описание : Возвращает значение максимального элемента массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| x - массив значений числового ряда |//+----------------------------------------------------------------------------+double ArrayMax(double& x[]) {
if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
else {
Print("ArrayMax(): Массив пуст!");
return(0);
}
}
PriceOpenLastPos()函数。
该函数返回最后一次开仓的开仓价格。要考虑的位置的选择是由外部参数指定的。
PriceOpenLastClosePos()函数。
该函数返回最后一次平仓的开盘价。要考虑的位置的选择是由外部参数指定的。
PriceOpenNearPos()函数。
该函数返回最近的仓位的开盘价。开仓价格和当前市场价格之间的最小距离(点)作为头寸 "接近 "的标准。选择要考虑的位置是由外部参数设定的。
TicketNearPos()函数。
该函数返回最接近市场的位置的票。开盘价和当前市场价格之间的最小距离(以点为单位)被作为头寸 "接近 "的标准。选择要考虑的职位是由外部参数设定的。
TypeNearPos()函数。
该函数返回开盘价时最接近市场的仓位类型(0-买入,1-卖出)或-1。一个头寸的开盘价与当前市场价格之间的最小距离(点)作为一个头寸 "接近 "的标准。选择要考虑的位置是由外部参数设定的。
TimeOpenLastPos()函数。
该函数返回最后一次打开位置的时间。选择要考虑的位置是由外部参数定义的。
函数BarsBetweenLastFractals()。
该函数返回最后两个分形之间的条数或-1。分形的市场工具和时间框架是由参数指定的。
函数SecondsAfterCloseLastPos()。
该函数返回最后一个位置被关闭后的秒数。选择要考虑的位置是由参数指定的。
SecondsAfterOpenLastPos()函数。
该函数返回最后一个位置被打开后的秒数。选择要考虑的位置是由外部参数指定的。
DeleteOppositeOrders()函数。
该函数删除一个或多个与头寸相反的订单,其类型在操作 中被指定。 例如,与买入 头寸相反的订单是SellLimit 和SellStop。例如,如果设置了两个相反的订单,并且其中一个触发了,那么删除相反的订单就成为必要。
ArraySearchDouble()函数。
该函数使用一个双数类型的值搜索一个数组元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果是正数,则停止搜索。
ArraySearchInt()函数。
该函数通过一个int类型的 值搜索数组中的一个元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果是正数,则停止搜索。
ArraySearchString()函数。
该函数在数组中搜索一个字符串 类型的元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果是正数,则停止搜索。
GetLotLastClosePos()函数。
该函数返回最后平仓的手数或-1。要考虑的位置的选择是由外部参数定义的。
ArrayMax()函数。
该函数返回数组中 最大元素 的值。