KimIV的有用功能 - 页 24

 

NumberOfLossPosToday()函数。

该函数返回今天关闭的亏损头寸的数量。选择要考虑的位置是使用外部参数进行的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑这个仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество убыточных позиций, закрытых сегодня.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    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);
}
P.S. 附上一个测试NumberOfLossPosToday()函数的脚本。
附加的文件:
 

PriceCloseLastPos()函数。

该函数返回最后一次平仓的收盘价。要考虑的位置的选择是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑这个仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену закрытия последней закрытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceCloseLastPos(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=OrderClosePrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
附上一个测试PriceCloseLastPos()函数的脚本。
附加的文件:
 
亲爱的 KimIV 如果你能在你的主题末尾发布一个你所有的函数库,那就更好了。
 

我支持这个观点。你甚至可以这样做。不是整个图书馆。但是,几个图书馆,而且不是在最后,而是随着fi图书馆在某一主题上的积累。

例如,在开盘/收盘时分别建库(开盘F-i只是加上市场观察 的开盘和收盘)

下一个库--用f.i.的方式,通过这些或那些属性返回位置的存在。

以此类推。

只有在这里才有必要收集目前人们对整套图书馆的建议。

 

PriceOpenLastPos()函数。

该函数返回最后一次开仓的开仓价格。要考虑的位置的选择是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值-"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
附上一个测试PriceOpenLastPos()函数的脚本。
附加的文件:
 

PriceOpenLastClosePos()函数。

该函数返回最后一次平仓的开盘价。要考虑的位置的选择是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑这个仪器的位置。默认值-"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
附上一个测试PriceOpenLastClosePos()函数的脚本。
附加的文件:
 
rid:

我支持这个观点。你甚至可以这样做。不是整个图书馆。但是,几个图书馆,而且不是在最后,而是随着fi图书馆在某一主题上的积累。

例如,在开盘/收盘时分别建库(开盘F-i只是加上市场观察 的开盘和收盘)

下一个库--用f.i.的方式,通过这些或那些属性返回位置的存在。

以此类推。

我想就图书馆的采购提出一些建议。

下午好。

亲爱的KimIV。

你正在做一件对新手专家作家非常有用的事情。

我和前一个请愿者一起。

如果不难的话,你能不能把主要功能集中到一个"专家模板"中。

-初步检查

-开启一个职位

-下订单

-关闭一个头寸

-删除订单

-支持(修改)订单和头寸。

而每个人都会自己写一个调用这些函数的块。

我不能自己从头开始写一个EA。

这就是为什么我从改变别人的代码开始。

我开始在块中添加你的函数--我得到的是混乱的。

经过几天的修正和补充,试行的专家顾问工作了,但效果很差。

这就是为什么我提出这个要求,要创建一个简单的专家顾问模板。


罗氏的模板对我来说有些难以理解,一开始就很多余--来自MetaEditor的 文章:建立在模板的力量之上

 

PriceOpenNearPos()函数。

该函数返回最近的仓位的开盘价。开仓价格和当前市场价格之间的最小距离(点)作为头寸 "接近 "的标准。选择要考虑的位置是由外部参数设定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值为-1,代表任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

附上一个测试PriceOpenNearPos()函数的脚本。

如果有人感兴趣,可以自己比较DistMarketAndPos()和PriceOpenNearPos()。注意差异。

附加的文件:
 

TicketNearPos()函数。

该函数返回最接近市场的位置的票。开盘价和当前市场价格之间的最小距离(以点为单位)被作为头寸 "接近 "的标准。选择要考虑的职位是由外部参数设定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
附上一个测试TicketNearPos()函数的脚本。
附加的文件:
 

TypeNearPos()函数。

该函数返回开盘价时最接近市场的仓位类型(0-买入1-卖出)或-1。一个头寸的开盘价与当前市场价格之间的最小距离(点)作为一个头寸 "接近 "的标准。选择要考虑的位置是由外部参数设定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
附上一个测试TypeNearPos()函数的脚本。
附加的文件: