Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
10:58:23.963 Test (EURUSD,H1) 2016.01.0400:06:42 CTrade::OrderSend: instant buy 0.04 EURUSD at 1.08732 [done at 1.08732]
10:58:30.692 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID0, DEAL_VOLUME0.00, DEAL_ENTRYDEAL_ENTRY_IN, DEAL_TYPEDEAL_TYPE_BALANCE10:58:30.784 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID2, DEAL_VOLUME0.02, DEAL_ENTRYDEAL_ENTRY_IN, DEAL_TYPEDEAL_TYPE_BUY10:58:32.074 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID2, DEAL_VOLUME0.01, DEAL_ENTRYDEAL_ENTRY_IN, DEAL_TYPEDEAL_TYPE_BUY10:58:33.826 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID2, DEAL_VOLUME0.07, DEAL_ENTRYDEAL_ENTRY_INOUT, DEAL_TYPEDEAL_TYPE_SELL10:58:37.237 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID4, DEAL_VOLUME0.04, DEAL_ENTRYDEAL_ENTRY_OUT, DEAL_TYPEDEAL_TYPE_BUY10:59:07.397 Test (EURUSD,H1) 2016.01.0400:07:19DEAL_POSITION_ID2: volume in 0.03, volume out 0.07
经常使用和有用的功能。
重新设计了GetPositionPrice()函数。
这个函数显示了错误的结果,或者说是错误的结果。我研究了一下,发现在调头时(即在进/出交易期间),头寸ID并没有改变,正如文件中描述的那样。
https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties
仓位逆转将其ID改为导致逆转的订单票。
如果出现逆转,你的GetPositionPrice可以堆积2个或更多相反方向的头寸,并为它们计算出一个平均价格。这样的头寸平均价格是没有实际作用的。
那么,仓位ID在逆转时是否会改变?
你怎么能从一个进出交易中看出哪个交易量关闭了之前的头寸,哪个交易量打开了新的头寸?
它可以与当前的开放位置进行比较。但最好是通过它的id来考察历史上的位置,当位置颠倒时,它不会改变......。买/卖量来帮助。
最近,当你转身时,位置标识会发生变化。这方面的文件已经更新....
位置标识符
职位ID是一个唯一的数字,它被分配给每个新开的职位,在整个生命周期内不会改变。它与开仓时的订单票相对应。
仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。
仓位的逆转将其标识符改为导致逆转的订单票。
长
你可以把它与目前的开放进行比较。但最好是通过id来检查历史上的位置,在逆转过程中不会发生变化......。买/卖量来帮助。
这根本就不是一个选项。之前的头寸也可能因为反转等原因而被打开。这可能是一个选择,但显然不是一个最佳选择。
最近,当你转身时,位置标识会发生变化。这方面的文件已经更新....
位置标识符
职位ID是一个唯一的数字,它被分配给每个新开的职位,在整个生命周期内不会改变。它与开仓时的订单票相对应。
仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。
仓位的逆转将其标识符改为导致逆转的订单票。
长
它是这样写的,但实际上没有什么变化。
如果你喜欢,我的代码。
其中deal2_ticket是进/出交易票,deal1_ticket是进/出交易前的票,deal3_ticket是进/出交易后的票。在这三种情况下,我都得到了相同的位置标识。
它是这么说的,但实际上没有任何变化。
如果你喜欢,我的代码。
其中deal2_ticket是进/出交易票,deal1_ticket是进/出交易前的票,deal3_ticket是进/出交易后的票。在这三种情况下,我都得到了相同的位置标识。
那么我们如何从一个进场/出场交易中确定哪个交易量关闭了前一个仓位,哪个仓位打开了新的仓位?
该专家顾问在净值账户上以 "历史调试 "模式运行。这个例子有点粗糙,因为它计算出在交易历史中只有一个 "IN/OUT "类型的交易。
首先,在所有已执行的交易和完成平仓后,所有交易的描述都会显示出来(DEAL_POSITION_ID, DEAL_VOLUME, DEAL_ENTRY,DEAL_TYPE),在此基础上,IN/OUT类型的交易的DEAL_POSITION_ID被记住。
然后,它再次浏览历史记录,并对具有DEAL_POSITION_ID的交易的所有条目进行汇总。
我们得到的东西是这样的。
对我来说,它正在改变。在最新的Build 1340上试试。