错误、漏洞、问题 - 页 2936

 
x572intraday:

结果。

什么是奇数未定数?在帮助中没有发现或搜索到。看起来不像是EMPTY_VALUE

某种意义上的垃圾。

设定值

int Arr[1]={0};
 
Vitaly Muzichenko:

一些垃圾

设定值。

不是为了实践,而是纯粹出于理论上的好奇心。另一个数字(9xxx--我记不清楚了)看起来更像是垃圾,而且只出现过一次,再也无法重现,而上面的数字是恒定的,不时地重复出现。(不知道你和其他人是否也是这样?)我不在乎,主要是其他程序员不要痛苦地跌倒在这里。

 
x572intraday:

这不是为了实践,而是纯粹出于理论上的好奇心。另一个数字(9xxx--我记不清楚了)更像是垃圾,它只出现过一次,再也不能重现了,而上面的数字是恒定的,不时地重复。(不知道你和其他程序员是否一样?)我不在乎,主要的是其他程序员不会痛苦地跌倒。

我有 "0",检查过几次了

 
Vitaly Muzichenko:

我得到一个0,检查了几次。

嗯...我不知道一种情况与另一种情况有什么关系,但我把它作为一个指标在不同的货币对上运行--数字的攀升是不同的(在每个仪器上,每个刻度 都重复相同的数字),甚至有一个零。这很奇怪。但看起来,如果不用自己的数字进行初始化,就真的是垃圾了。

 
x572intraday:

嗯...我不知道一种情况与另一种情况有什么关系,但我把它作为一个指标在不同的货币对上运行--数字的攀升是不同的(在每个仪器上,每个刻度 都重复相同的数字),甚至有一个零。这很奇怪。但看起来,如果不以自己的数字进行初始化,那就真的是垃圾了。

重新检查了一遍,按刻度插入了代码

在MT4中,它始终是0。

在MT5中是的,0是非常罕见的,数字是511026368。

 
x572intraday:

嗯...我不知道一种情况与另一种情况有什么关系,但我把它作为一个指标在不同的货币对上运行--数字的攀升是不同的(在每个仪器上,每个 刻度重复相同的数字),甚至有一个零。这很奇怪。但是,如果没有用自己的数字进行初始化,似乎就真的是垃圾了。

数组(以及所有其他变量)在创建时被分配了内存。如果数组没有被初始化,那么过去使用过的东西都会被留在那里=垃圾。

如果你不从程序中改变数值,这个内存就不会发生任何变化,垃圾保持其价值。

在MT4中,所有变量和数组都被强制初始化为0。

 

CExpert.TradeEventOrderTriggered()未被调用

当使用FORTS市场,BCS-Demo服务器时,当挂单被触发时,CExpert.TradeEventOrderTriggered()调用出现了一些不稳定。
MQL5标准库的 CExpert::CheckTradeState 方法的代码没有考虑到可能异步接收关于头寸、订单、交易和历史的信息。

1446://--- check triggering of a pending order
1447:   if(hist_ord_tot==m_hist_ord_tot+1 && ord_tot==m_ord_tot-1)
1448:     {
1449:      //--- triggering of a pending order
1450:      if(deal_tot==m_deal_tot+1)

当代码在历史数据上执行时,这些条件都能正常工作。在处理真实数据时,可能会出现这样的情况:关于头寸、交易、订单和历史的变化信息不是在同一时间获得的,而且获得信息的顺序是随机的。

bool CExpert::CheckTradeState(void)方法的调用日志。一个CheckTradeState()的调用对应着2行"CheckTradeState: ....."

//Сработал отложенный ордер открытия позиции
CheckTradeState: hist_ord_tot = 613 ord_tot = 0 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 613 m_ord_tot = 1 m_deal_tot = 543 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 614 ord_tot = 1 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 614 m_ord_tot = 1 m_deal_tot = 544 m_pos_tot = 1

//Сработал отложенный ордер открытия позиции 
CheckTradeState: hist_ord_tot = 615 ord_tot = 1 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 545 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 615 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 546 m_pos_tot = 1
CheckTradeState: hist_ord_tot = 616 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 616 m_ord_tot = 0 m_deal_tot = 546 m_pos_tot = 1

你可以从日志中看到:
1.当挂单触发时,历史长度的更新晚于交易、订单和头寸的信息,这导致无法满足代码中的第一个条件。
2.在接收有关订单、交易和头寸数量变化的信息时可能不同步,这导致不可能满足代码中的第二个条件(如果你能以某种方式绕过第一个问题并执行第一个if)。也许这种不同步发生在一个订单分两步执行时(分批执行:1手+1手),但在这种情况下,为什么交易数量是+1,而不是+2。

我被这个代码卡住了。

//--- establishment of the checkpoint history of the trade
   bool isSyncMode = MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_VISUAL_MODE);
   if(!isSyncMode)
      HistorySelect(m_beg_date,TimeCurrent());
   else
      HistoryPoint(true);
//---
   return(res);

块的要点:如果在异步模式下,我们已经到了程序的末尾,那是可能的,当历史没有加载时,我们获取历史,但我们没有记住订单数量的值,等等。

P.S. 似乎标准库的这一部分还没有被开发出来。特别令人不安的是一个连续写了3次的代码片段。

1458: res=TradeEventOrderTriggered();
1459: //--- establishment of the checkpoint history of the trade
1460: HistoryPoint(true);
1461: return(res);

我在这里写道,希望这个问题能被注意到,并在某处得到纠正。

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
看了一下市场中EX5 EA文件的大小。我所看的所有的都在200Kb以下。是什么让你达到如此小的尺寸?一个简单的代码?
 
fxsaber:
我看了一下市场上EX5专家顾问文件的大小。所有这些都小于200KB。是什么让你能达到如此小的尺寸?一个简单的代码?

我认为作者是天才,90%的顶级卖家对平台完全没有疑问--所以他们写代码时有一种自然的本能 ))))


问题就在这里。

我正在插入数据。

#resource "Common\\Files\\EURUSD_tick.bin" as const MqlTick HistoryData[]

我得到一个错误。

没有找到资源文件'Common/FilesEURUSD_tick.bin'。

无法打开资源文件 .....\\\\MQL5\Experts\Virtual\Common\Files\EURUSD_tick.bin' (3)

如果我把文件放在EA文件夹或Files文件夹中,一切都很正常。


有没有可能是资源不能从Common文件夹挂载?-或者我需要指定另一个路径吗?

 
Igor Makanu:

我认为作者是天才,90%的顶级卖家对平台完全没有疑问--所以他们用先天的知识编写代码 ))))

对于其他账户的问题。

你不能从Common文件夹连接资源?-或者你需要另一种方式来开处方?

我不知道。

原因: