for(int h = OrdersTotal()-1; h >= 0; h--) // Начинаем цикл перебора ордеров
{
if(OrderSelect(h, SELECT_BY_POS)) //Выбираем ордер с индексом h
{
if((cnt_OO >= 2))//Если cnt_OO больше либоравно 2 выполняем блок иначе переходим к Метке 1
{
if((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus))//Если мейджик выбраного ордера совпадает и лотность совпадает с Lots/Prikup - Dplus//(если переменные типа double необходимо обязательно нормализовать) выполняем блок иначе переходим к команде continue
{
Nextstep = NextStep;
BaseNext = OrderOpenPrice();
LotsNext = NormalizeDouble(OrderLots()*K,lotDigit);
if(NewPB > 0)
PBcloseON = true;
Alert ("Pospedny Order NEXT ",OrderTicket());
Alert ("Otkritih orderov ",cnt_OO);
break; //Прерываем цикл
}
continue; //Вернёмся в цикл за следующим ордером если предыдущий не прошёл проверку
}
//Метка 1
LotsNext = NormalizeDouble(Lots*Prikup,lotDigit);
Alert ("Otkritih orderov NEXT net ");
Alert ("Otkritih orderov ",cnt_OO);
break;// Прерываем цикл
}}
第一个问题Lots/Prikup - Dplus 必须被归一化。 仔细阅读一下。 如果变量是双倍型的,你会很惊讶,如果4/2给出的不是预期的2,而是1.999999999999 - 你可能还没有面对过这个问题。
因此,如果((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) 是假的,而且我可以大概率地说,它是假的,那么即使你的cnt_OO大于1,你也能保证来到标签1之后的区块。 所以一切与你无误,问题在于数据处理逻辑。
第二个问题是,你可以保证只处理列表中的最后一个订单,所以为什么要用for循环呢?
如果你只为测试者这样做,然后从列表中选择最后一个订单,你真的会得到需要的订单,而且不一定。在真实的市场上,特别是如果有几个专家顾问在运行,你保证会得到与你预期不同的东西,而且在使用break命令的第一遍后,循环保证会中断。
第一个问题Lots/Prikup - Dplus 必须被规范化。 仔细阅读它。 如果变量是双倍类型的,你会惊讶地发现4/2给出的不是预期的2,而是1.999999999999 - 你可能还没有面对过这个问题。
因此,如果((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) 是假的,而且我可以大概率地说,它是假的,那么即使你的cnt_OO大于1,你也能保证来到标签1之后的区块。 所以一切与你无误,问题在于数据处理逻辑。
第二个问题是,你可以保证只处理列表中的最后一个订单,所以为什么要用for循环呢?
如果你只为测试者这样做,然后从列表中选择最后一个订单,你真的会得到需要的订单,而且不一定。在真实的市场上,尤其是在有几个专家顾问在运行的情况下,你保证会得到与你预期不同的东西,而且循环会在第一遍之后中断。
第一个问题Lots/Prikup - Dplus 必须被规范化。 如果变量是双倍 的,你会很惊讶,如果4/2得出的不是预期的2,而是1.999999999999,也许你还没有遇到这个问题。
因此,如果((OrderMagicNumber() == Magic)&&(OrderLots() <= Lots/Prikup - Dplus)) 是假的,而且我可以大概率地说,它是假的,那么即使你的cnt_OO大于1,你也能保证来到标签1之后的区块。 所以一切与你无误,问题在于数据处理逻辑。
第二个问题是,你可以保证只处理列表中的最后一个订单,所以为什么要用for循环呢?
如果你只为测试者这样做,然后从列表中选择最后一个订单,你真的会得到需要的订单,而且不一定。在真实的市场上,特别是如果有几个专家顾问在运行,你保证会得到完全错误的订单,而且循环会在第一遍之后的中断命令中中断。
至于规范化--谢谢,我没有注意到它的缺失。我的眼睛只是在我的头脑中迷失了。
关于for循环:在档案中,有不同的法师和来自不同对的不同订单。我从头到尾看了一遍,直到找到我需要的那个。这发生在EA还没有开始工作的时候,我需要的新订单出现在列表中。循环不是在第一遍时中断,而是在找到所需的顺序时中断。
我们必须正确理解函数Onlinit和OnDeinit。它们的必要性是显而易见的。
在这个实现中,循环不工作。我在不同的变体中运行了你的代码,总是一次通过。
现在很清楚你在什么地方犯了错误了!
我尽可能多地评论了所有的东西!试试吧!
在这个实现中,循环不工作。我在不同的变体中运行了你的代码,总是一次通过。
现在很清楚,你在哪里犯了错误!
我尽可能多地评论了所有的东西!试试吧!
谢谢,我知道了。这里有一个解决缺乏规范化的错误的方法。经过对恢复算法的仔细检查,Condition&&(OrderLots() <= Lots/Prikup - Dplus)似乎是不必要的。
谢谢大家的好建议
下面是测试的结果。在真实的情况下也差不多,甚至更好。提前警告--这不是一个马汀格尔。这比你想象的还要糟糕:=)。缩减1.3%的利润 507美元
如果成功了,而且你不介意分享结果--写一个解决问题的方案
它没有工作(我使用了php openssl库)。以不同的方式解决了这个问题。
没有工作(我使用了php openssl库)。以不同的方式解决了这个问题。
所以你最后是在MT中加密,在.php中解密?你用的是哪种方式?
所以你最后是在MT中加密,在.php中解密?你用的是什么方法?
不,我告诉你它没有用。我放弃了这个想法。对于我的任务来说,一个哈希已经足够了。我正在发送和接收哈希值,并返回另一个哈希值作为确认。
所以我无法在PHP中解密。如果有人能认真研究这个问题就好了。也许是一个开发者或其他什么。
不,我写的是,它没有发挥作用。我放弃了这个想法。对于我的任务来说,一个哈希已经足够了。我发送并接收了一个哈希值,并返回另一个哈希值作为确认。
所以我无法在PHP中解密。如果有人能认真研究这个问题就好了。也许是一个开发者或其他什么。
在puch中编写你自己的加密函数,并把它移到mq中。这样他们就不会解密,而且无论哪种方式都能100%地发挥作用。
如果成功了,而且你不介意分享结果,请公布解决方案
google "PKCS#7的填充格式"