KimIV的有用功能 - 页 89

 
是否有可能在你的专家顾问e-CloseByPercentProfit.mq4中加入设置它所安装的图表中的交易的TP和SL?
 

大家下午好。

关于函数的问题


//+------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                        |
//|  Описание : Возвращает количество позиций.      |
//+------------------------------------------------------------------+

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);}  
          

我有一个多币种的同行。这些对子是在外部参数中设置的。有自己的魔术师(为每对)。

在每个工具的进入条件中,有这样一条:
if ( NumberOfPositions(Symbol_1, -1,Magic_1)<1){//если нет открытых
//позиций по 1-му инструменту, 
或(对于第二个货币对)
if ( NumberOfPositions(Symbol_2, -1,Magic_2)<1){//если нет открытых
//позиций по 2-му инструменту, проверяем ОСТАЛЬНЫЕ условия

发生的情况是,我昨天给两个符号都充了电--欧元兑美元,今天早上我发现只有一个交易打开,尽管这两种情况下似乎都有信号。

然后,我想到了这一点。该函数

NumberOfPositions(string sy="", int op=-1, int mn=-1)
首先,它检查是否有一个符号的开放位置。然后是其他一切。

换句话说,如果我用EA为工具EIRUSD开了一个头寸,即使用另一个魔术师 按照不同的算法,第二个头寸也不会开。

请告诉我这是真的还是假的?

还是我的推理有误? 还是该函数逐一 评估了所有的标准 ...


 

我经常使用这个函数,它根据输入参数返回一切。该函数所经过的项目是按照参数顺序排序的。自己看吧。

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);
}
 

因此,这意味着我的EA将无法打开第二个欧元兑美元的头寸,即使有另一个魔术师,只要第一个头寸是开放的?

显然是这样。因为即使在测试器中,它似乎也没有看到任何重叠的位置。

//--------------------------------------------------------

 
Rita >> :

那么,这意味着我的EA将无法打开第二个欧元兑美元的头寸,即使它有另一个魔术师,而第一个头寸是开放的?

恰恰相反:)) 这意味着该函数会分别计算你的符号和魔法数字。也就是说,如果有一个欧元兑美元c Magic_1的未结头寸,那么NumberOfPositions("EURUSD", -1, Magic_2)==0; 当然,除非有另一个欧元兑美元的Magic_2的头寸。

一般来说,函数根据(sy && op && mn)来计算未结头寸,即头寸将完全按照这些参数来计算。如果至少有一个参数不匹配,这个函数将不考虑这个订单,也不会显示。

在Comment中打印函数值,你就能实时看到订单的数量和函数是否正常工作。最有可能的是,算法失灵的原因在EA代码中。

 
好的。我现在要检查一下代码。
 
hope писал(а)>>

在函数调用中为符号添加绑定并没有帮助。为什么它分别计算每个头寸的利润(如上图)?

不,我宁愿提供给你我的画......

...和一个脚本...

附加的文件:
 
KimIV писал(а)>>

不,我宁愿提供给你我的画......

...和一个脚本...

我已经意识到我是个傻瓜......你不能通过添加牛肉和牛奶来获得乳房。

 
KimIV писал(а)>>
安吉拉,编译器没有想到会在这个地方找到我的函数定义。这意味着在代码上面的某个地方,你缺少一些东西。它可以是一个分号或一个收尾的大括号。总之,仔细检查代码。

我想明白了,我只是在int start()里面插入了你的函数,当我把它放在int start()外面的时候,一切都编译好了。问题是不同的,在测试器的可视化模式下,这个功能不能从EA获得数据到指标。

 
e-News-Lucky$.mq4

Lucky$ & KimIV

http://www.kimiv.ru

你好,伊戈尔!

我使用你的专家顾问,它非常好,我昨天试图通过iCustom 给它附加指标,但它没有看到它,如何通过 iCustom 规定它?我想知道像iHigh、 iLow 这样的内置功能可以顺利看到它,但它拒绝通过指标下挂单。

我把它像这样放在 当天 iHigh 和iLow条上。 这个 函数像预期的那样工作,下挂单,但不想用指标((....)下挂单 我想展示一下代码片段,如何在这个EA中通过指标下挂单? 该指标可以是任何东西,但不能是对 iCustom 函数的调用

如果你有时间,谢谢你。

//глобальные переменные

double Hi_Bar;
double Lou_Bar;

//+------------------------------------------------------------------+
//| Установка ордеров                                                |
//+------------------------------------------------------------------+
void SetOrders() {
  Hi_Bar  = iHigh(Symbol(), PERIOD_D1, 0);
  Lou_Bar =  iLow(Symbol(), PERIOD_D1, 0);
  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double pAsk= Hi_Bar+( DistanceSet+ spr)*Point;
  double pBid= Lou_Bar- DistanceSet*Point;