程序库: MT4Orders - 页 45

 
fxsaber:

你必须想出每一句话。


我是在问,如果上面的文字是 "价格达到了未结头寸的平仓点。MT5 形成市场订单"。

我收到了回复:

fxsaber:

MT5 总是以市价订单的形式向 [客户] 显示承购者。

如何比较?


fxsaber:

第三方。

那么。为什么不连接?


fxsaber:

所以发送的限制器有效期很短。

这与我的问题有什么关系?

进入和退出有什么不同?为什么市场对出场更有利,而对入场有限制?

 
Andrey Khatimlianskii:

你必须想好每一句话。

不幸的是,这是交流形式的代价。


MT5 总是以市场的形式显示外卖。它们是市场还是限价器实际上取决于第三方网关的实现。在这种情况下,这些市场将作为限价器发送。

MT5 仅充当数据库。

 
fxsaber:

MT5 总是以市场的形式显示接受者。至于它们是市场还是限价器,实际上取决于第三方网关的实现。在这种情况下,这些市场将作为限价器发送。

我们是在讨论如何显示 TP 执行吗?

那我明白原帖的意思了)

 
fxsaber :

我正在开发自学指标转换功能。这里还有三个指标。

和往常一样--原始的 MT4 代码没有动过。

源代码清楚地显示了作者在代码中使用 StringConcatenate 的情况。这简直太愚蠢了!

你好...


您是如何转换到 MT5 的?

 

我有一个净额结算账户。我通过市场平台开仓和平仓。平仓时,OrderSend 返回 0,这不是错误,但也不完全是成功。

我查看了 OrderSend 中的以下代码

    return((arrow_color == INT_MAX) ? (MT4ORDERS::NewOrderCheck() ? 0 : -1) :
           ((((int)arrow_color != INT_MIN) || MT4ORDERS::NewOrderCheck()) &&
            MT4ORDERS::OrderSend(MT4ORDERS::LastTradeRequest, MT4ORDERS::LastTradeResult) ?
            (MT4ORDERS::IsHedging ? (long)MT4ORDERS::LastTradeResult.order : // PositionID == Result.order - MT5-Hedge功能
             ((MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL) ?
              (MT4ORDERS::IsTester ? (::PositionSelect(MT4ORDERS::LastTradeRequest.symbol) ? PositionGetInteger(POSITION_TICKET) : 0) :
                                      // MT4ORDERS::OrderSend 中的 HistoryDealSelect
                                      ::HistoryDealGetInteger(MT4ORDERS::LastTradeResult.deal, DEAL_POSITION_ID)) :
              (long)MT4ORDERS::LastTradeResult.order)) : -1));

MT4ORDERS::OrderSend 返回 true。 MT4ORDERS::LastTradeRequest.action ==TRADE_ACTION_DEAL 也为 true。 MT4ORDERS::IsTester 也为 true。但 PositionSelect(MT4ORDERS::LastTradeRequest.symbol) 返回 false。显然,这是因为仓位已关闭。这是错误还是功能?还是我又进入了这个库不完全支持的领域?

 
traveller00:

我有一个净额结算账户。我通过市场平台开仓和平仓。平仓时,OrderSend 返回 0,这不是错误,但也不完全是成功。

平仓 通常是通过 OrderClose 进行的。如果通过 OrderSend 平仓,返回 0 是合乎逻辑的,因为 MT4Style-OrderSend 会返回未平仓头寸的单子。如果您已经平仓,就没有什么可返回的了。如果返回-1,则表示出错。


如果您通过 OrderSend 部分平仓或翻仓,它应该(理应)返回已更改头寸的票据。0 - 无票返回。

 

我试图在脑海中设置部分订单执行,但还没有完全理解。而模拟账户大多会显示交易量,不允许进行实验性检查。

有两种情况:我使用带有"部分执行限价订单 " 选项的纯 MT4 和带有 MT4Orders 库的 MT5。下达并部分执行限价订单。

1.对于 MT4,根据我的理解,会有 2 个订单:1 个是部分执行量的订单,不是限价订单,但已执行;1 个是剩余量的限价订单。这两个订单是独立的,第二个订单基本上是由经纪人下达的。剩余交易量成交后,将有 2 个订单,只是都已执行。我的理解正确吗?因为在查看 MT4 的 API 方案时,我只想到了这一点,而没有看到任何关于部分执行以及下单类型(如 FOK 或其他类型)的工作。

2.对于 MT5,订单仍为 1,仍为限价订单,但交易量将分为 ORDER_VOLUME_INITIAL 和ORDER_VOLUME_CURRENT。MT4Orders 将返回 ORDER_VOLUME_CURRENT,要获得第二个交易量,您必须调用 MT5 本地 API。当剩余交易量成交后,订单将保持 1,从限价移动到已执行,价格将重新计算为平均价。我的理解正确吗?

 
traveller00:

我试图在脑海中设置部分订单执行,但还没有完全理解。而且模拟账户大多会显示交易量,不允许进行实验性检查。

有两种情况:我使用带有"部分执行限价订单 " 选项的纯 MT4 和带有 MT4Orders 库的 MT5。下达限价订单并部分执行。

1.对于 MT4,根据我的理解,会有 2 个订单:1 个是部分执行量的订单,不是限价订单,但已执行;1 个是剩余量的限价订单。这两个订单是独立的,第二个订单基本上是由经纪人下达的。剩余交易量成交后,将有 2 个订单,只是都已执行。我的理解正确吗?因为在查看 MT4 中的 API 方案时,我只想到了这一点,而没有看到任何有关部分执行以及下单类型(如 FOK 或其他类型)的工作。

正确。

2.对于 MT5,订单仍为 1,同时仍为限价订单,但交易量将分为 ORDER_VOLUME_INITIAL 和ORDER_VOLUME_CURRENT。MT4Orders 将返回 ORDER_VOLUME_CURRENT,要获得第二个交易量,您必须调用 MT5 本地 API。当剩余交易量成交后,订单将保持 1,从限价移动到已执行,价格将重新计算为平均价。我的理解正确吗?

将生成许多具有相同 DEAL_ORDER 的交易。您甚至可以修改(开盘价)或删除订单。也就是说,它的状态可以是取消,但会产生多笔交易。这就是为什么不一定能知道滑点值。


我不知道。也许在 MOEX 演示循环中,可以通过演示限制器来影响价格。这样就很容易重现这种情况: 将 BuyLimit 置于价差内,然后立即做一些小的 SELL-市场。


ORDER_VOLUME_INITIAL - 没有看到该信息有用的情况。


如果没有未结头寸(套期保值不需要),部分执行会创建 MT5 头寸和 MT5 订单。此外,它还会创建具有相同 PositionID 的交易。这就是为什么在 SELECT_BY_TICKET 模式下,与 MT4 不同,您可以优先选择先查看哪里(历史记录或实时交易)- MODE_HISTORY/MODE_TRADES。因此,按票据选择并不明确。


这就是我建议通过 SELECT_BY_POS 进行选择的原因。

 
fxsaber:

ORDER_VOLUME_INITIAL - 我不知道在什么情况下该信息会有用。

我将其与ORDER_VOLUME_CURRENT 结合使用,以确定有多少已倒入,有多少仍在限制器中。主要是用于我自己的统计,使过程更加清晰。


感谢您的详细解释。这说明我的想象都是正确的,所以我就照做了。我唯一没有考虑到的是,在 MT5 中部分执行将创建一个新的市场订单。

 
fxsaber:

平仓 通常通过 OrderClose 完成。

但在这种情况下,不可能通过限制器进行操作。或者有可能吗?