错误、漏洞、问题 - 页 662

 

下午好!

请检查应确定未平仓头寸 是否被 "冻结 "的功能是否正确。

特别是,我在 "询问/竞标 "方面是不是做得太过分了?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

没有,在服务器上一切工作正常(MQ 模拟账户)。也就是说,当我没有连接的时候,就触发了这些停止。但是,当我连接时,市场已经关闭。在 "市场观察"窗口中,记录了我被断开连接前的最后一个刻度的时间。当我通过指定TimeCurrent()作为第二个值来请求交易历史 时,我并没有得到整个历史。虽然,TimeCurrent()的帮助说,。

也就是说,我的理解是,这个函数应该从服务器返回Market Watch 窗口中某一工具最后到达的报价值,即使连接中断,而且连接发生时市场已经关闭。在我的情况下,这并没有发生,我没有得到所有的历史。我不知道市场观察 是否应该在市场关闭时与服务器同步时间,帮助中没有提到。

在这种情况下,如果需要完整的历史记录,你可以简单地提前添加更多的日子,这将是一个保证,所有的交易将被选择。:)

在测试器中,HistoryDealsTotal()函数有一个错误,它出现在可视化模式中。那里的时间模型是正确的。在某些情况下,只是一个拐杖的帮助。


是的,我记住了它的要点,就是沟通出现了中断。似乎终端只有在收到一个工具的嘀嗒声时才开始检查和下载额外的历史记录,而在周末没有嘀嗒声。当然,你可以手动更新图表,然后最后的服务器时间会被更新。如果是自动模式,那么你应该修复连接中断,如果在周末恢复了连接,那么启动检查和下载历史的功能,即CheckLoadHistory()。使用定时器。

一般来说,"惊人 "的事情有时会发生在终端。这里是昨天,笔记本电脑通过电话作为调制解调器工作。多货币专家顾问在跟踪模式下工作(禁用自动交易)。带着电话离开了15分钟,回来后重新连接。终端恢复了与服务器的连接。看来,我可以很容易地下载错过的引言。但终端开始狂热地下载历史资料--还有什么可做的呢?一切都冻结了:市场概览、交易标签、图表。这款手机不支持3G,它通过EDGE工作,所以程序被推迟了。当它达到20MB时,我决定检查一下在这种情况下我是否可以手动交易一些东西。试图平仓,由于缺乏连接而被拒绝,这时下载就停止了。我试着手动关闭仓位。以下是终端日志的摘录。

OK 0 网络 09:45:09 '709704':通过新加坡接入点
IR 0网络对MetaQuotes-Demo进行授权 09:45:09 '709704': 之前从77号机成功授权。35.11.181 on 2012.03.04 06:10:12
KP 0 Network 09:45:12 '709704': Terminal synchronized with MetaQuotes Software Corp.
GI 0专家09:45。12 专家 Fractals_ (EURUSD,H1) 成功加载
OI 0 交易 10:43:29 '709704' : 交易 #8671794 卖 0.10 GBPJPY在129。已完成268件(基于9494984号订单)。//这笔交易是由在另一台电脑上工作的专家顾问执行的
RM 0 交易 10。51:22 '709704' : 交易#8671842卖出0。10 USDJPY在81。已完成586件(根据9495037号订单)。//类似地
KL 1网络12。00:38 '709704':与MetaQuotes-Demo的连接丢失// Gone
IE 0 网络 12:16:15 '709704':通过香港接入点在MetaQuotes-Demo上获得授权//来到
IS 0网络12。16:15 '709704': 前一次成功的授权是从80号执行的。83.239.67 on 2012.03.04 23:45:03
OS 0 Network 12:16:18 '709704': Terminal synchronized with MetaQuotes Software Corp.// 通讯恢复了
IQ 0 交易 12:18:12 '709704' : 交易#8672388卖0。10英镑兑瑞郎在1.44540已完成(基于9495596号订单)。//这个交易是由在另一台电脑上工作的专家顾问执行的
DF 0 交易 12:35:37 '709704':即时买入0。10欧元兑英镑在0。83422//我试着手动平仓,在此之前,历史记录被下载
IN 2 Trades 12。35:44 '709704':即时买入0失败。10欧元兑英镑在0。83422 [由于缺乏网络连接,请求被拒绝] //被拒绝
JP 1 网络 12:35:44 '709704': 与MetaQuotes-Demo的连接丢失
EI 0网络12。36:00 '709704': 通过接入点香港
IG 0网络在MetaQuotes-Demo上授权 12:36:00 '709704': 之前从80进行的授权成功。83.239.67 on 2012.03.05 02:16:12
PG 0 网络 12:36:08 '709704':终端与MetaQuotes软件公司同步。// 通讯恢复,进一步正常运行
MS

 
日志显示,在中断之前,终端在一个服务器上工作,但在中断之后,它连接到另一个服务器并开始下载历史记录。可以得出结论,不同服务器之间的历史记录是不同步的。
 
