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为工具EIRUSD开了一个头寸,即使用另一个魔术师 按照不同的算法,第二个头寸也不会开。
请告诉我这是真的还是假的?
还是我的推理有误? 还是该函数逐一 评估了所有的标准 ...
我经常使用这个函数,它根据输入参数返回一切。该函数所经过的项目是按照参数顺序排序的。自己看吧。
因此,这意味着我的EA将无法打开第二个欧元兑美元的头寸,即使有另一个魔术师,只要第一个头寸是开放的?
显然是这样。因为即使在测试器中,它似乎也没有看到任何重叠的位置。
//--------------------------------------------------------
那么,这意味着我的EA将无法打开第二个欧元兑美元的头寸,即使它有另一个魔术师,而第一个头寸是开放的?
恰恰相反:)) 这意味着该函数会分别计算你的符号和魔法数字。也就是说,如果有一个欧元兑美元c Magic_1的未结头寸,那么NumberOfPositions("EURUSD", -1, Magic_2)==0; 当然,除非有另一个欧元兑美元的Magic_2的头寸。
一般来说,函数根据(sy && op && mn)来计算未结头寸,即头寸将完全按照这些参数来计算。如果至少有一个参数不匹配,这个函数将不考虑这个订单,也不会显示。
在Comment中打印函数值,你就能实时看到订单的数量和函数是否正常工作。最有可能的是,算法失灵的原因在EA代码中。
在函数调用中为符号添加绑定并没有帮助。为什么它分别计算每个头寸的利润(如上图)?
不,我宁愿提供给你我的画......
...和一个脚本...
不,我宁愿提供给你我的画......
...和一个脚本...
我已经意识到我是个傻瓜......你不能通过添加牛肉和牛奶来获得乳房。
安吉拉,编译器没有想到会在这个地方找到我的函数定义。这意味着在代码上面的某个地方,你缺少一些东西。它可以是一个分号或一个收尾的大括号。总之,仔细检查代码。
我想明白了,我只是在int start()里面插入了你的函数,当我把它放在int start()外面的时候,一切都编译好了。问题是不同的,在测试器的可视化模式下,这个功能不能从EA获得数据到指标。
Lucky$ & KimIV
http://www.kimiv.ru
你好,伊戈尔!
我使用你的专家顾问,它非常好,我昨天试图通过iCustom 给它附加指标,但它没有看到它,如何通过 iCustom 规定它?我想知道像iHigh、 iLow 这样的内置功能可以顺利看到它,但它拒绝通过指标下挂单。
我把它像这样放在 当天 的iHigh 和iLow条上。 这个 函数像预期的那样工作,下挂单,但不想用指标((....)下挂单 。 我想展示一下代码片段,如何在这个EA中通过指标下挂单? 该指标可以是任何东西,但不能是对 iCustom 函数的调用 。
如果你有时间,谢谢你。