帮助添加MaxTradesPerBar到EA - 页 2

 
serpentsnoir:

megamixx。

如果你还在外面,我可以建议你修改一些代码,以达到你所要的目的。如果你仍然感兴趣,请告诉我。

然后重新编译,以确保它没有错误。当你有了这个,请告诉我,我会把下一步的修改粘贴出来。

得到了,并且编译成功了,谢谢sn。
 
megamixx:

得到了,并且编译成功了,谢谢sn。


好的,很好。

接下来,有一个这样的代码块

int openPositions()
{
//... blah...
}

复制整个代码块,紧接着粘贴,并将其重命名为OpenTradesOnThisCandle。

然后,重新编译,确保它没有错误。

我现在要去工作了,所以你要晚点才会收到我的消息。 如果你被卡住了,请把修改的内容贴出来。

 

复制了这个块并重新命名,现在它看起来像这样。

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i-)// 扫描所有订单和头寸...
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol() ==Symbol() )
{
if ( OrderType() == OP_BUY ) op++;
if ( OrderType() == OP_SELL ) op++;
}
}
return(op);
}

希望我做得对sn。我编译了,没有错误,但有警告。

函数"OpenTradesOnThisCandle "没有被引用,将被从exp-file中删除
0个错误,1个警告

 

很好。这条信息只是一个警告,很快就会消失。

现在,在你创建的新子程序中,将看到MODE_TRADES的那一行改为MODE_HISTORY。

现在将两个if语句中的OrderType()替换成这样

if (OrderOpenTime() > Time[0]) op++;

当你有了这个(你会得到同样的警告),编译它以确保它没有错误。

 
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
  1. 什么是函数的返回值?我如何使用它们?- MQL4论坛
  2. 如果在循环中存在任何服务器调用,你必须倒计时 检查返回代码 循环和关闭或删除订单 - MQL4论坛
 

这就是该块现在的样子。

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i--) // 扫描所有订单和头寸...
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)。
如果(OrderMagicNumber()!=MagicNumber)继续。
如果 ( OrderSymbol()==Symbol() )
{
如果 (OrderOpenTime() > Time[0]) op++;
如果 (OrderOpenTime() > Time[0]) op++;
}
}
return(op)。
}

已编译,0个错误,1个警告

 

嗨,Megamix。

我没有从头读过这个主题,但是......

1.在发布代码时使用SRC按钮

2.OrderSelect()的返回值是真或假,所以这是OrderSelect()的正确写法。

int OpenTradesOnThisCandle( )
  { 
  int op =0;
  for(int i = OrdersTotal() - 1;i >= 0; i-- ) // scan all orders and positions...
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true   // if order select is true ...
        && OrderMagicNumber() != MagicNumber                  // ... and magic number is our magic number ...
        && OrderSymbol()      == Symbol() )                   // ... and symbol is chart symbol
        { 
        if (OrderOpenTime() > Time[0]) op++;             
        if (OrderOpenTime() > Time[0]) op++; 
        }
    } 
    return(op);
  }

:D

 
onewithzachy:

嗨,Megamix。

我没有从头读过这个主题,但是......

1.在发布代码时使用SRC按钮

2.OrderSelect()的返回值是真或假,所以这是OrderSelect()的正确写法。

:D


谢谢你关于发布代码的提示。这很有意义。至于第2点,我会听从sn的意见,因为他正在指导我完成这些步骤,我不想搞砸他的过程。非常感谢!

 
megamixx:


谢谢你关于发布代码的提示。这很有意义。至于第2点,我会听从sn的意见,因为他正在指导我完成这些步骤,我不想搞砸他的过程。非常感谢!


onewithzacky是正确的,检查 返回代码是一个好习惯。

if (OrderOpenTime() > Time[0]) op++; <<==这只需要出现一次。所以要去掉一个。

接下来要做的是找到这段代码,并将其复制到下面。

     if(TradesInThisSymbol > 0) 
     {
      return(0);
     }

然后改变

(TradesInThisSymbol > 0)

改为

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

然后编译 - 错误应该消失。

 
serpentsnoir:


我们现在将保持简单。onewithzacky是正确的,检查返回代码是一个好习惯。

if (OrderOpenTime() > Time[0]) op++; <<==这只需要在那里出现一次。 所以拿掉一个。

接下来要做的是找到这段代码并将其复制到下面。

然后改变

(TradesInThisSymbol > 0)

改为

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

然后编译 - 错误应该消失。


完成了。

删除重复的如果(OrderOpenTime() > Time[0]) op++。

并发现和改变了

(TradesInThisSymbol > 0)

改为

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

非常感谢您在这方面的帮助。