MultiCharts-图表部位、策略部位、经纪商部位
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
MultiCharts-图表部位、策略部位、经纪商部位
(原创:Alex)
一、经纪商部位
经纪商部位是指资金账号、资金、持仓、价格、盈亏等信息的统称,它反应的是资金账户的真实信息。经纪商部位除了显示在交易总管上(如图1所示),还反应在交易追踪器中(如图2、图3、图4和图5),下面主要对经纪商部位在交易追踪器中的显示及所有的经纪商部位关键字(如表1所示)作相应的叙述。
|
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
图1. 交易总管 1、 关键字和函数 表1. 经纪商部位 关键字名称 | 用法简介 | GetNumAccounts | 返回交易追踪器账户列表中的账号数量 | GetAccount | 返回交易追踪器账户列表中指定位置的账户名 | GetRTCashBalance | 返回交易追踪器账户列表中指定账号的可用资金 | GetRTAccountEquity | 返回交易追踪器账户列表中指定账号的今日余额 | GetRTUnrealizedPL | 返回交易追踪器账户列表中指定账户的浮动盈亏 | GetRTAccountNetWorth | 返回交易追踪器账户列表中指定账户的Net Liquidation | GetNumPositions | 返回交易追踪器持仓列表中指定账号持仓的商品种类数量 | GetPositionSymbol | 返回交易追踪器持仓列表中指定账户指定位置的商品名称 | GetPositionQuantity | 返回交易追踪器持仓列表中指定账号指定商品的持仓数量 | GetPositionAveragePrice | 返回交易追踪器持仓列表中的指定账户指定商品的持仓平均价格 | GetPositionOpenPL | 返回交易追踪器持仓列表中指定账号指定商品的浮动盈亏 | GetPositionTotalCost | 返回交易追踪器持仓列表中指定账号指定商品的持仓额 | GetAccountID | 返回信号插入的图表中,自动交易设定的交易账号 | AvgEntryPrice_at_Broker | 返回交易追踪器持仓列表中指定账号指定商品的平均价格 | i_AvgEntryPrice_at_Broker | 返回交易追踪器持仓列表中指定账号指定商品的平均价格 | MarketPosition_at_Broker | 返回交易追踪器策略部位列表中的经纪商部位 | i_MarketPosition_at_Broker | 返回交易追踪器策略部位列表中的经纪商部位 |
|
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
图2. 账户列表
图2为交易追踪器的账户列表,通过函数GetNumAccounts可以直接取到账户列表中的账号数量,由于图2中总共有7个资金账号,所以该函数的返回值是7;另外,由于资金账号从上而下有序的排列着,从而每个资金账号有一个位置,排在最上面的资金账号的位置是1,依此类推,排在最下面的资金账号的位置是7,通过函数GetAccount(accountlocation)可以获取指定位置的资金账号名称,该函数的参数是位置序号,例如,GetAccount(7)返回的是第7个位置的资金账号的名称9999-088194(BaseCurrency),它是一个字符串并且与账户中显示的名称是一致的(即包含了(BaseCurrency)后缀)。
每个资金账号都对应4个数据,分别是可用资金、今日余额、浮动盈亏、Net Liquidation,可以通过相应的4个函数分别取指定资金账号的4个数据,函数GetRTCashBalance(account)、GetRTAccountEquity(account)、GetRTUnrealizedPL(account)、GetRTAccountNetWorth(account)的参数都是资金账号名称,这个参数必须与交易追踪器账户列表中显示的资金账号名称一致(若账户列表中资金账号名称有后缀,则该参数也必须有相同的后缀),函数GetRTCashBalance(account)返回的是指定资金账号的可用资金,例如,GetRTCashBalance(“1999_2-0002166(BaseCurrency)”)返回的是999131.60,函数GetRTAccountEquity(account)返回的是指定资金账号的今日余额,例如,GetRTAccountEquity(“1999_2-0001887(BaseCurrency)”)返回的是10001590.82,函数GetRTUnrealizedPL(account)返回的是指定资金账号的浮动盈亏,例如,GetRTUnrealizedPL(“1999_2-0001887(BaseCurrency)”)返回的是1076.39,函数GetRTAccountNetWorth(account)返回的是指定资金账号的Net Liquidation,例如,GetRTAccountNetWorth(“1999_2-0001887(BaseCurrency)”)返回的是10002667.21。(注意:由于函数的参数是字符串,所以若格式有问题,会导致输出结果为0,所以建议直接在账户列表将资金账号复制到函数参数中,并且加上双引号)
图3. 持仓列表
图3为交易追踪器的持仓列表, 通过函数GetNumPositions(account)可以获取指定资金账号account持仓的商品种类数量,例如,GetNumPositions(“1998_2-0001887”)返回1,因为该资金账户当前只有一个商品有持仓,所以就返回1,GetNumPositions(“1999_2-0001887”)返回3,这3个商品依次排序为” CME.CL 1804”、” HKEX.HSI 1802”、” HKEX.HSI HOT”,图表3中商品” HKEX.HSI HOT (HKEX.HSI 1802)”算两个商品(图表映射下单会出现这种情况),这两个商品具有相同的数量、平均价格、浮动盈亏,在位置排序上,括号里面的商品排在括号外面商品的前面,对于获取持仓列表信息的函数,它们的账户参数需要与交易追踪器持仓列表中显示的资金账号相一致(此处的资金账号没有后缀,那么作为函数的参数也不需要后缀)。
函数GetPositionSymbol(account,location)获取的是指定资金账号account中指定位置的商品名称,例如,GetPositionSymbol(“1999_2-0001887”,1)返回的是” CME.CL 1804”,GetPositionSymbol(“1999_2-0001887”,2)返回的是” HKEX.HSI 1802”, GetPositionSymbol(“1999_2-0001887”,3)返回的是” HKEX.HSI HOT”,对于同一个资金账户所持仓的商品,它们的排序顺序是从上向下,所以商品” CME.CL 1804”的位置排在第一位,括号里面的商品排在括号外面商品的前面,所以” HKEX.HSI 1802”的位置排在” HKEX.HSI HOT”的前面;GetPositionQuantity(symbol,account)返回持仓列表中指定资金账号account指定持仓商品symbol的持仓数量,例如,GetPositionQuantity("HKEX.HSI HOT","1999_2-0001887")返回1,GetPositionQuantity(” CME.CL 1804”,"1999_2-0001887")返回-3;GetPositionAveragePrice (symbol,account)返回持仓列表中指定资金账号account指定持仓商品symbol的平均价格,例如,GetPositionAveragePrice("HKEX.HSI HOT","1999_2-0001887")返回32715;函数GetPositionOpenPL(symbol,account)返回持仓列表中指定资金账号account指定持仓商品symbol的浮动盈亏,例如,GetPositionOpenPL(” HKEX.HSI 1802”,"1999_2-0001887")返回-19850;函数GetPositionTotalCost(symbol,account)返回持仓列表中指定资金账号account指定持仓商品symbol的持仓成本(持仓数量*平均价格),例如,GetPositionTotalCost("CME.CL 1804","1999_2-0001887")返回-194.70(即-3*64.90)。(注意:由于函数的参数是字符串,所以格式问题会导致输出的结果为0,建议直接在持仓列表中将商品名称和资金账号名称复制到函数中,并且加上双引号)
图4. 策略部位列表(经纪商部位)
关键字GetAccountID返回的是交易账号中设置的资金账号(没有后缀),如图6所示;对于交易账号的设置,必须在开启自动交易之前设置好,而这个关键字只有在开启自动交易之后才能取到交易账号中的资金账号(在回测下不会返回任何信息);图4为策略部位列表,显示的是经纪商部位(标记为1的两个栏位,即“经纪商部位”和“持仓损益”)和策略部位的信息,并且只反应已经开启自动交易之后的策略信息(图4中只有一行,反应的只是一个策略的信息),关键字MarketPosition_at_Broker没有参数,返回的是图4中的“经纪商部位”信息(-3表示空头持仓3手,若为4,则表示多头持仓4手),关键字i_MarketPosition_at_Broker的用法与MarketPosition_at_Broker的唯一区别在于前者可以使用在指标中,而后者不能用于指标中(i表示indicator指标的意思)。
关键字AvgEntryPrice_at_Broker没有参数,返回的是当前策略对应的资金账户(与图6中的交易账号对应)所持仓商品合约的开仓均价(与交易总管的开仓均价一致,也与持仓列表中的平均价格一致),并且只能在开启自动交易之后才能取到,关键字i_AvgEntryPrice_at_Broker与AvgEntryPrice_at_Broker的区别参考i_MarketPosition_at_Broker与MarketPosition_at_Broker的区别。(注意:每个策略都对应指定商品合约和交易账号(图6),而关键字AvgEntryPrice_at_Broker、i_AvgEntryPrice_at_Broker、MarketPosition_at_Broker和i_MarketPosition_at_Broker返回的是策略对应的交易账号(图6)的实际持仓商品信息(即经纪商信息));这里的“持仓损益”(图4)与持仓列表(图3)中的“浮动盈亏”是一致的,也与交易总管中的“逐笔浮动盈亏”一致。
图5. 持仓历史列表
图5为持仓历史列表,只用于查看历史持仓信息,每一次交易都会在上面反应最新的信息,并且没有关键字可以取到这个列表上的信息。
图6. 交易账号
2、账户资金数据更新
以上持仓列表、策略部位列表(经纪商部位)的信息都是实时更新的,也就是这两个列表中的数据信息反应的是最新的信息,然而账户列表中的数据信息却不是实时更新的,不同的账户类型的数据更新的频率是不一样的:
Ø MC模拟账户:交易追踪器的账户列表中,期货数据是每次开平仓时更新一次(即某资金账户交易时,账户列表中该资金账户的数据信息才会更新一次)。
Ø Simnow模拟账户:交易追踪器的账户列表中,资金账户数据信息是每1分钟更新一次。
Ø 一创量化通实盘证券账户:交易追踪器中的账户列表中,一创量化通实盘证券账户的数据信息是每天收盘之后进行更新。
二、图表部位
关于图表部位的详细叙述,可以看帖子“OpenEntry和PosTrade系列关键字”的第一章节,在此就不再过多叙述;MC公式编译器中所有关于部位的关键字,除了这里介绍的经纪商部位关键字和策略部位关键字,其它都是图表部位的关键字。
三、策略部位
1、 部位显示
策略部位是指策略的持仓信息,包括进场方向、持仓手数、进场笔数、进场名称、平均价格、持仓损益这些信息,但是只有进场方向、持仓手数、平均价格可以通过关键字取到,其它的信息尽管没有关键字可以取到,但是在执行委托发单时会被用到;进场方向、持仓手数、平均价格以及持仓损益这些策略部位信息可以在交易追踪器的策略部位列表中直观的查看,其它信息并不能被直观的查看(关于策略部位的信息会在下面的内容详细的叙述)。
如图7是策略部位列表中的策略部位信息,“策略部位”(即标记为“1”)是-4,表示当前策略持仓4手空头(若为3,则表示当前策略持仓3手多头);“平均价格”(即标记为“2”)是30453.5,表示的是当前策略的平均进场价格;“策略持仓损益”(即标记为“3”)是47100,表示的是当前策略的盈亏(正值表示盈利额,负值表示亏损额)。
图7. 策略部位列表(策略部位)
2、 关键字
MarketPosition_at_Broker_for_The_Strategy关键字没有参数,返回的是策略部位的持仓手数和方向,也就是返回图7中的策略部位(即标记为“1”)的数值,此时返回的是-4,表示策略持仓4手空头(若为3,则表示策略持仓3手多头);关键字i_MarketPosition_at_Broker_for_The_Strategy与MarketPosition_at_Broker_for_The_Strategy的功能相同,唯一的区别在于前者可以用于指标中,而后者不能用于指标中;关键字AvgEntryPrice_at_Broker_for_The_Strategy没有参数,返回的是策略部位的平均进场价格,也就是返回图7中的平均价格(即标记为“2”)的数值,此时返回的是30453.5,表示4手空头的平均价格;关键字i_AvgEntryPrice_at_Broker_for_The_Strategy与AvgEntryPrice_at_Broker_for_The_Strategy的区别在于前者可以用于指标中,而后者不能用于指标中。(注意:以上4个关键字只有在开启自动交易之后才能取到数值,回测状态下返回的是0) |
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
表1. 策略部位列表(策略部位) 策略部位关键字 | 简要说明 | MarketPosition_at_Broker_for_The_Strategy | 返回策略部位的持仓手数和方向 | i_MarketPosition_at_Broker_for_The_Strategy | 返回策略部位的持仓手数和方向 | AvgEntryPrice_at_Broker_for_The_Strategy | 返回策略部位的平均进场价格 | i_AvgEntryPrice_at_Broker_for_The_Strategy | 返回策略部位的平均进场价格 |
3、 初始留仓部位 这部分的内容应该是最不好理解的,也最容易和图表部位混淆的,为方便叙述,整个过程围绕一个例子进行(如图9所示,图表周期是1分钟),在这个例子中,策略属性中最多允许3笔与目前仓位同向的进场并且当委托由不同的进场语句产生,设置固定委托股数/手数为2手,说到要点的时候,我们再总结一下,最后再简单系统的阐述其原理。
图8. 初始留仓部位 如图8所示,是策略部位的初始留仓部位的设置,尽管这个设置的名称目前叫做“设置经纪商初始的留仓部位”,但是这个名称是有误解的,正确的名称应该是“设置策略部位的初始留仓部位”,也就是这个地方是用于设置策略部位的初始留仓部位,而不是用于设置经纪商部位的初始留仓部位。默认是勾选“显示部位输入窗口”这个选项的,当然也可以勾选下面的“不显示仓位输入窗口”这个选项;“假设经纪商初始的留仓部位是空仓”,表达的意思是“策略部位的初始留仓部位是空仓”;“假设经纪商初始的留仓部位与当前策略执行的一致”,表达的意思是“策略部位的初始留仓部位与图表部位一致”;“使用经纪商实际部位”,表达的意思是“策略部位的初始留仓部位与经纪商部位一致”。
图9. 策略部位和图表部位 |
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
//代码- if date=1180208 and time=1417 then
- sellshort("first") next bar at market;
- if date=1180208 and time=1424 then
- sellshort("second") next bar at market;
- if date=1180208 and time=1440 then
- sellshort("third") next bar at market;
- if date=1180208 and time=1450 then
- sellshort("fourth") next bar at market;
- if date=1180208 and time=1500 then
- buytocover from entry("first") 1 shares next bar at market;
- if date=1180208 and time=1510 then
- buytocover 1 shares next bar at market;
复制代码 如图9所示,当前停留在14:38分钟,我们对不同的模式及不同的策略部位初始留仓部位设置进行讨论:
Ø 选择AA模式,并且勾选“策略部位的初始留仓部位是空仓”,然后点击开启自动交易:当然,由于我们勾选的是“策略部位的初始留仓部位是空仓”,所以自动交易开启之后,策略部位是无持仓的,也就是关键字MarketPosition_at_Broker_for_The_Strategy的返回值是0,此时图表部位有两笔空头持仓,分别是”first”和”second”各2手空头。
当时间进行到14:41时,图表又有一笔空头进场(手数是2,进场名称是”third”),这是因为策略总共允许3笔进场,另一方面,策略部位也有一笔空头进场(手数是2,进场名称是”third”);当时间进行到14:51时,图表不会再有进场了,因为总共只允许3笔进场,另一方面,策略部位又有一笔空头进场(会发送一笔2手的空头市价委托单,并且成交)(手数是2,进场名称是”fourth”),这是因为策略部位也允许3笔进场,而之前只有一笔进场,当前策略部位总共有2笔进场了(由于图表部位和策略部位是独立的,图表部位只是用于显示,而策略部位是用于管理策略的持仓情况);当时间进行到15:01时,将进场名称为”first”的进场平仓1手,因为图表部位上有”first”进场,所以会将该笔进场平仓1手,另一方面,由于策略部位中没有”first”进场,所以不会发送委托单平仓策略部位;当时间进行1511时,将所有的进场都平仓1手,所以图表部位上的”first”、”second”和”third”这三笔进场都会各被平仓1手(只是在图表上进行平仓标记),另一方面,策略部位上有”third”和”fourth”2笔进场,所以各被平仓1手,最终会发送2手的平仓委托单到交易所。
(AA模式自动交易下,图表部位的执行逻辑与回测逻辑是完全一样,也就是此时图表部位与策略部位、经纪商部位是独立运行的,简单的说,AA模式自动交易下,可以完全将此时的图表部位看成是回测状态下,回测状态下图表部位是如何执行的,AA模式自动交易下图表部位就是如何执行的;由于内容的限制,在此不能深入讨论AA模式自动交易下的图表部位,但是请关注后续的帖子)
Ø 选择AA模式,并且勾选“策略部位的初始留仓部位与图表部位一致”,然后点击开启自动交易;当然,由于我们勾选的是“策略部位的初始留仓部位与图表部位一致”,所以自动交易开启之后,策略部位有两笔空头进场,进场名称分别为”first”和”second”,各2手,图表部位也有两笔空头进场,如图9显示的信息;后续不再讨论,因为委托的是市价单到交易所,所以都成成交,这种情况下,后续策略部位和图表部位在这个例子中是相同的进展结果,尽管图表部位和策略部位的运行是相互独立的。
Ø 选择AA模式,并且勾选“策略部位的初始留仓部位与经纪商部位一致”,然后点击开启自动交易;当然,由于我们勾选的是“策略部位的初始留仓部位与经纪商部位一致”,所以自动交易开启之后,策略部位会有一笔多头持仓(无论经纪商的持仓手数是多少,策略部位都会将其识别为1笔进场),有一个问题就是,由于每一笔进场都会有一个进场名称(因为出场时可能需要针对指定的进场进行出场),那么策略部位的初始留仓部位的进场名称应该取什么?其实,这笔进场名称会和图表部位当前持仓的第一笔进场名称是一样的(若图表部位当前没有持仓,那么策略部位的初始留仓部位就没有进场名称),此时图表部位有2笔空头进场,分别为”first”和”second”各2手。
当时间进行到14:41的时候,图表部位有一笔2手的空头进场,进场名称是”third”,另一方面,由于策略部位是1手多头持仓,那么执行sellshort语句就是平仓反向,会先将1手多头平仓,然后反向空头进场2手,进场名称是”third”;当时间进行到14:51的时候,图表部位不会再有进场了,因为最多允许3笔进场,另一方面,策略部位会有一笔2手的空头进场(发送2手空头委托单到交易所),进场名称是”fourth”;当时间进行到15:01时,图表部位”first”进场被平仓了1手,而由于策略部位没有”first”进场,所以策略不会发送委托单到交易所;当时间进行到15:11时,图表部位所有进场都会各被平仓1手,最终图表部位只有2笔进场,分别为”second”和”third”各剩1手,另一方面,策略部位所有的进场都会各被平仓1手,也就是”third”和”fourth”各被平仓1手,最终发送2手平仓单到交易所,策略部位”third”和”fourth”各剩余1手空头。
Ø 选择AA模式,勾选“显示部位输入窗口”并且勾选“始终显示”,那么当开启自动交易时,会弹出策略部位的初始留仓部位的输入窗口,这个窗口默认的会取图表部位的当前持仓方向、持仓手数和平均价格 ,若直接点击“应用”或“确定”,那么开启自动交易之后,策略部位的初始留仓部位与图表部位的当前部位是一样的(和勾选“策略部位的初始留仓部位与图表部位一致”一样);若更改窗口上的持仓方向或者持仓手数或者持仓平均价格,那么策略部位的初始留仓部位会取更改之后的持仓方向、持仓手数和持仓平均价格作为1笔进场,进场名称取图表部位当前持仓的第一笔进场名称(若图表部位当前没有持仓,那么初始留仓部位也没有进场名称);若选择“无持仓”,那么策略部位的初始留仓部位就是空仓。
Ø 选择SA模式,勾选“策略部位的初始留仓部位是空仓”,那么开启自动交易之后,图表部位和策略部位都是空仓;选择SA模式,勾选“策略部位的初始留仓部位与图表部位一致”,那么开启自动交易之后,图表部位和策略部位都是空仓,这是因为开启自动交易之后图表部位本身就是空仓,SA模式自动交易下的图表部位只反应实际交易的情况,不能反应回测状态下的情况;选择SA模式,勾选“策略部位的初始留仓部位与经纪商部位一致”,那么开启自动交易之后,图表部位和策略部位都是持仓1手多头,进场价格当然取经纪商部位平均进场价格,并且图表上会在最后一根bar上(即在14:38分的bar上)标记”Initial Entry”(进场名称)。
选择SA模式,勾选“显示部位输入窗口”并且勾选“始终显示”,当点击开启自动交易时,会弹出一个设置初始留仓部位的窗口,该窗口默认会取经纪商部位的持仓方向、持仓手数、平均进场价格,当点击“应用”或“确定”时,策略部位和图表部位会取经纪商部位的仓位信息作为第一笔进场,并且在图表上标记进场名称”Initial Entry”;当我们将窗口上的默认持仓信息进行更改之后,策略部位和图表部位会取更改之后的仓位信息作为第一笔进场,并且在图表上标记进场名称”Initial Entry”;当在窗口上勾选“无持仓”时,策略部位和图表部位当然就是无持仓了,无持仓情况下不会在图表上进行标记进场名称。
(由于SA模式下,图表部位与策略部位是统一的,也就当更改图表部位时,策略部位也会进行相同的更改,当更改策略部位时,图表部位也会进行相同的更改,一句话就是SA模式下,图表部位和策略部位始终是一致的) |
|
|
|
|
|
|