5.2.1 未平仓单数量

5.2.1 未平仓单数量

找出EA开了多少交易单及其类型往往非常有用。我们会根据交易单类型,建立几个交易单计数功能,以计算目前未平仓单数。下面的功能用来计算未平仓单的总数:


我们已将交易单计数功能命名为TotalOrderCount( )。它会返回一个整数值,指出目前指定的图表符号上,符合以功能自变量传递的自定义数字的未平仓单有多少。

我们从声明OrderCount(交易单计数)变量开始。由于我们未指定初始值,OrderCount会以"0"初始化,你会认出上节的for运算符和OrderSelect( )功能吗?

交易单库既然有所有未平的交易单,包括其他EA下的那些单,我们有必要确定哪些交易单是我们的EA下的。我们先检查选定的交易单的OrderSymbol( ),确保其符合吨Symbol自变量,然后检查交易单的自定义数字。

如果OrderMagicNumber( )符合argMagicNumber自变量,我们就可以相当肯定,它是此EA所下的交易单。只要用户没在有相同自定义数字的相同货币符号上操作两个EA,就能肯定它是此EA所下的交易单。在同台机器上操作多个expert advisor 时,请小心确保你的每个EA都使用独特的自定义数字。

如交易单同时符合我们的自定义数字与图表符号, OrderCount(交易单计数)的值就加1。在回路通过交易单库中的所有交易单后,我们把OrderCount的值返回给调用功能。

这里提供如何在代码中使用此操作的例子:


如有此EA开仓的交易单,且CloseOrders的值为真(我们会假设程序某处已将此值设好),在大括号内的代码会执行将所有开仓的交易单平仓。

我们将交易单计数程序修改成只计算市价买单:



代码和之前的一模一样,除了加上了OrderType( )功能来检查目前选定的交易单类型。OP_BUY是表示市价买单的常数。要计算其他类型的交易单,只需以适当的交易单类型常数替代OP_BUY,并将此功能重新命名以反映交易单类型。

建议你就每种交易单类型建立交易单计数功能。你可在附录D中检视所有交易单计数功能的代码。