初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1159

 
Vladimir Karputov:
你确定交易所在夜间对所要求的符号有效吗?

我不强迫终端在一个特定的时间给我发送刻度线,因为它没有,我只是发送一个请求。

from=0,//要求的刻度线的日期

count=0// 要接收的刻度线的数量

而且它向我发送了历史本身,不是吗?

 
VANDER:

我不强迫终端在一个特定的时间给我发送刻度线,因为它没有,我只是发送一个请求。

from=0,//要求的刻度线的日期

count=0// 要接收的刻度线的数量

而且它向我发送了历史本身,不是吗?

如果所请求的符号的交易被关闭(例如是晚上)--所请求的符号的点数将从哪里来?
 

检查了一下,对于专家顾问正在运行的主要符号RTS-12.19,最后一个tick是在23:59:30,SBRF-12.19是在23:52:21,所以它不能下载tick?

而SymbolInfoTick函数是如何有趣地帮助他开窍的呢?

 
VANDER:

检查了一下,对于专家顾问正在运行的主要符号RTS-12.19,最后一个tick是在23:59:30,SBRF-12.19是在23:52:21,所以它不能下载tick?

而帮助他理解的SymbolInfoTick函数又是多么有趣?

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

初学者的常见问题 MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.12.08 13:20

如果所请求的符号的竞价被关闭(例如是晚上)--所请求的符号将从哪里获得其点数?

 
VANDER:

检查了一下,对于专家顾问正在运行的主要符号RTS-12.19,最后一个tick是在23:59:30,SBRF-12.19是在23:52:21,所以它不能下载tick?

那么SymbolInfoTick函数是怎样的呢?

这里是EA。

//+------------------------------------------------------------------+
//|                                                  CopyTicks_1.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.100"
#property description "Сравнение трёх режимов получения тиков"
//--- input parameters
input string   name  = "RTSSiZ9";      // символ по которому запрашиваем тики
input int      ticks = 3000;           // количество запрашиваемых тиков
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  SymbolSelect(name,true);
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- массив для приема тиков
   MqlTick ExTicks[];
//--- запросим тики
   ResetLastError();
   int copied=CopyTicks(name,ExTicks,COPY_TICKS_ALL,0,ticks);
//--- если тики получены, то выведем на график значения Bid и Ask
   Print("Получено тиков: ",copied," код ошибки: ",GetLastError());
   if(copied>1)
     {
      Print("Тик: ",ExTicks[0].time," bid: ",ExTicks[0].bid," ask: ",ExTicks[0].ask," last: ",ExTicks[0].last," [0]");
      Print("Тик: ",ExTicks[copied-1].time," bid: ",ExTicks[copied-1].bid," ask: ",ExTicks[copied-1].ask," last: ",ExTicks[copied-1].last," [",copied-1,"]");
     }
  }
//+------------------------------------------------------------------+

在RTSSRZ9上运行(这是SBRF-Dec19)--这里是设置。


要求在RTSSiZ9中的ticks(这是Si-Dec19)。

结果。

2019.08.30 07:00:00   Получено тиков: -1 код ошибки: 4004
2019.08.30 07:00:01   Получено тиков: 2 код ошибки: 0
2019.08.30 07:00:01   Тик: 2019.08.30 07:00:00 bid: 22552.0 ask: 22697.0 last: 0.0 [0]
2019.08.30 07:00:01   Тик: 2019.08.30 07:00:01 bid: 22552.0 ask: 22697.0 last: 0.0 [1]
2019.08.30 07:00:02   Получено тиков: 3 код ошибки: 0
2019.08.30 07:00:02   Тик: 2019.08.30 07:00:00 bid: 22552.0 ask: 22697.0 last: 0.0 [0]
2019.08.30 07:00:02   Тик: 2019.08.30 07:00:02 bid: 22425.0 ask: 22856.0 last: 0.0 [2]
2019.08.30 07:00:02   Получено тиков: 4 код ошибки: 0
2019.08.30 07:00:02   Тик: 2019.08.30 07:00:00 bid: 22552.0 ask: 22697.0 last: 0.0 [0]

等等......。


也就是说,在真正的服务器上,一切都在工作。如果它对你不起作用:1.在真正的服务器上工作,而不是在演示服务器上,2.检查你的代码。

附加的文件:
 

这个账户不仅仅是真实的,我在上面做交易。我使用了你的代码,甚至准确地设置了所有的设置,你会笑的,这里是完整的日志。


