int N_bar=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_H1,0));//номер текущего бараdatetime StopDt=iTime(Symbol(),PERIOD_CURRENT,N_bar+1);//только для минуток и то может быть не корректно!Print("StopDt_Shift=",TimeToString(StopDt,TIME_DATE|TIME_MINUTES));
在OnInit()中调用符号的时间序列:iTime(Symbol,Timeframe,1)。
在OnTick()的最开始,通过相应的iFunc()询问需要的时间序列的需要的条,或者如果(iTime(Symbol,Timeframe,10)==0)返回。
在这种情况下,专家顾问将不会检测到一个新的条形图,而会等待下一个刻度。
在OnInit()中,我们已经请求了时间序列数据,从而激活了数据分页。
在OnTick()中,我们检查EA是否有最低要求的历史记录,如果还没有,我们就等待下一个tick。
而在收到专家顾问所需的所有数据之前,它将等待下一个刻度。
一旦所有必要的数据被抽出并获得,专家顾问将开始在新的条形图和所需的历史中工作。
为了保持串行数据的更新,请确保至少每两分钟访问一次。做一个大约一分半钟(90秒)的第二个计时器,在其中简单地访问所需符号的任何时间序列,例如iTime(Symbol,Timeframe,1); 不检查收到的数据 - 只是 "移动 "历史。那么符号上的所有数据将始终是最新的。
当然,我将尝试使用所有的TFs来检查新的条形图,但它不是同步的,这不是MT4。问题不在于条形图,而在于从指标中调用的指标的不性能,而指标又是从专家顾问中调用的。
我是按会议记录工作的,所以历史记录应该永远是最新的。
而且,所有这些检查都是为测试而做的,它们只会减慢真实账户的工作速度,因为那里的一切工作都比在测试者的固定条件下要慢,我重申,在真实账户 上,该指标工作正常。
到目前为止,我已经通过检查在主代码开始工作之前失败的指标的准备情况来解决这个问题
但这种方法并不通用,因为你需要列出所有的指标,是否有另一种更通用的方法来使测试器环境正确工作?
在OnTick()中,我们检查专家顾问是否有最低要求的历史记录,如果还没有,我们就等待下一个刻度。
而在获得专家顾问所需的所有数据之前,它将等待下一个刻度。
一旦所有必要的数据被抽出并获得,专家顾问将开始使用新的条形图和所需的历史数据。
你建议如何检查历史的可用性,我不明白...
在MQL4函数前添加这一行
并能在MT5中工作。
这是个天才。非常感谢您!
你能告诉MT5能实现这样的按钮吗,也许已经有一个了,分享一下代码吧...
为滑移和重新报价做准备。
你好,如果CSymbolInfo类中 的Ask和Bid价格或多或少是清楚的,那么如何获得例如SessionInterest或SessionBuyOrdersVolume或SessionPriceLimitMin,它给出了零,我不明白为什么...
你好,如果从CSymbolInfo类中 的Ask和Bid价格或多或少是清楚的,如何获得例如SessionInterest或SessionBuyOrdersVolume或SessionPriceLimitMin,它给出了零,我不明白为什么...
如果交易服务器广播了这一信息,你就会收到它。
通常情况下,这种信息是由经纪商为股票符号广播的(不要混淆经纪商和交易中心)。
如果一个交易服务器广播了这一信息,你将会收到它。
这种信息通常由经纪人为交易所符号广播(不要混淆经纪人和交易中心)。
经纪人Otkritie,RTS指数期货,我假设必须至少广播SessionPriceLimitMin和SessionPriceLimitMax(因为据我了解,它们是市场订单中使用的开盘价)。开头不是翻译了...例如,我开的处方。
Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - 来自你的EA
我在日志中只得到了Ask价格
请帮助编写一段代码,以正确地确定任何TF中的最后一个条形图的日期,精确到当前TF。
这段代码通常是有效的,但只有在当前条形图的开始时间与实际条形图(四舍五入到分钟)相吻合的情况下,因为我当前的图表是M1。而如果它不吻合,那么就会发生各种意外,这取决于不同的TFs。例如,我需要知道最近一个小时的M1小节的开始日期,如果是12点没有问题,时间将是12:59,但如果是13点,将是13:58,因为小时小节是在14:05打开的,而不是在14:00,iBarShift 函数返回离14:00最近的小节,即13:59。
新增内容: 做了这个,似乎可以用
Otkritie经纪商,RTS指数期货,我假设它至少应该广播SessionPriceLimitMin和SessionPriceLimitMax(据我所知,它们是按开盘价 用于市场订单的)。开头不是翻译了...例如,我开的处方。
Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - 来自你的EA
我在日志中只得到了Ask价格