Valmars:

是的,记住了它的要点,沟通上出现了中断。看起来终端只有在收到该工具的tick时才 开始调节和下载历史记录,而在周末没有tick。当然,你可以手动更新图表,然后最后的服务器时间会被更新。而如果你想使用自动模式,那么你应该修复连接中断,如果周末恢复了,就开始检查并下载历史,CheckLoadHistory()函数。 使用定时器。

...

是的,看起来在打钩时有一个时间更新,但历史已经在那里了,可以直观地查看。谢谢你提供的解决方案选择。我将尝试在周末前再次重现类似的情况,以尝试解决方案的选项。
 

连接到AlpariFS-MT5 服务器,在不同条件下测试专家顾问。执行类型最初是EXECUTION_MARKET-按市场执行订单我使用我的交易面板成功开仓/平仓。然后我发现,市场深度 在图表的上下文菜单中可用。我打开它,发现可以进行买/卖 操作。作为一个测试,我在市场深度 中买入了一个头寸并在那里平仓。此后,账户执行类型被改为EXECUTION_EXCHANGE。这在MQL5 中得到了澄清,在订单 窗口的下拉列表(F9)中只有两个选项:交换执行待定订单。尝试再次登录或重新加载终端并没有解决问题。而现在模拟账户的执行类型仍然是EXECUTION_EXCHANGE

我联系了Alpari的支持,描述了问题并进行了澄清。

//---

Anatoly | 17:55
我的理解是否正确,目前在MT5 的模拟账户上,EXECUTION_MARKET 选项应该是在的?

Sergey | 17:56
是的,正确。

//---

看起来这是一个错误。

 

有些标识符在帮助中没有描述。

ORDER_FILLING_FOKORDER_FILLING_IOCORDER_FILLING_RETURN 都在那里,但ORDER_FILLING_AONORDER_FILLING_CANCEL 却不在那里,尽管它们都指向同一个带有描述的列表。

 
tol64:ORDER_FILLING_AONORDER_FILLING_CANCEL 则不是,尽管它们都指向同一个带有描述的列表。
它们已经被废除了,我们也将从索引中删除它们。
 
Rosh:
它们已经被废除了,我们也将把它们从指数中删除。

谢谢你。

//---

这个问题已经出现了。比赛服务器现在是否可以进行测试,其限制与比赛时相同(交易量限制15手/交易量最大5手)?我试图连接到旧账户,但没有连接到服务器。我在Metatrader 5 可用于交易的所有服务器上进行了搜索,但我没有在任何地方找到成交量限制,我需要测试。还是用一个有竞赛价值的例子来回答这个问题就可以了。

我有一个未结头寸,其交易量为14手。如果我尝试下一个2 手的挂单,请求将被拒绝?或者,订单将以相同的规模下达,但它将被部分执行,即1手,只要头寸保持相同的规模(14手)。

反之亦然。我们有一个14手的 挂单设置。如果我试图用2手开 仓,请求将被拒绝?

 

我想在这里试试我的运气,因为凯特斯上有沉默......

请澄清:https://www.mql5.com/ru/forum/3775/page113#comment_160125。 我对所需计算的软件计算也很感兴趣。

 

下午好。

我如何访问内置iADX指标 的值?也就是说,在给定的条数之前,它的值是多少?在mql4中,它是通过设置移位参数完成的。

已经谢谢你了。

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5