错误、漏洞、问题 - 页 2138

 

我认为上传的历史有问题。

昨天我等了大约30分钟,然后我改变了我的账户,今天我决定仔细检查。


  1. 我开了一个卢布账户RUR
  2. 在测试器中,我正在运行对欧元兑美元的测试
  3. 终端正试图加载EURRUR的报价
  4. 没有报价,测试者冻结了



我挣扎了一下,然后决定下载历史记录,这并不存在。

2018.02.21 15:58:48.244 Tester  EURRUR: history data begins from 2018.02.21 00:00
2018.02.21 15:58:48.344 Tester  USDRUR: preliminary downloading of M1 history started
2018.02.21 15:58:49.244 Tester  USDRUR: 20% history downloaded
2018.02.21 15:58:49.544 Tester  USDRUR: 30% history downloaded
2018.02.21 15:58:49.844 Tester  USDRUR: 40% history downloaded
2018.02.21 15:58:50.144 Tester  USDRUR: 51% history downloaded
2018.02.21 15:58:50.444 Tester  USDRUR: 61% history downloaded
2018.02.21 15:58:50.657 Tester  USDRUR: 71% history downloaded
2018.02.21 15:58:51.057 Tester  USDRUR: 81% history downloaded
2018.02.21 15:58:51.357 Tester  USDRUR: 91% history downloaded
2018.02.21 15:58:51.657 Tester  USDRUR: preliminary downloading of M1 history completed in 0:03.417
2018.02.21 15:58:51.657 Tester  USDRUR: history data begins from 2016.12.26 00:00
2018.02.21 15:58:51.661 Core 1  agent process started
2018.02.21 15:58:52.095 Core 1  connecting to 127.0.0.1:3000
2018.02.21 15:58:52.095 Core 1  connected
2018.02.21 15:58:52.103 Core 1  authorized (agent build 1755)
2018.02.21 15:58:52.105 Tester  EURUSD,H1 (Alpari-MT5-Demo): testing of Experts\Exp - TickSniper PRO FULL v36 20180220.ex5 from 2018.01.01 00:00 to 2018.02.10 00:00
2018.02.21 15:58:52.891 Core 1  common synchronization completed
2018.02.21 15:58:53.064 Tester  quality of analyzed history is 100%
2018.02.21 15:58:54.393 Core 1  EURRUR: history synchronization started



在美元兑日元上是可以的

 

这是个愚蠢的情况,自定义字符栏。我可以向历史记录(CustomRatesReplace)写入任意多的条数,但我不能在这里(TERMINAL_MAXBARS)读取它们(CopyRates)。

我们必须以某种方式解决这种错误的情况。很高兴看到地方历史的开始,通过

SeriesInfoInteger(_Symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE);

但要想得到它。

也许有可能通过MQL改变TERMINAL_MAXBARS?或者使CopyRates的重载没有MaxBars的限制?

 

注意到MT5的这种行为已经很久了,但现在决定要写。

我在ME和MT5+测试器中工作。有时我无法连接到代理,需要重新启动终端。我已经习惯了这个错误,所以这与它无关。

因此,我关闭了终端,并在ME中按下F4来打开终端。而这正是一些无稽之谈的开始。

ME数次进入 "无响应 "状态。终端不启动。几秒钟后,我再次按下F4--反应与之前一样。

结果,在不弱的机器上(内存充足,SSD,95%的CPU空闲),20秒(最少)就能启动终端。

如果你把它与MT4相比--它就是天堂和大地。MT4几乎是由F4从ME瞬间启动。MT5 - 它的启动就像一些超级原始的应用程序。

 
fxsaber:

这是个愚蠢的情况,自定义字符栏。我可以向历史记录(CustomRatesReplace)写入任意多的条数,但我不能在这里(TERMINAL_MAXBARS)读取它们(CopyRates)。

我们必须以某种方式解决这种错误的情况。完美地看到当地历史的开始,通过

但要想得到它。

也许有可能通过MQL改变TERMINAL_MAXBARS?或者使CopyRates的重载没有MaxBars的限制?

SD认为,当你不能让报价历史超过MaxBars时,就没有问题了。这个例子(许多情况下,所需的历史记录已经在本地机器上,这是其中之一)

假设是为了节省资源而设置的限制。而且是正确的!

让我们想象一个市场产品,它的目的是计算等值线统计。

事实证明,用户在应用这个产品之前,将不得不做UnlimitBars。而在应用之后--要把它退回去。

不以为然。拐杖保持活力!

 

指示器在启动终端时 不总是返回ACCOUNT_LOGIN

0 11:00:01.880 自定义指标测试器EURUSD,H1:加载成功
0 11:00:01.887 tester EURUSD,H1: OnInit 0 < ---- AccountInfoInteger(ACCOUNT_LOGIN) returned 0
0 11:00:01.887 tester EURUSD,H1: 已初始化
0 11:00:01.887 tester EURUSD,H1: OnCalculate 0 < ---- AccountInfoInteger(ACCOUNT_LOGIN) returned 0
0 11:00:05.980 tester EURUSD,H1: OnCalculate 0 < ---- AccountInfoInteger(ACCOUNT_LOGIN) returned 0
0 11:00:06.654 tester EURUSD,H1: OnCalculate 0 < ---- AccountInfoInteger(ACCOUNT_LOGIN) returned 0
0 11:00:07.030 tester EURUSD,H1: OnCalculate 442394 < ---- AccountInfoInteger(ACCOUNT_LOGIN)返回帐户号码
0 11:00:07.040 tester EURUSD,H1: OnCalculate 442394 < ---- AccountInfoInteger(ACCOUNT_LOGIN)返回帐户号码

源代码

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   string text=IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN));
   Print("OnInit "+text);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   string text=IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN));
   Print("OnCalculate "+text);
   return(rates_total);
  }
//+------------------------------------------------------------------+

我可能是错的,但在我看来,如果不知道账户号码,任何程序都无法工作.....。

 
Vladimir Pastushak:

我可能是错的,但在我看来,如果账户号码不知道,任何程序都无法工作,.....。

我从不在EA和指标中使用账户号码,除了报告交易。

但我同意,即使是脱机,账号(终端关闭前的最后一次连接)也应始终可用。

 
fxsaber:

我从不在EA和指标中使用账户号码,除了报告门。

但我同意,即使是离线,账户号码(终端关闭前的最后一次连接)也应始终可用。

网上也是如此。你总是需要知道和了解在哪个账户下发生了什么,在什么时候发生。

如果你不知道是为哪个账户做的事情,你怎么能运行一个程序。

这不是 "sharash montash",人们可能在他们的账户上有数百万的资金....。

 
Vladimir Pastushak:

网上也是如此。你总是需要知道和了解在哪个账户下发生了什么,在什么时候发生。

如果你不知道是为哪个账户做的事情,你怎么能执行一个程序。

这不是一个 "sharash montash",人们可能在他们的账户上有数百万美元,在这里....。

99%的EA都不分析账户号码

 
fxsaber:

99%的顾问不分析账户号码

因为99.99%的EA是 "sharash montash" ....

我确信,每一个高质量的EA都应该保留自己的操作日志,无论是在操作过程中还是在卸载EA时,用户都应该按要求获得操作日志。在关键错误的情况下,它是强制性的!

我所说的关键错误是指断开连接、重新报价、代码缓慢。

 
Vladimir Pastushak:

因为99.99%的EA是 "sharash montash" ....

我写的正是这类顾问。