关于OnTradeTransaction函数的问题 - 页 4

 
Mikalas:

这是因为交易所没有厨房(只有佣金),而FOREX有数百万的MMM追随者。

可能有100美元,但每个人都有!巨大的金钱,有什么好计较的!:)

我不明白MetaQuotes )

对于外汇交易套件,有一个伟大的MT4终端。

许多外汇套件从不提供通过MT5的访问,他们不需要它,因为他妈的。

这么多年来,难道不可能在交易所附近做一个终端吗?

如果他们有一个好的终端,他们将有很多客户想提供MT5服务。

 
Serj_Che:

我不明白MetaQuotes )

对于外汇交易套件,有一个伟大的MT4终端。

许多外汇套件从不提供通过MT5的访问,他们不需要它,因为他妈的。

这么多年来,难道不可能在交易所附近做一个终端吗?

如果我们有一个好的终端,会有很多客户想提供MT5服务。

这不是关于MQ,而是关于经纪人。

经纪人从客户的交易中获益 - 更多的交易 - 更多的佣金。

机器人只会做 "正确的交易",而通过 "手工 "下单,人们会很

机器人只会做 "正确 "的交易,而通过下达手单,人们经常会犯错误(我自己也犯过很多次这样的错误)。

你被抓住了,你发誓,你以亏损关闭订单,你想把它找回来,你又把它设错了,等等。

而经纪人和交易所则得到了佣金 :)

因此,对于交易所,特别是对于经纪人来说,QUIK是祖国。

 
Mikalas:

瓦西里,会有答案吗?

我不这么认为。

我赢了吗?

我今晚会给你一个答案。我现在做不到。
 
C-4:

不要把事情复杂化。在FORTS上交易不一定要使用异步法。首先,请看这篇文章 的第三章:"异步操作的基础知识"。这不多,非常基本,但足以开始学习。那里描述的代码是100%异步的,然而这并不妨碍它在同步模式下工作,而不会得到各种OnTradeTransaction和其他事件。

解决方案必须以你的任务为基础。在MetaTrader 5中,你在任何时候都只有一个活动头寸,这就是你需要监控的。没有必要查看订单历史。如果你仍然需要订单历史,你应该澄清你的目标。

不,瓦西里,你还没有完全理解我的目的。我不打算在FORTS上写任何东西或交易,我刚刚开始学习mql5。我早些时候开始阅读这篇文章。但我看了不超过2页就放弃了。我想我不需要,我自己是个NT。但清楚地解释OrderSend和OrderSendAsync的区别是很有用的。这几乎是我所期望的。

如果我们跳过异步订单提交,使用OnTradeTransaction来跟踪账户中发生的事情,这难道不会提高EA的性能吗?

在每次打勾时进行检查是一回事,而只有在账户中出现一些变化时才进行检查又是另一回事。我错了吗?待定订单已被激活,我们有相关信息。一个位置被关闭,我们可以分析其关闭的结果。从开仓到平仓的这段时间里,只有几次检查。而与此相反,每一次打勾都有检查...

这里还有一个问题:要确定一个头寸的利润,有PositionGetDouble(POSITION_PROFIT) 函数,但要确定一个平仓的利润,只有 OrderCalcProfit()有一堆的参数,必须先从这个交易中获得或者是我对mql5太陌生了,以至于我找不到合适的解决方案?

如果你不介意的话...

 
AlexeyVik:

不,瓦西里,你误解了我的目标。我还不打算在FORTS上写东西或交易,我刚刚开始学习mql5。我早些时候开始阅读这篇文章。但我看了不超过2页就放弃了。我想我不需要,我自己是个NT。但清楚地解释OrderSend和OrderSendAsync的区别是很有用的。这几乎是我所期望的。

如果我们摒弃异步订单提交,仍然使用OnTradeTransaction来跟踪账户中发生的事情,难道不会提高EA的性能吗?

在每次打勾时进行检查是一回事,而只有在账户有一些变化时才检查是另一回事。我错了吗?待定订单已被激活,我们有相关信息。一个位置被关闭,我们可以分析其关闭的结果。从开仓到平仓的这段时间里,只有少数检查。而与此相反,每一次打勾都有检查...

这里还有一个问题:要确定一个头寸的利润,有PositionGetDouble(POSITION_PROFIT) 函数,但要确定一个平仓的利润,只有 OrderCalcProfit()有一堆的参数,必须先从这个交易中获得或者是我对mql5太陌生了,以至于我找不到合适的解决方案?

如果不是太麻烦的话...

OrderCalcProfit不会有帮助。

你必须计算所有订单的平均价格(进)和所有订单的平均价格(出)。

则可以计算出平仓的 利润。

