EA: 交易者的MQL5编程(MQL5 Programming for Traders) - 源代码第七部分 - 页 4

 
wf2000cn #:

你好@Stanislav Korotky,我是 MQL5 的新用户。我发现您发布了一个用于 webocket 的 wss.zip 文件。如何使用它,有没有演示或我可以学习的东西。衷心感谢!

您可以在algotrading 一书中找到几个例子,在描述(逐步)实施网络服务项目以复制交易和信号的部分。

MQL5 Book: Advanced language tools / Projects / Project plan of a web service for copying trades and signals
MQL5 Book: Advanced language tools / Projects / Project plan of a web service for copying trades and signals
  • www.mql5.com
As an end-to-end demonstration project, which we will develop throughout this chapter, we will take a simple, but at the same time quite...
 
Stanislav Korotky #:

您可以在算法 交易书中 找到几个例子,其中一节描述了复制交易和信号的网络服务项目的实施(逐步实施)。

好吧,我先学着。衷心感谢!
 

您好 @StanislavKorotky

,我正试图用反方向挂单实现部分平仓。

例如:

  • 如果我在 XAUUSD 上有一个 2 手的买入仓位
  • 对 XAUUSD 开立 1 手卖出挂单
  • 在 OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD(transaction.type) 事件中,我有

MqlTradeRequestSync reqs(transaction.symbol);

reqs.closeby(target_position_ticket_id, transaction.order);

我相信上述行文应该能够完成工作,但我面临的挑战是,如何OnTradeTransaction ->TRADE_TRANSACTION_DEAL _ ADD transaction.type) 事件处理程序 获取`target_position _ticket_ id`,或者以某种方式将挂单与target_position_ticket_id 关联起来,每当挂单成交时,预计 target _position_ticket_id 就会平仓。

我尝试在创建挂单时 将 "target_position_ticket_id
"添加到挂单注释中,但问题是在OnTradeTransaction -> TRADE_TRANSACTION_DEAL_ADD (transaction.type) ,我无法访问注释,因为 MqlTradeTransaction 属性中没有 "注释 "

,请给予帮助。

 
pauldic MqlTradeTransaction 属性中没有 "注释"

书中的closeby(ticket1, ticket2) 方法假定您使用对冲账户,并且已经有 2 个未结头寸(买入和卖出),票据分别为ticket1ticket2。我想,(一般来说)不可能对挂单执行 TRADE_ACTION_CLOSE_BY 操作。但如果您的账户处于净额结算模式,我认为您可以简单地向相反方向下挂单,当触发时,它会相应地修改现有仓位 - 即平仓,或部分平仓,甚至反转(如果新成交量大于旧成交量)。

 
websockets 中的小补丁(自选和集体)
附加的文件:
wsprotocol.mqh  17 kb
wss.zip  16 kb
 
Stanislav Korotky #:
websockets 中的小补丁(单点和集体)
@StanislavKorotky 感谢您的持续更新,但有一件事我一直苦苦思索。在 MT5 的 "市场观察"中,我可以右键单击任何 "符号"并查看其所有相关属性,就像在程序中单击 "规格"一样。

其中一个属性是符号的 "佣金",如附图所示,不同经纪商的 "佣金"显然不同。但是,我无法以编程方式访问该属性。请告诉我如何获取符号的佣金。


另外,在使用PositionFilter(位置过滤器)时,日志上经常会显示这条信息,尤其是在首次加载或重新编译 EA 时:8 for MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>".它仍然工作正常,没有停止任何工作
附加的文件:
 
pauldic #:
@StanislavKorotky 感谢您的持续更新,但有一件事我一直苦苦思索。在 MT5 的 "市场观察"中,我可以右键单击任何 "符号"并查看其所有相关属性,就像在程序中单击 "规格"一样。 其中一个属性是符号的 "

佣金",如附图所示,它显然不同于经纪商。但是,我无法以编程方式访问该属性。请提供如何获取符号佣金的线索。

不幸的是,并非终端实体的所有属性都可以通过 MQL5 访问。

pauldic#:
在使用PositionFilter 时,尤其是首次加载或重新编译 EA 时,日志上经常出现这样的信息:"Unresolved int value as enum:8 for MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>" 。它仍然运行正常,没有停止任何操作

这只是一个警告,因为在 MQL5 的相应内置枚举中,通常连续分配的常量出现了间隙。出现这种空白是因为 MQL5 在不断变化,一些常量可能会过时,然后被淘汰。您可以编辑源代码以防止出现此类警告。

 

我在此附上 JSON 库的更新版本--toyjson3.mqh,它可以替代书中的toyjson2.mqhtoyjson.mqh

该版本针对处理巨大的 json 文件进行了优化。为了简单起见,之前的版本在解析 过程中使用StringSplit 函数进行文本标记化,由于碎片化和对进一步数据流的预期,这一调用会在内部请求数千兆字节的空余内存。解析 结束后,内存会被释放,但 MQL5 内存管理器可以将其保留一段时间,因为它会以延迟的方式释放垃圾。

现在,解析 过程中占用的内存减少了数倍。

附加的文件:
toyjson3.mqh  39 kb
 
下面是ToyJson3.mqh 中的另一个小错误修复--现在可以在解析 过程中正确检测带指数(科学记数法,如 "1e-8")的浮点数。
附加的文件:
toyjson3.mqh  39 kb
 
Stanislav Korotky #:
我在此附上对websockets 类的一些错误修正和改进。

这正是我所需要的。

非常感谢你。

你给我的感觉就像这个人。

https://clip.cafe/top-gun-maverick-2022/good-afternoon-ladies-gentlemen-s2/

Watch 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' | Top Gun: Maverick Clip
Watch 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' | Top Gun: Maverick Clip
  • clip.cafe
Watch the clip 'Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your...' from the movie Top Gun: Maverick on Clip.Cafe. Lt. Jake 'Hangman' Seresin: [after destroying the plane that almost killed Maverick and Rooster] Good afternoon, ladies and gentleman, this is your savior speaking. Please fasten your seat belts, return the tray tables to their locked an upright positions and prepare for landing. Bradley 'Rooster' ...