错误、漏洞、问题 - 页 1917

 

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

虫子、虫子、问题

fxsaber, 2017.06.15 10:08

为什么它能编译?
class A {};

class B : public A
{
public:  
  int i;
};

void OnStart()
{
  A* a = new B;
  
  ((B*)a).i = 1;
  
  dynamic_cast<B*>(a).i = 1;
  
  delete a;
}
Support Team 2017.06.29 12:04
为什么不应该编译呢?

A是B的祖先,所以转换可以是有效的,有效性被检查,如果对象转换不可能,则抛出异常,MQL程序终止。

与显式转换不同的是,dynamic_cast不会引发异常,而是返回NULL,在这种情况下程序将继续执行。
 
Vladimir Karputov:

将速度设置为从最大值减去三档--否则不能保证接口更新。

这个速度处于中间位置--那里离最大限度还有很长的路要走。
 
SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE)
由于某种原因,在测试器中总是返回0.0。

错误代码 也为0

 
Anton Ohmat:
由于某些原因,它总是返回0.0

错误代码 也为0

据我所知,这个东西只在莫斯科交易所工作。

 
请帮助!!!!!!!!在终端1090中没有显示 "一键交易 "按钮。我已经做了所有可能的事情。 我也在属性中勾选了方框。它没有被显示为线上开单!!!。该怎么做?
 
vati-vv:
请帮助!!!!!!!!在终端1090中,没有显示 "一键交易 "的按钮。我已经做了所有可能的事情,我也在属性中检查过了。它没有显示为线上开仓单!!。该怎么做?

您现在已经在MQL5部分发布了您的问题。对于旧的终端,您应该在MQL4和MetaTrader 4 部分发布您的问题。

建议检查你是否登录了交易服务器,因为快速交易面板只有在你实际登录了你的交易账户时才会显示。

 

你好,在mql5中,我使用以下方式来指定filling_mode

   if(SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE)==SYMBOL_FILLING_FOK)
     {
      tradeBuy.SetTypeFilling(ORDER_FILLING_FOK);
      tradeSell.SetTypeFilling(ORDER_FILLING_FOK);
     }

   else if(SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE)==SYMBOL_FILLING_IOC)
     {
      tradeBuy.SetTypeFilling(ORDER_FILLING_IOC);
      tradeSell.SetTypeFilling(ORDER_FILLING_IOC);
     }

   else
     {
      tradeBuy.SetTypeFilling(ORDER_FILLING_RETURN);
      tradeSell.SetTypeFilling(ORDER_FILLING_RETURN);
     }


在测试器中,EA打开了头寸,但大约有一个头寸没有打开,并出现不支持的填充模式的错误,我做错了什么?

 
Dmitry Melnichenko:

你好,在mql5中,我使用以下方式来指定filling_mode


在测试器中,EA打开了头寸,但有些头寸没有打开,并出现不支持的填充模式的错误,我做错了什么?


返回的不是一个单一的值,而是一个或两个的复合值--这就是为什么它可能导致错误的检查。

试试这样的结构。

//---
   if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK))
      m_trade.SetTypeFilling(ORDER_FILLING_FOK);
   else if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC))
      m_trade.SetTypeFilling(ORDER_FILLING_IOC);
   else
      m_trade.SetTypeFilling(ORDER_FILLING_RETURN);
...
//+------------------------------------------------------------------+ 
//| Checks if the specified filling mode is allowed                  | 
//+------------------------------------------------------------------+ 
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- Obtain the value of the property that describes allowed filling modes 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- Return true, if mode fill_type is allowed 
   return((filling & fill_type)==fill_type);
  }


补充:如果有帮助,请让我知道。

 
Vladimir Karputov:

返回的不是一个单一的值,而是一个或两个的复合值--所以你可能得到一个不正确的检查。

试试这个结构。


补充:如果有帮助,请让我知道。


谢谢你,但这并没有帮助,它仍然定期出现这个错误!

 

我如何知道一个对象的窗口/子窗口编号?我没有看到一个匹配的属性。