我们将不得不翻阅历史。

 
Mikalas:

OrderCalcProfit不会有帮助。

你需要计算所有订单的平均价格(进)和所有订单的平均价格(出)。

然后我们可以计算出平仓的 利润。

我们将不得不调查历史。

原则上,我理解它(尽管我还不明白如何去做),但在这种情况下,只有最后关闭的位置对我来说是重要的。显然,这更适合于该职位被填补时的情况。但我的任务是不同的。

我决定用martin重写我的mql5猫头鹰。它在市场上不断地进行交易,并在最后一个位置打开下一个交易...

哎呀...这就是在论坛上交流的作用。毕竟,如果该头寸只能在挂单激活时反转,或在获利时平仓,我就不关心盈亏的大小。好吧,如果最后一个膝盖会给出一个减分,那么你就不需要什么了...只要知道平仓的类型就够了......这可以写入OnTradeTransaction处理程序中的全局变量,交易类型为TRADE_TRANSACTION_DEAL_ADD,交易类型为 TRADE_TRANSACTION_HISTORY_ADD,或者只要 PositionsTotal为零,就把系列的下一个第一订单放进去......我为自己写下了这句话,以免忘记它:)))



 
papaklass:

...也就是说,你的算法的逻辑应该是基于交易环境的变化,而不是基于 任何函数或事件的处理

3 检查交易环境的频率(在tick上,在bar上,在定时器上,等等)必须与你的TS的逻辑相对应。也就是说,应该如何快速处理交易环境的变化?如果你的TS的逻辑要求尽快处理变化,那么你就不能避免在每次打勾时检查它......。

如果 你的EA是多币种的呢?
 
papaklass:

1.OrderSendAsync()函数 用于需要一次性发送多个订单的情况下,这是一种批量发送。在批量发送的情况下,如果你等待服务器对每个订单作出反应(使用OrderSend()函数),那么在发送整个批次的过程中会有一个明显的总时间滞后。在这个时间滞后期间,市场可能会发生重大变化!为了避免这种时间滞后,我们引入了OrderSendAsync()函数。你应该清楚地了解这一点。

如果你不需要发送批量订单,那么使用OrderSendAsync()函数就没有意义。

确定一个订单、指令等是否被触发的最可靠方法是监控你的交易环境。- 是跟踪你的交易环境,而不是任何功能或事件的触发。一个功能或事件可以发挥作用,但这不一定能改变你的交易环境。 为什么?因为错误可能只是发生在函数的执行过程中。

因此,你的算法的逻辑必须基于变量的变化,而不是基于任何函数或事件的处理。

3. 检查交易环境的频率(在tick上,在bar上,通过计时器,等等)必须符合你的TS的逻辑。也就是说,需要多快地处理交易环境的变化? 如果你的TS的逻辑要求尽快处理一个变化,那么你就不能避免在每一次打勾时检查它。

亚历山大,感谢你的反馈。

我理解它只是为了理解我到目前为止不需要它。目前,OrderSend功能对我来说已经足够了。

2.是的,我同意最准确的状态只能通过监测整个环境的每一个刻度来确定。但有这样一个事件处理程序来忽略它...嗯,我只是在做实验。我完全理解你想帮助我使它在某种程度上更可靠的愿望,但我的目标是不同的。我并不急于需要这个专家顾问,我也不是为了订货而写。

3.也许在EA的最终版本中,我将回到对每个tick进行测试,但现在...

问题是,如果文档警告我们不要这样做,我们是否可以相信OnTradeTransaction事件处理程序?

另外,交易在从服务器到终端的传递过程中可能会丢失。

而在哪些情况下,最好不要相信,在哪些情况下,你需要用一些东西来支持它。

我非常感谢大家,瓦西里、迈克尔和你亚历山大。如果你能分享更多的想法,我将非常高兴并再次感谢你。

 
papaklass:

这正是瓦西里和我本人都回答过的问题。

想一想,如果OnTradeTransaction()函数 的工作必须全部检查,那么立即检查交易环境可能比在OnTradeTransaction()处理后检查更好。然而,这是一个品味的问题。

而在下一个主题中,Renat承诺将与该功能一起工作,也许在下一个版本中,我们会得到这个功能的改进。

但是,我们仍然专注于异步下单。在这种情况下,我们没有理由在数百个订单中失去一个。而米哈伊尔却说,在六个月里,面对数量惊人的订单,他没有损失过一笔交易。而如果使用OrderSend()函数下单,损失交易的概率是多少?

而如果改进即将到来,这又是一个值得关注的理由。还是我又错了?

 
denkir:
А если советник мультивалютный?


纸杯

我不清楚你想让我说什么。

反对事件模型 的论点...