错误、漏洞、问题 - 页 445

 
komposter:

为跟进该批次的正常化工作

伙计们,为什么要理论呢?

为了搞笑,不至于脑子生锈。

一切都要适可而止。我已经用真金白银工作了5年多,使用不同的经纪商、账户类型 和工具,我从未 犯过错误。
我从来没有犯过错,也永远不会犯错。 不要紧,我们不是认真的。
 
komposter:

该步骤应是最小手数的倍数。

你为什么这么肯定?练习--我理解,但不理解发动机的限制。
双方的论点是明确的。无论如何,我真诚地感谢你的同情。:)

斯旺

看,所有的工具都在冠军账户中同时进行交易。注册)。

是的,似乎已经注册了。这就是我发现这个错误的地方。

斯旺

可能会再试一下。

if(current price== 0.0) return;

谢谢你的主意!我将不得不尝试这个选项。:)

 

voix_kas:

是的,我想我已经注册了。这就是我捕捉到这个错误的地方。

在GBPCHF 2011.01.03的00:00有一个分钟栏。你没有联系过Servicedesk吗?
 
Swan:
在GBPCHF 2011.01.03的00:00有一个分钟柱。你是否联系过Servicedesk?

我没有去参加SD。

情况是这样的。我正在编写一个多货币的EA。我把它放在Eurobucks图表上,试图跟踪作为参数传递给专家顾问的所有有效货币对。

缺少方法/文件。这里有几个问题,比如说。

1.为什么价格可以是零?毕竟,到那个时候(2011.01.03 00:00:00),最后的已知价格(包括买入价和卖出价)仍然存在?终端是根据什么原则给出的。

2.有一个报价会议。从原则上讲,它与交易时段有什么不同?符合逻辑的是,在第二种情况下,有可能进行交易。而如果我们不能在第一个(报价)时段进行交易,那么为什么报价会发生变化?报价的变化是因为,请原谅我这样解释,"供需失衡"。

3.假设我们收到一个货币对的Tick。在同一事件中,我们试图 "看到 "另一对的状态。哪里能保证上次来的另一对的报价仍然有效?什么是报价的寿命?最合理的解释是检查最后的报价并同时检查市场上的手数。也就是我所看到的:收到Eurusd的N个报价。它不是白来的,而是在这个报价上放置了一定数量的期权。那些想买/卖的人正在抢购这块蛋糕。在某个时刻,它(蛋糕)结束了,这句话 "停止生活"。然后终端给出下一个(不太有吸引力的)报价。如果根本没有报价(没有人想卖/买货币)呢?那么价格就等于零?

无论如何,我不是一个股市/外汇专家。

如果有人能对所提出的问题给予详细的回答,我将不胜感激。它到底是怎样的,这些或那些情况在MT5终端中是如何呈现的?

 
voix_kas:

我没有去参加SD。

情况是这样的。我正在编写一个多货币的EA。我把它放在Eurobucks图表上,试图跟踪作为参数传递给专家顾问的所有有效货币对。

缺少方法/文件。这里有几个问题,比如说。

1.为什么价格可以是零?毕竟,到那个时候(2011.01.03 00:00:00),最后的已知价格(包括买入价和卖出价)仍然存在?终端是根据什么原则给出的。

2.有一个报价会议。从原则上讲,它与交易时段有什么不同?符合逻辑的是,在第二种情况下,有可能进行交易。而如果我们不能在第一个(报价)时段进行交易,那么为什么报价会发生变化?报价的变化是因为,请原谅我这样解释,"供需失衡"。

3.假设我们收到一个货币对的Tick。在同一事件中,我们试图 "看到 "另一对的状态。哪里能保证上次来的另一对的报价仍然有效?什么是报价的寿命?最合理的解释是检查最后的报价并同时检查市场上的手数。也就是我所看到的:收到Eurusd的N个报价。它不是白来的,而是在这个报价上放置了一定数量的期权。那些想买/卖的人正在抢购这块蛋糕。在某个时刻,它(蛋糕)结束了,这句话 "停止生活"。然后终端给出下一个(不太有吸引力的)报价。如果根本没有报价(没有人想卖/买货币)呢?那么价格就等于零?

无论如何,我不是一个股市/外汇专家。

如果有人能对所提出的问题给予详细的回答,我将不胜感激。现实中是怎样的,这些或那些情况在MT5终端中是如何体现的?

