在贸易交易中的处理 - 页 2

 
fxsaber:

我们可以同时有>=2个接受和停止指令吗?

是的,没错,我们做了一个初始进场,设置了一个TP和一个止损单。然后一段时间后,我们可能会增加更多的条目,设置更多的TP和止损。

 

在发生丢失事件的情况下,我记住了所下的订单、最后一笔记账交易的票据、最后记录(改变)状态的时间,并定期以及在启动期间,同步订单列表,检查未记账的交易。

事件的发生是随机的,在订单和历史中没有(临时)订单的情况并不罕见,在交易发生之前和之后都可能发生。

一个仓位在净值化时收到第一笔订单的票据,在进一步的交易(变化)中保存它,直到它被关闭(即变成0.0)。

那么,根据订单的数量,它可能会产生几个交易。
 
Илья Ребенок:


请分享你的经验和想法。

你从一开始就做得不对。

为什么魔术师和各种检查?

一个订单的票据是一个唯一的标识符。

如果你发送一个同步订单,你将收到一个票据作为功能的结果。

如果你发送一个异步订单,我们在OnTradeTransaction 中获得票据。

添加

而在这里https://www.mql5.com/ru/forum/67298/page2#comment_2089220

是一个很好的函数,可以用来检查顺序

ФОРТС: В помощь начинающим
ФОРТС: В помощь начинающим
  • 2015.11.25
  • www.mql5.com
Установка отложенного ордера командой OrderSend().
 
Илья Ребенок:

是的,没错,我们做了一个初始进场,设置了一个TP和一个止损单。然后,在一段时间后,我们可以进行补仓,再下一个TP和止损单。

需要TP/SL的限价订单可以部分执行。同时,限价单形式的TP也将以同样的方式执行。例如,TP被执行三分之一的量 - SL应该减少相同的量。

总而言之,相当不愉快的逻辑是为了抓住所有的窍门。


该任务应在OnTrade中实施。这应该不难实施。

 
prostotrader:

你从一开始就做错了。

为什么魔术师和各种检查?

一个订单的票据是一个唯一的标识符。

如果你发送的是一个同步订单,那么票据是作为函数的结果被接收的。

如果你发送一个异步订单,我们在OnTradeTransaction 中获得票据。

添加

而在这里https://www.mql5.com/ru/forum/67298/page2#comment_2089220

是一个很好的函数,可以用来检查顺序

谢谢你,我将阅读。
JRandomTrader

在事件丢失的情况下,我记住了已下的订单、最后入账交易的票据、最后进入(改变)状态的时间,并定期以及当它发生时,我同步订单列表并检查未记录的交易。

事件的发生是随机的,在订单和历史中没有(临时)秩序的情况并不罕见,在交易发生之前和之后都可能发生。

净值化的头寸得到第一笔订单的票据,在进一步的交易(变化)中,它保存它,直到它关闭(即变成0.0)。

那么,根据订单的数量,它可能会产生多个交易。

该机器人的目标之一是摆脱对本地的依赖。换句话说,它只接收来自市场的数据,而不与终端或PC的变量绑定。这意味着,在有紧急需求的情况下,我必须切换到另一台电脑,而机器人会接过所有东西。

现在我又看到了一个有趣的错误。我收到2个相同的TRADE_TRANSACTION_DEAL_ADD交易。对不起,这到底是什么?)机器人最后在一笔交易上设置了2个停顿。

2019.02.08 10:55:29 [INFO]: ( PChBreak_RTS-3.19_22 ) TRADE_TRANSACTION_DEAL_ADD
贸易_交易_交易_添加
符号:RTS-3.19
交易票据: 12674810
交易类型: DEAL_TYPE_BUY
订购票:82646001
订单类型: ORDER_TYPE_BUY
订单状态:ORDER_STATE_STARTED
订单时间类型: ORDER_TIME_GTC
订单到期时间:1970.01.01 00:00
价格:119700
价格触发:0
止损:0
获利: 0
卷:1
职位:82646001
位置:0

2019.02.08 10:55:32 [INFO]: ( PChBreak_RTS-3.19_22 ) TRADE_TRANSACTION_DEAL_ADD
贸易_交易_交易_添加
符号:RTS-3.19
交易票据: 12674810
交易类型: DEAL_TYPE_BUY
订购票:82646001
订单类型: ORDER_TYPE_BUY
订单状态:ORDER_STATE_STARTED
订单时间类型: ORDER_TIME_GTC
订单到期时间:1970.01.01 00:00
价格:119700
价格触发:0
止损:0
获利: 0
卷:1
职位:82646001
位置:0

 

交易事件(TRADE_TRANSACTION_DEAL_AD) 定期出现几次。

幸运的是,只有最近的一个重复出现(至少我没有赶上更早的)。

要进行过滤,只需检查交易票据是否与前一个相同。

 
Ilya Baranov:

交易事件(TRADE_TRANSACTION_DEAL_AD) 定期出现几次。

幸运的是,只有最近的一个重复出现(至少我没有赶上更早的)。

要过滤它,只需检查该交易票据是否与前一个相同。

不是多次,而是按目前在终端工作的EA的数量。

因此,每个EA应该处理自己的订单

case TRADE_TRANSACTION_DEAL_ADD:
      if((BuyOrder.ticket > 0) && (trans.order == BuyOrder.ticket))  // Buy order
      {
        //Сделка этого советника
      }
break;
 
prostotrader:

不是多次,而是按目前在终端工作的EA的数量。

因此,每个EA必须处理自己的订单

你的代码可以防止它是这个EA的交易的事实。

我和TS说的是当具有TRADE_TRANSACTION_DEAL_AD 类型的OnTradeTransaction为一个交易被多次调用 的情况,即MqlTradeTransaction的 其他字段包含完全相同的数据。

这意味着在你的情况下,处理代码可以被多次执行。

也许,这不是所有经纪人的情况。但这种情况在我工作过的所有股票经纪人中经常发生。

 
Ilya Baranov:

你的代码可以防止是这个EA的交易。

我和TS说的是当具有TRADE_TRANSACTION_DEAL_AD 类型的OnTradeTransaction为一个交易调用几次 的情况,即MqlTradeTransaction的 其他字段有完全相同的数据。

这意味着在你的情况下,处理代码可以被多次执行。

也许,这不是所有经纪人的情况。但这种情况经常发生在与我合作的所有经纪人身上。

我在Otkryvashka进行真实交易,并在演示中测试,但我没有多个触发器。

发布你的TRADE_TRANSACTION_DEAL_ADD 的代码。

 
Ilya Baranov:

交易事件(TRADE_TRANSACTION_DEAL_AD) 定期出现几次。

幸运的是,只有最近的一个重复出现(至少我没有赶上更早的)。

为了过滤,只需检查交易票据是否与前一个相同。

是的,谢谢!我看到后就这么做了。

至于原来的问题,我放了一张单子,以便有时间抽出删除订单并将其加入历史记录的交易。观察到的。

平台在这方面的不完善是非常可悲的。应该捆绑在一起的东西却变成了单独的。

娼者。

不是几次,而是按目前在终端工作的EA的数量。

这就是为什么每个EA必须处理自己的订单

在这种情况下,我仍然需要在某个地方存储来自请求者的订单票据,以便与来自交易的票据进行比较。而我只是想摆脱本地变量 的所有存储,只从市场/终端获取信息,以平息本地基础设施的风险。