错误、漏洞、问题 - 页 2470

 
Igor Zakharov:

所以它不是在几秒钟内...

这就是语言描述首先要做的事情。

而不是在那些你必须搜索的文章中。你应该在论坛上寻找的最后一件事就是这个。

否则,它看起来是这样的:我在书中寻找,但我看到一个图...

 

为什么会出现这种情况?

IM      0       17:19:04.403    Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG      0       17:19:04.403    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

我今天发现,工具规格中的最小体积是100,步长也是100。但是,它没有开仓,出现"无效量"的错误。 如果我设置0.01,按钮就不活跃。

将版本改为 "年轻 "版本。

KK      0       17:35:14.046    Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE      0       17:35:14.046    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

没有变化。

然后用发布的版本替换了它。

FI      0       17:37:23.049    Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS      0       17:37:23.049    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

而这就是结果。



为什么它只发生在一家公司身上?如果它是普遍的,问题早就解决了。

我应该向公司的支持发送什么方向?


补充:非常奇怪的是,2025年的build在同一个公司的cent账户上运行良好。所有的工具参数都是它们应该有的样子。

你可以在美分上进行交易。我自己想出来了......但我想要更多。

 
Ilyas:

谢谢你的留言。
这是一个粗制滥造的问题,我们会解决的。

@Ilyas,NonPOD结构也有类似问题。

struct NonPod{
   uchar data[];
};   
   
void OnStart(){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
有没有人知道,除了等待一个对类的命名空间支持的新版本外,如何绕过这个限制。
template<typename T>
class TestTypedef{
public:
   typedef void (* callback)(T &);    // 'callback' - identifier already used
   callback eq;
};


void ff(int&) {Print(__FUNCSIG__);}

void OnStart(){  

   TestTypedef<int> int_value;
   int_value.eq = ff;
   
   int x = 5;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

类型化 功能中的全局命名空间声明区的问题

 
MT5 (build 2057)

在typedef中重复使用同一函数签名时出现编译错误
typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart(){
   callback func_ptr = test_func;  //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik:
MT5 (build 2057)

禁止在typedef中重复使用相同的签名的错误。

而我有一个 两年多前的基本类似的脚本,给出了2056x32的结果:EX5加载失败

 
Sergey Dzyublik:
有没有人知道,除了等待一个对类的命名空间支持的新版本外,如何绕过这个限制。

编译

void f(int&) {}
void OnStart()
{
   TestTypedef<int> int_value;
   TestTypedef<string> string_value;

它是可能的(甚至会起作用),但不能超过这个范围:那么,我们说,你不能编写

   int_value.eq = f;
}

所以不要写如何

 
A100:

编译,所以不要写如何

不,它几乎不起作用,但它确实起作用...
bool类型 在例子中的typedef中丢失了。

#define PRINT(x) ; Print(#x, ":", string(x))

#define  CREATE_TestTypedef(type)                              \
class TestTypedef_##type{                                     \
public:                                                       \
   typedef bool (* callback_##type)(type &);                  \
   callback_##type  eq;                                        \
}
   
bool f(int&) {return true;}


void OnStart(){
   CREATE_TestTypedef(int) int_value;
   CREATE_TestTypedef(string) string_value;                     
   
   int data = 5;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
直到类型定义修复和命名空间更新(如果有的话)发布。
我们将不得不通过宏来分别声明每种类型的使用,然后使用宏来获得生成的类的名称,以创建一个类对象......
 

解释一下为什么当我创建CChartObjectLabel 时,在这段代码中,在去初始化时没有删除指标中的对象。

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreateLabel(LabelUP,"LabelUP",0);
   CreateLabel(LabelDN,"LabelDN",30);
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l,string name,int y)
  {
   l=new CChartObjectLabel;
   l.Create(0,name,ChartWindowFind(),0,y);
   l.Color(clrYellow);
   l.FontSize(14);
   l.Description(name);
  }
//+------------------------------------------------------------------+

当切换TF时,我得到了日志记录:2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 剩下2个CChartObjectLabel类型的对象。

如果在OnInit()中取消文本标签的创建(CChartObjectLabel),那么一切都会正常工作。

CreateLabel()函数传递了一个 指针,但我不能在之后OnDeinit()中删除它

原因: