bool IsOrderType(int type)
{
switch (type)
{
case OP_BUY:
case OP_SELL:
case OP_BUYLIMIT:
case OP_SELLLIMIT:
case OP_BUYSTOP:
case OP_SELLSTOP:
return (true);
}
return (false);
}
哦,顺便说一下 -- 合理优化测试器中的工作 -- 我最近一直在使用它。
int FindLastOpenTime(int tip, int imagic)
{
int Res=-1;
int lOrderOpenTime=-1;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
if (IsTesting()) return (OrderTicket()); // тутif (lOrderOpenTime==-1) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
} elseif (lOrderOpenTime<OrderOpenTime()) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
}
}
return (Res);
}
顺便说一下,该函数被称为FindLastOpenTime,并返回一张票。
也许这样做更好?
datetime FindLastOpenTime(int tip, int imagic, int& ticket)
{
//...
}
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != imagic) continue; if (!(tip==-1 || isOrderType(tip))) continue;
维克多,我认为这里的切换更好--更快、更清晰。
哦,顺便说一下 -- 合理优化测试器中的工作 -- 我最近一直在使用它。
顺便说一下,该函数被称为FindLastOpenTime,并返回一张票。
也许这样做更好?
维克多,我认为这里的切换更好--更快、更清晰。
这真的比较清楚。
TheXpert:
顺便说一下,该函数被称为FindLastOpenTime,...
if (lOrderOpenTime<OrderOpenTime()) { lOrderOpenTime=OrderOpenTime(); Res=OrderTicket(); }它可能在-1时就开始工作,我不太清楚为什么它需要一个外部的if...else。返回,我认为,真正更好的是lOrderOpenTime,然后返回-1将允许捕捉错误。使用这种东西是否符合逻辑?
总是在循环操作数中杀死这种构造的逻辑。
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
见帮助。
continue 语句将控制权转移到最近的外部while 或for 语句的开头,导致下一个迭代的开始。这个运算符与break 相反。
这一点也不清楚,如果一个订单没有通过条件,那么该怎么办? 退出循环? 如果继续 操作符与中断 操作符直接相反......
对我来说,标准的逻辑更清晰,更容易理解。
2号穿刺。逻辑(logic)和简洁没有什么关联。
一个典型的例子就在MQL中,顺便说一下,许多人对使用MQL并不忌讳。
这不是逻辑 -- -- 这是对逻辑的谋杀。此外,它还是隐性错误的潜在滋生地。
不确定穿刺的位置?而为什么是第二个呢?如果是第二个,第一个在哪里?
对于那些没有办公室或拉链的人。
Dima为那些没有metaeditor.exe的人添加一些东西 :-)
维克多,再次祝贺你!