KimIV的有用功能 - 页 16

 
KimIV:
khorosh
e-TFL_v2 专家顾问中的bool idPriceLevel() 函数有一个错误:gdUpPrice==0 在最后一个条件中重复了两次,你可能想在第二种情况下写gdDnPrice==0

谢谢你!我已将e-TFL_v2 的修正版上传到网站。


khorosh
出于某种原因,该EA在我的策略测试器中以可视化模式运行,但在模拟账户中却不能开仓,尽管它在评论中报告了买入和卖出水平。也许你可以告诉我这是什么问题。

我不知道......我刚刚在NorthFinance演示中完成了对该专家顾问的测试。昨天我给我的莫斯科朋友打电话。他抱怨的是同一个专家顾问。他说,它按线开仓,然后越来越多,直到你停下来,开了很多仓。因此,有两个测试的目标。

1.关于你的问题。检查一般功能。

2.关于我朋友的问题。我只从一条线上开了一个头寸。

为了检查它,我把e-TFL_v2 专家顾问放在5分钟时间段的EURUSD、GBPUSD、USDCHF和USDJPY。使用趋势线,我在最后20-30个柱子上画了通道。结果,专家顾问如愿以偿地工作了。欧元从底线被买入,而日元从顶线被卖出。对于磅数和糜费,一切也都是正确的。所以你应该自己去检查。专家顾问的工作。

KimIV:
khorosh
e-TFL_v2 中的idPriceLevel() 函数有一个错误:在最后一个条件中,gdUpPrice==0 重复了两次。 可能在第二种情况下,你是想写gdDnPrice==0

谢谢你!我已将e-TFL_v2 的修正版上传到网站。


khorosh
出于某种原因,该EA在我的策略测试器中以可视化模式运行,但在模拟账户中却不能开仓,尽管它在评论中报告了买入和卖出水平。也许你可以告诉我这是什么问题。

我不知道......我刚刚在NorthFinance演示中完成了对该专家顾问的测试。昨天我在莫斯科的朋友给我打电话。他抱怨的是同一个专家顾问。他说,它按线开仓,然后越来越多,直到你停下来,开了很多仓。因此,有两个测试的目标。

1.关于你的问题。检查一般功能。

2.关于我朋友的问题。我只从一条线上开了一个头寸。

为了检查它,我把e-TFL_v2 专家顾问放在5分钟时间段的EURUSD、GBPUSD、USDCHF和USDJPY。使用趋势线,我在最后20-30个柱子上画了通道。结果,专家顾问如愿以偿地工作了。欧元从底线被买入,而日元从顶线被卖出。对于磅数和糜费,一切也都是正确的。所以你应该自己去检查。专家顾问的工作。

也许,我不太理解EA的逻辑,但在我看来,如果使用一条线,发生错误的条件将得到满足,idPriceLevel() 将设置为False。如果我说错了,请解释一下。

 
khorosh:

如果使用单线,将满足发生错误的条件,idPriceLevel() 将被设置为False,这将不会打开仓位。

是的,这是正确的。该EA的正常运行需要两条线:一条线在价格之上,第二条线在当前价格 之下。我已经纠正了网站上的描述。谢谢你!

 
KimIV:
khorosh

如果使用单线,将满足发生错误的条件,idPriceLevel() 将被设置为False,这将不会打开仓位。

是的,这是正确的。该EA的正常运行需要两条线:一条线在价格之上,第二条线在当前价格之下。我已经纠正了网站上的描述。谢谢你!

这就是为什么我的位置没有打开,因为我用一条线工作。现在一切都很清楚了。谢谢你的无私努力。你的功能非常清晰,描述得很清楚。也许我们现在正在开发的大部分EA,现在都会使用你们的功能。

 

函数ExistOPNearMarket()。

该函数返回一个标志,表明市场附近存在一个订单或头寸(与市场的指定距离,单位为点)。要检查的订单或头寸的更精确选择是由外部参数指定的。

  • sy- 仪器的名称。如果设置了这个参数,函数将只检查指定工具的订单或头寸。""NULL 表示当前符号。
  • op- 交易操作,订单或头寸类型。有效值:OP_BUY,OP_SELL, OP_BUYLIMIT,OP_SELLLIMIT,OP_BUYSTOP,OP_SELLSTOP-1。默认值为-1 意味着任何交易操作。
  • mn- 订单或位置的标识符(MagicNumber)。默认值-1 表示任何标识符。
  • ds- 与市场的距离,以点为单位。默认值是1000000
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиции или ордера около рынка   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    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);
}
SZZY.附脚本,用于ExistOPNearMarket()函数的实验。
附加的文件:
 

函数ExistPosByPrice()。

该函数返回一个标志,表示在给定的开盘价上存在一个头寸。要检查的位置的更精确选择是由外部参数定义的。

  • sy- 市场工具的名称。如果你指定这个参数,函数将只检查指定仪器的位置。默认值"" 意味着任何市场工具。NULL表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
  • pp- 仓位开放价格。默认值0 意味着任何价格。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиций по цене открытия         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       ( 0   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
  double px, py;
  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) {
          if (mn<0 || OrderMagicNumber()==mn) {
            d=MarketInfo(OrderSymbol(), MODE_DIGITS);
            px=NormalizeDouble(pp, d);
            py=NormalizeDouble(OrderOpenPrice(), d);
            if (pp<=0 || px==py) return(True);
          }
        }
      }
    }
  }
  return(False);
}
ZS.在预告片中,有一个测试ExistPosByPrice()函数的脚本。
附加的文件:
 

GetAmountLotFromOpenPos()函数。

该函数返回未结头寸的手数之和。要考虑的位置的更精确选择是由外部参数指定的。

  • 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 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);
}
附上一个测试GetAmountLotFromOpenPos()函数的脚本。
附加的文件:
 

GetIndexByTicket()函数。

该函数按票数返回订单或位置的索引。更准确地选择要搜索的订单或头寸是由外部参数指定的。

  • ti- 车票顺序,位置。该参数的值不能为空或零。
  • sy- 市场工具的名称。如果你设置这个参数,函数将只考虑指定仪器的位置。默认值 -"" 指任何市场工具。NULL 表示当前的仪器。
  • op-交易操作,订单或头寸类型。有效值:OP_BUY,OP_SELL, OP_BUYLIMIT,OP_SELLLIMIT,OP_BUYSTOP,OP_SELLSTOP-1。默认值为-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值为-1,意味着任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexByTicket(int ti, string sy="", int op=-1, int mn=-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=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
PS。附上一个测试GetIndexByTicket()函数的脚本。
附加的文件:
 

你好

我想知道你是否有一个函数来确定作为参数传递给它的两个序列的相关性?

 
scorpionk:

你好

我想知道你是否有一个函数来确定作为参数传递给它的两个序列的相关性?

不...但我对这个话题有兴趣。如果你提供计算相关性的公式,我将写出这个函数。


ZS.我不会自己去找这些公式。我也不会去找材料的链接。也就是说,我没有了解这个问题的愿望。只有一个愿望,就是用现成的公式写一个函数。

 
KimIV:
scorpionk:

你好

我想知道你是否有一个函数来确定作为参数传递给它的两个序列的相关性?

不...但我对这个话题有兴趣。如果你提供计算相关性的公式,我将写出这个函数。


ZS.我不会自己去找这些公式。我也不会去找材料的链接。也就是说,我没有了解这个问题的愿望。只有在准备好的公式上写函数的愿望。


相关公式