2019.12.08 21:08:38.787 MetaTester 5 started on 127.0.0.1:3000
2019.12.08 21:08:38.790 initialization finished
2019.12.08 21:08:39.088 login (build 2265)
2019.12.08 21:08:39.120 4372 bytes of account info loaded
2019.12.08 21:08:39.120 1482 bytes of tester parameters loaded
2019.12.08 21:08:39.120 1212 bytes of input parameters loaded
2019.12.08 21:08:39.138 29043 bytes of symbols list loaded
2019.12.08 21:08:39.138 expert file added: Experts\CopyTicks_1.ex5. 16437 bytes loaded
2019.12.08 21:08:39.152 6116 Mb available, 76 blocks set for ticks generating
2019.12.08 21:08:39.152 initial deposit 10000.00 USD, leverage 1:100
2019.12.08 21:08:39.153 successfully initialized
2019.12.08 21:08:39.153 37 Kb of total initialization data received
2019.12.08 21:08:39.153 Intel Core i5-3450  @ 3.10 GHz, 8157 MB
2019.12.08 21:08:39.198 RTS-12.19: symbol to be synchronized
2019.12.08 21:08:39.199 RTS-12.19: symbol synchronized, 4120 bytes of symbol info received
2019.12.08 21:08:39.199 RTS-12.19: history synchronization started
2019.12.08 21:08:39.201 RTS-12.19: load 33 bytes of history data to synchronize in 0:00:00.000
2019.12.08 21:08:39.201 RTS-12.19: history synchronized from 2018.01.12 to 2019.12.06
2019.12.08 21:08:39.201 RTS-12.19: ticks synchronization started
2019.12.08 21:08:39.202 RTS-12.19: load 40 bytes of tick data to synchronize in 0:00:00.000
2019.12.08 21:08:39.202 RTS-12.19: history ticks synchronized from 2019.01.03 to 2019.12.05
2019.12.08 21:08:39.205 RTS-12.19,H1: history cache allocated for 2480 bars and contains 971 bars from 2018.01.12 13:00 to 2019.08.29 23:00
2019.12.08 21:08:39.205 RTS-12.19,H1: history begins from 2018.01.12 13:00
2019.12.08 21:08:39.207 RTS-12.19,H1 (Open-Broker): generating based on real ticks
2019.12.08 21:08:39.207 RTS-12.19,H1: testing of Experts\CopyTicks_1.ex5 from 2019.08.30 00:00 to 2019.11.26 00:00 started with inputs:
2019.12.08 21:08:39.207   name=SBRF-12.19
2019.12.08 21:08:39.207   ticks=3000
2019.12.08 21:08:39.263 SBRF-12.19: symbol to be synchronized
2019.12.08 21:08:39.263 SBRF-12.19: symbol synchronized, 4120 bytes of symbol info received
2019.12.08 21:08:40.615 RTS-12.19 : real ticks begin from 2019.01.03 00:00:00
2019.12.08 21:08:55.958 2019.08.30 00:03:46   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:08:56.877 2019.08.30 00:03:46   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:08:57.764 2019.08.30 09:52:14   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:08:58.739 2019.08.30 10:00:01   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:08:59.784 2019.08.30 10:00:01   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:09:04.628 2019.08.30 10:00:03   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:09:05.579 2019.08.30 10:00:04   Получено тиков: -1 код ошибки: 4401
2019.12.08 21:09:06.596 2019.08.30 10:00:06   Получено тиков: -1 код ошибки: 4401

唯一不同的是它在晚上开始,但后来即使在早上也是一样的。

 
VANDER:

这个账户不仅仅是真实的,我在上面做交易。我使用了你的代码,甚至准确地设置了所有的设置,你会笑的,这里是完整的日志。


唯一不同的是它在晚上开始,但后来即使在早上也是一样的...

误导性的历史记录。

4401

未找到所需的历史记录

SBRF-12.19 从哪一天开始,直到哪一天才开始交易? 这些日期是否在2019.08.30和2019.11.26之间?

 
Vladimir Karputov:

误导性的历史记录。

4401

未找到所需的历史记录

SBRF-12.19 是从什么时候开始交易的,直到什么时候? 这些日期是否属于2019.08.30-2019.11.26的范围?

是的,它发生在所有的日期


算了吧,我已经找到了一个适合我的解决方案,我使用的函数是

SymbolInfoTick(необходимый символ)

然后CopyTicks()开始工作,也许Openbox在其他经纪商上出现故障,我没有检查过,也许这对某人会有用。

 
VANDER:

是的,他们这样做,所有的日期都会发生。


好吧,算了,我已经为自己找到了一条出路,在使用功能之前

然后CopyTicks()开始工作,也许它在其他经纪商上会出现故障,我没有检查过,也许它对某人会有用。

这显然取决于交易服务器--它对我来说是有效的。
也许他们十年都不更新他们的服务器部分。
 
fxsaber :

怎样才能避免修正代码,使之没有警告?

当你有600个警告时,你必须找到有错误的行(如果我启用严格模式,实际上我有更多的警告)。

而几乎所有的警告都是无用的。因为很多都是关于隐藏变量或类型转换的。也许有些人认为你会弄错,但这在有经验的程序员中并不常见。

Mt4对初学者来说是合理的。但目前的mql5语言已经足够成熟,对初学者 来说有一定的作用。有经验的程序员不需要用600行来描述一些明显是有原因的事情。


显然,这是我的主观意见,但其他语言可以让你决定你想要多少冗长的水平