让我们一点一点地处理它。专家顾问是多货币的,所以它应该有相应的行为。

1.让我们排除获得0价格的主要可能问题--应该有选择地选择交易的符号清单(即,你不需要担心MarketWatch中是否有必要的符号)?

2.关于交易和报价环节,开发人员已经给出了评论(特别是拉希德-乌马罗夫 在此 评论)。关于有报价,但你不能交易的情况--是很正常的(特别是对于股市)。此外,没有人保证在交易时段内会更新报价。

3.关于玻璃--以及在外汇市场上从哪里获得玻璃(最重要的是,在里面放什么)?对于问题,答案是这样的(如果一切正常,并且有一个与服务器的连接)。

(a) "最后报价"(关于最后一个勾股价的信息)从一个勾股价出现时开始有效,直到新的勾股价出现。在终端,最后一次报价的时间可以在 "市场概览 "中查看。

b) 如果你只在多货币专家顾问的处理程序OnTick()中收集关于点数的信息,没有人可以保证,在主要货币对的点数之间不会有其他货币对的点数。因为根据一个货币对和其上的交易活动,ticks之间可能从几分之一秒到几分钟。

当然,对于外汇市场(特别是欧元兑美元)来说,这不是很重要,但必须记住,并在专家顾问的逻辑中考虑到。

c) 你可以通过分析MqlTick的结构,以编程方式确定最后一次报价的时间,并将最后一次报价的时间 与某个值进行比较,你可以很容易地确定一个报价的相关性。

struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;        // Текущая цена Bid
   double       ask;        // Текущая цена Ask
   double       last;       // Текущая цена последней сделки (Last)
   ulong        volume;     // Объем для текущей цены Last
  };

d) 正如我在上面已经提到的,你应该监控与服务器的连接,如果可能的话,不仅在OnTick()中检查/接收报价,而且在OnTimer()中检查/接收报价。

 

让我们反过来看。在什么情况下,价格(买入/卖出)可以在终端采取零值?

然后是第二个问题。嗯,我们发现这个符号的最后一次报价是在2秒/分钟/小时前收到的。交易时段 没有收盘。我们如何才能避免 "无价 "的错误?

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
voix_kas:

让我们反过来看。在什么情况下,价格(买入价/卖出价)在终端可以取零值?

然后是第二个问题。嗯,我们发现这个符号的最后一次报价是在2秒/分钟/小时前收到的。交易时段 没有收盘。我们如何才能不出现 "没有价格 "的错误?

当你收到一个零价格时,你是否问过GetLastError?
 
stringo:
当你得到零价格时,你有没有问GetLastError?

错误代码。4756.你可以在截图 中看到它。

此外。下面是收到的同样的错误。同时,市场观察显示价格的存在,该工具在日志中也是同步的。

 
voix_kas:

错误代码。4756.你可以在截图 中看到它。

此外。下面是收到的同样的错误。而市场观察显示价格的可用性,并且该工具在日志中是同步的。

你需要在 "没有价格...... "之后有一个错误代码,而不是在 "失败...... "之后。
 
uncleVic:
你需要在 "没有价格...... "之后的错误代码,而不是在 "失败...... "之后。
  ...
  // Формирование торгового приказа.
  MqlTradeResult TradeResult;
  MqlTradeRequest TradeRequest;

  TradeRequest.action = TRADE_ACTION_DEAL;
  TradeRequest.symbol = Instrumet;
  TradeRequest.volume = NormalizeDouble(Volume, 8);
  TradeRequest.price = SymbolInfoDouble(Instrumet, SYMBOL_ASK);
  TradeRequest.sl = 0;
  TradeRequest.tp = 0;
  TradeRequest.deviation = Deviation;
  TradeRequest.type = ORDER_TYPE_BUY;
  TradeRequest.type_filling = TypeFilling;

  // Отправка торгового приказа.
  ResetLastError();
  if (!IsTradeAllowed()) return;
  if (OrderSend(TradeRequest, TradeResult)) TradeResultAnalyse("Buy.OrderSend", TradeResult.retcode);
  else Print("Buy.OrderSend = false! Код ошибки: \'", _LastError, "\'.");

那我怎样才能在你指出的地方捕捉到错误代码呢?我在上述代码的最后一行注册了错误。

如果在这段代码之前加入以下术语,就不会出现这个错误。

if(!NormalizeDouble(SymbolInfoDouble(Instrumet, SYMBOL_ASK), 8)) return;