错误、漏洞、问题 - 页 1978

 
fxsaber:

铬。

FireFox仍然在顶部有更新的主题

和左边的蓝色。试试你的智能手机上的浏览器

 
STARIJ:
在FireFox中仍然在顶部更新主题

还有左边的蓝色的

在Chrome中也是如此。我无法让自己自动看到这些蓝色/灰色的图标。而未读主题的黑体字让人印象深刻,我甚至还写了这篇文章。

 
是否有人已经写信给服务台,或者也许知道MQ计划在MQL中增加友情链接?这是很缺乏的。
 

一个关于AcePrim-Demo账户的有趣案例。

我们启动专家顾问

// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
  return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
         TOSTRING(Result.retcode_external));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& Result )
{
  if (Request.action)
  {
    Print(ToString(Request));
    Print(ToString(Result));    
  }
}

而我们尝试在任何一个bo-symbol(二元期权)上建仓。在终端的日志中,我们得到

'3182780': market sell 1.00 XAUUSDbo
'3182780': failed market sell 1.00 XAUUSDbo [Invalid data]

在专家顾问的日志中,我们得到

Request.action = TRADE_ACTION_DEAL (1)
Request.magic = 0
Request.order = 0
Request.symbol = XAUUSDbo
Request.volume = 1.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_SELL (1)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0

Result.retcode = 4
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 9
Result.retcode_external = 0

我检查了一下,OrderCheck返回真。贸易会议是开放的等等。但是MT5以同样的方式警告手动和自动请求,给我retcode = 4。为什么会出现这样的情况,终端说一切正常,但你试了一下却什么也没发生?没有任何要求,我怎么知道它不会打开?那么这第四个返回代码是什么呢?

GetLastError()返回

误入歧途。

4756

发送交易请求失败


复制一切,没有任何问题。
 

下午好。

难道只有我一个人认为这样的代码不应该被编译(应该有一个私有成员访问错误)?

class cA;
class cB;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
   //====================
private:
   //====================
   //===============
   //===============
   cB               *B;
   //===============
   //===============
   void              testfunc(void){::Print(__FUNCSIG__);}
   //====================
public:
   //====================
   //===============
   //===============
   void              test(void)
     {
      ::Print(__FUNCSIG__);

      if(::CheckPointer(::GetPointer(this.B))==POINTER_INVALID)return;

      this.B.testfunc();   // Здесь идет вызов private метода объекта B, что вроде как не должно быть возможным
     }
   //===============
   //===============
   void              SetB(cB *const b){this.B=b;}
   //===============
   //===============
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cB  : public cA
  {

  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   cA A;
   cB B;

   A.SetB(&B);
   A.test();

//---
   return(INIT_SUCCEEDED);
  }

SD说没关系,它可以做到这一点...

 
Andrey Barinov:

下午好。

难道只有我一个人认为这样的代码不应该被编译(应该有一个私有成员访问错误)?

SD说没关系,它可以做到这一点...

根据MQL规则,一个类的实例可以自由访问另一个实例的私有字段和方法,如果它与第一个实例属于同一类别。由于cB是继承自cA,cB就是cA,因此cA可以访问cB实例的任何私有方法和字段,无论它在哪里声明。

 
Vasiliy Sokolov:

根据MQL规则,一个类的实例可以自由访问另一个实例的私有字段和方法,如果它与第一个实例属于同一类别。由于cB是继承自cA,cB就是cA,因此cA可以访问cB实例的任何私有方法和字段,无论它在哪里声明。

谢谢。我在文档中没有看到这一点。你能指出来吗?
 
Andrey Barinov:
谢谢你。我在文档中没有看到这一点。你能指出来吗?
它不在文档中,因为它是该语言的一个奇特的无文档 "功能"。这是非常奇怪和有争议的,但它还是以这种方式发生了。
 
Andrey Barinov:
谢谢你。我在文档中没有遇到过这个功能。你能指出来吗?

这在C++ 中也是如此(MQL是按照C++的形象和特征建立的)。正如他们所说,C++的隐私是在类层面,而不是在对象层面。否则,你将无法制作,例如,一个没有为所有私有字段提供特殊getter方法的复制构造器。

 
Stanislav Korotky:

这在C++ 中是一样的

你有没有试过用C++编译这个例子,还是只是一般的理论推理?
原因: