错误、漏洞、问题 - 页 2137

 

阅读利润时出错(或者我已经误解了什么)。

EA内部有一个职能部门。

bool Fn_profit_summ(double &profit_summ, bool is_buy, ulong magic, bool prnt=false){
   profit_summ = 0;
   string str=(is_buy?"B":"S")+" -> "; 
   //-----------------------------             
   int total = PositionsTotal();          
   for(int i=total-1; i>=0; i--){
      const ulong tic= PositionGetTicket(i); if(tic<=0)     return(false); //--- asinchr
      if(!PositionSelectByTicket(tic)                   )   return(false); //--- asinchr 
      bool is_buy_ = (PositionGetInteger(POSITION_TYPE  )==POSITION_TYPE_BUY); 
      if( is_buy_                             !=  is_buy)   continue; 
      if( PositionGetInteger(POSITION_MAGIC ) !=  magic )   continue;
      if( PositionGetSymbol (POSITION_SYMBOL) != _Symbol)   continue;
      profit_summ += PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
      str+=IntegerToString(tic)+" - "+DoubleToString((PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)), 2)+"/";
      }
   //-----------------------------
   if( prnt) Print(str+" --> "+DoubleToString(profit_summ, 2));
   return(true);}

我可以在日志中看到。

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

那是可以的,但这是一个买单的利润,而不是卖单

该票据正是卖出订单(273,与日志中一样)。


我想我在函数中检查了,同样的类型被认为是正确的,但利润真的不一样。如果这是真的,那么这就是天启--客户在达到指定的利润/亏损时分别关闭卖出和买入头寸,它不断地关闭卖出,因为它获得了买入利润。同样的方式,存款可能在不知不觉中被抽走

(如果我工作过度,已经在想象事情了--请纠正我。我真诚地希望这是真的,不存在这样一个关键的错误)

 
Galina Bobro:

阅读利润时出错(或者我已经误解了什么)。

EA内部有一个职能部门。

我可以在日志中看到。

那是可以的,但这是一个买单的利润,而不是卖单

该票据正是卖出订单(273,与日志中一样)。


我想我在函数中检查了,同样的类型被认为是正确的,但利润真的不一样。如果这是真的,那么这就是天启--客户在达到指定的利润/亏损时分别关闭卖出和买入头寸,它不断地关闭卖出,因为它获得了买入利润。同样的方式,存款可能在不知不觉中被抽走

(如果我工作过度,已经在想象了--请纠正我。我真诚地希望这是真的,不存在这样一个关键的错误)

string str=(! is_buy?"B":"S")+" -> ";
 
Kirill Belousov:
这是什么情况?我为什么要 "如果再见撤回S"?
 

我经常使用自定义的字符。例如,我需要对其中的一个进行调试。这需要在这里输入其名称


但是,自定义字符的名称(不仅仅是自定义字符)可能很长/很复杂,这使得人们很难从键盘上输入它们。将符号的名称复制到缓冲区的机制无处可寻。因此,我建议在这个菜单项中增加 "复制符号名称"。


ZZY 请在测试器展示台上增加毫秒数。

 
fxsaber:

ZS 请在测试器展示台中增加毫秒数。

添加

 

执行过程中出错

struct A {
template<typename T>
        void Print(   T t ) { ::Print( 2 ); }
        ~A() { Print( 1 ); }
};
void OnStart() { A a; }

结果 : 1

预期 : 2

 
A100:

预期: void A::Print<int>(int):1

这很可能是由于普通印刷品的狡猾性质。你也可以用同样的方式重载iCustom。我认为这将产生同样的结果。

打印、评论、警报、iCustom、...的命名空间。- 似乎有些特别。

 
fxsaber:

最有可能的是与内部印刷的棘手性质有关。

没有关系。

void Print2( int )           { Print( 1 ); }
struct A {
template<typename T>
        void Print2(   T t ) { Print( 2 ); }
        ~A() { Print2( 1 ); }
};
void OnStart() { A a; }

同样的结果。

 

自定义符号 的SymbolInfoTick产生一个空的tick(当没有CustomTicksAdd时),即使在历史上有ticks。

我建议在终端方面,在任何CustomTicksReplace之后,历史中的最后一个tick(或只是它的时间)应该是一个SymbolInfoTick。


请就这个问题向开发者提出建议,这个动作在逻辑上应该挂在谁身上--终端还是用户?

我认为是终端,因为它可以使用户免受他的代码中偶尔出现的错误的影响(抓住了一个)。

现在,例如,最近要找到一个符号,就像这样

  ulong GetOriginalLastTime( void ) const
  {
    MqlTick Tick[1] = {0};

    ::SymbolInfoTick(this.Symb, Tick[0]);
    
    if (!Tick[0].time_msc)
      ::CopyTicks(this.Symb, Tick, COPY_TICKS_ALL, 0, 1);

    return(Tick[0].time_msc);
  }
 
A100:

没有关系。

其结果是一样的

是的,这是个错误。我从未遇到过这种情况,因为我总是把这归因于方法。