新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 520

 
Vitaly Muzichenko:

这样的建设有什么危害?

还是把datetime 改为长类型更好?

到目前为止,我没有看到一个问题。
但是,人们显然渴望精确性(说得不好听一点,datetime比time_t大)。
而对于时间上的比较,它应该是比较长的。如果编译器优化了一些东西,它就会把它扔掉,而为未来留下一笔存款 :-)
 
Maxim Kuznetsov:
到目前为止,我没有看到一个问题。
但是有一个明显的趋势,那就是更加精确(datetime比time_t软性大)。
而且更有可能的是,这个长应该被用来比较时间。如果编译器优化了一些东西,它就会把它扔掉,并为将来留下一笔存款 :-)

所以你可以在不作弊的情况下使用它而不承担后果?

 
Vitaly Muzichenko:

所以你可以在不作弊的情况下使用它而不承担后果?

嗯,怎么可能没有后果呢 :-)

long x =TimeCurrent(); 已经在一家好公司得到了一个 "耳光":-)这些类型不仅在物理学上不同,而且在尺寸上也不同,你把一个较大的类型转换成一个较小的类型。

但是是的,所有来自(datetime)TimeCurrent的秒数似乎都适合于长的

 
Maxim Kuznetsov:

有一个很好的函数StringFind()--搜索出现的字符串 "#"或立即 "从#"。

发现
StringFind(OrderComment(),"to #",0)


以及我们如何处理它?

StringSubstr 中,一切都很清楚,你可以立即得到数字--票据,但是在StringFind 中,我们已经知道在注释中有"到#"

 
PolarSeaman:
发现


以及如何处理它?

StringSubstr 中一切都很清楚,我们立即得到了数字--票据,但是在StringFind 中,我们已经知道在注释中有"到#"

但我们不知道在哪里)。StringFind 将告诉我们,我们正在寻找的 "to #"是在这个位置还是根本不在那里。永远不要依赖来自网络的东西,而你个人/个人不控制它 :-)我们在这里玩钱--这很严肃。

 
Maxim Kuznetsov:

但不知道在哪里 :-)StringFind会告诉你,你要找的 "to #"正是来自这个位置,或者它根本就不存在。永远不要依赖来自网络的东西,而你个人/个人不控制它 :-)我们在这里玩钱--这很严肃。

需要从评论中突出该票,并扔掉 "to #"。

未结头寸 的票据与已结头寸的评论中的票据进行比较。

我们为什么要寻找"到#"?

 

StringSubstr 函数返回注释的右边部分。为什么这个函数会返回开仓的 利润,而不是平仓的利润?我正通过MODE_HISTORY

double prof_cl_pos(string sy="0", int op=-1, int mn=-1) {
  datetime ta;
  int      i, k=OrdersHistoryTotal();
  double profit_=0;
  string comment="";
  string substr="";

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              comment=OrderComment();
               substr = StringSubstr(comment, 4, 9);
              if (ticket_op_pos(Symbol(), -1,mn)==substr)
              profit_=OrderProfit();
            }
          }
        }
      }
    }
  }
  return(profit_);
}
 
Vitaly Muzichenko:

这样的建设有什么危害?

还是把datetime 改为长类型更好?

datetime是ulong - 你应该把它放在那里。
 
PolarSeaman:

该票应从评论中突出显示,"to #"应被 丢弃。

未结头寸 的票据应与已结头寸的评论中的票据进行比较

我们为什么要寻找"到#"?

我们寻找它是为了找出评论中的 "甚至有to#或from#"。如果没有,那么这个订单就不是封闭头寸的一部分,我们也不需要它。

如果StringFind(OrderComment(), "#to")大于或等于0,这意味着注释中包含了所寻求的子字符串,只有现在我们才能计算出票号在这个字符串中的位置。

 
PolarSeaman:

StringSubstr 函数返回注释的右边部分。为什么这个函数会返回开仓的 利润,而不是平仓的利润?我正在经历MODE_HISTORY

而这就是这个问题的答案。

关于交易、自动交易系统和策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

PolarSeaman, 2018.04.07 00:25

发现
StringFind(OrderComment(),"to #",0)


又该如何处理呢?

StringSubstr 中一切都很清楚,你得到的是数字--票据,但在StringFind 中,我们已经知道有"到#"的 注释了


但如果你不这样做,你会得到完全不同的东西。