金字塔决策交易系统

标题: 机构版多帐户交易异常 [打印本页]

作者: 100019719    时间: 2023-8-15 11:41
标题: 机构版多帐户交易异常
机构版多账户,大批量股票交易时发现两个问题:
一、后台程序化大批量交易股票时,多账户不会同时下单,要在图表下方帐户栏中,手动选中的帐户才会触发交易委托。这个表现不稳定,偶尔会正常,但多数时间不正常。
二、存在个别帐户退出,或全部账户退出的现像。

作者: 100019719    时间: 2023-8-15 12:59
帐户异常退出时会出现以下提示:

作者: 技术010    时间: 2023-8-15 13:01
1、代码中是否指定了下单的账户,或者是是否正常勾选了后台中的多账户及策略系数了,否则只会对当前显示的默认账户进行下单的。
2、是登录的模拟还是实盘?查看下日志,看日志中是否有断开的记录?这个可能要持续跟踪下了,看是否经常出现。
作者: 100019719    时间: 2023-8-16 10:23
后台中的多账户及策略系数在哪里设置?
作者: admin    时间: 2023-8-16 10:28
在后台程序化涉及界面中(多账户及策略系数)
https://www.weistock.com/docs/HELP/notes/%E7%A8%8B%E5%BA%8F%E5%8C%96%E4%BA%A4%E6%98%93/%E5%90%8E%E5%8F%B0%E7%A8%8B%E5%BA%8F%E5%8C%96.html#相关设置详解
作者: 100019719    时间: 2023-8-16 13:24
1、后台程序化,多账户及策略系数窗口的入口在哪里?
2、后台程序化多核并行,默认是几核,最大可以设置为几核?
作者: 技术010    时间: 2023-8-16 13:27
1、在后台策略加载界面,如下:
2、一条预警使用1核,最大支持64核。

作者: 100019719    时间: 2023-8-18 10:07
多账户后台程序化,发现还是要选中当前帐户才会下单。
己勾选了后台中的多账户及策略系数,我在代码中是这样指定帐户的:IF strfind(TACCOUNT(1),'178',1)=0 THEN EXIT;//模拟账户
请指正错误,谢谢
作者: 技术010    时间: 2023-8-18 10:36
你指的这段代码的逻辑是没有找到178开头的账户就退出,只对178开头的账户下单啊。你登录的多账户都是178开头的账户?
作者: 技术006    时间: 2023-8-18 10:36
你这句代码只是判断当前激活状态下的账户是否含有178。和下单没有关系。

后台下单语句中,如果是代码实现多账户操作,应该在tbuy中指定多个账户。例如
if  开多条件  then  begin
TBUY(C>O,1000,MKT,0,0,'账户1');
TBUY(C>O,1000,MKT,0,0,'账户1');
end

或者在多账户设置时,对账户进行分组。在代码中填写账户组的名称。
TBUY(C>O,1000,MKT,0,0,'账户组名');
作者: 100019719    时间: 2023-8-18 10:37
我多个帐户,开头的数字是不一样的,178是唯一的帐户
作者: 100019719    时间: 2023-8-18 10:48
技术006 发表于 2023-8-18 10:36
你这句代码只是判断当前激活状态下的账户是否含有178。和下单没有关系。

后台下单语句中,如果是代码实 ...

谢谢,如果在多帐户及策略系数中勾选上该策略要交易的帐号,是否就不需要在代码中去指定帐户了?
作者: 技术010    时间: 2023-8-18 10:48
1、单看你这段限制代码,只是判断当前账户是否是178开头的,如果是,勾选了多账户系数的话,那就对所有账户都下单的,如果不是,那所有账户都不下单了。
2、你的下单语句中是否指定了账户的呢。
作者: 技术006    时间: 2023-8-18 10:52
3.补充, 代码中指定账户的优先级高于账户系数。即,如果你代码中指定了账户。那么此句代码不会再按照多账户系数处理,而是只会对代码中指定的账号下单

作者: 100019719    时间: 2023-8-18 10:56
4个测试帐户开头数字都是不样的,所以我用以下方式来过滤帐户
在策略开头:IF strfind(TACCOUNT(1),'178',1)=0 THEN EXIT;
这样也能在正确的帐户中下单。
问题是要在帐户栏中选中这个帐户,这个帐户才会下单,没选中的则没有交易。
在多帐户及策略系数中也做了相应的指定帐户设置,也是没用。
我在下单语句中尚未指定帐户。
作者: 技术006    时间: 2023-8-18 11:00
本帖最后由 技术006 于 2023-8-18 11:02 编辑


问题是要在帐户栏中选中这个帐户,这个帐户才会下单,没选中的则没有交易。
这句的意思是:选中178这个账号时,只有这个178的账号会下单,其他账号不会下单?


把你代码和相关设置截图贴出来看下。或者提供向日葵账号我们远程看

作者: 100019719    时间: 2023-8-18 11:07
是的,选中哪个帐户,哪个才会下单。
作者: 技术006    时间: 2023-8-18 11:07
直接提供向日葵远程码,我们远程看
作者: 100019719    时间: 2023-8-18 11:11
代码和策略系数都做了相应的指定帐户。
作者: 技术006    时间: 2023-8-18 11:16
账户系数设置,你对需要下单的账户都要勾选。不是只勾选一个。这个勾选想代表当前策略对哪些账号进行下单。

TACCOUNT(1)是返回的账号栏的激活账号。我们指的是这个


作者: 100019719    时间: 2023-8-18 11:39
TACCOUNT(1)是返回的账号栏的激活账号。可能就是这个原因了。
要如何改正呢?
作者: 技术010    时间: 2023-8-18 12:56
1、如果你对某个账户不交易,那直接在多账户中不要勾选那个账户就可以,不需要在代码中进行另外的判断了。
2、如果你需要在代码中对账户进行特别的判断,那只能拆分多个策略,每个策略对应交易某个账户,交易语句中指定交易账户。
作者: admin    时间: 2023-8-18 12:57
你多账户下单,压根不需要有这个TACCOUNT的判断。一个策略条件要么在代码中直接指定下单,要么在设置中勾选需要下单的账号即可。
作者: 100019719    时间: 2023-8-18 14:35
admin 发表于 2023-8-18 12:57
你多账户下单,压根不需要有这个TACCOUNT的判断。一个策略条件要么在代码中直接指定下单,要么在设置中勾选 ...

如果是在TBUY TSELL中指定帐户,会不会导致策略增加更多的计算过程呢,一般TBUY TSELL是放在代码的结尾处。
以及设置中勾选需要下单的账号的方式是怎样工作的

在多帐户模式中,会监测数千只股,哪种方式有更高的运行效率?
谢谢!
作者: admin    时间: 2023-8-18 14:37
两种方式而已。走的过程都是一样。无非是一个自己控制,一个通过设置控制。
作者: 100019719    时间: 2023-8-25 11:02
技术010 发表于 2023-8-18 12:56
1、如果你对某个账户不交易,那直接在多账户中不要勾选那个账户就可以,不需要在代码中进行另外的判断了。
...

单账户交易是可以顺利执行的。
在策略系数中指定账户,也可以实现多账户交易。能看到几个账户有同时的委托,但非常慢。
监控12个股票池,对4个账户下单,金字塔几乎处于卡死的状态,行情都不会刷新,下单也是非常的慢。此时CPU和内存占用不到10%。
机构版多账户股票交易性能表现这么差吗,要如何改善?
作者: 100019719    时间: 2023-8-25 11:19
还有一个问题,如果代码中不指定账户,仅在策略系数中进行多账户设置,TACCOUNT(6)获取的资金不正确。
作者: 技术006    时间: 2023-8-25 11:26
多账户只是程序化下单时进行并发委托下单,它对效率的影响基本可以忽略不计。(账户和账户之间是顺序下单)

影响软件流畅度的最大因素就是计算量。所以要先从计算性能上下手排查。减少股票池后,看行情是否恢复正常的接收速度。


TACCOUNT只会获取当前账户对应的值。多账户应该指定账户获取。TACCOUNT2。或者结合遍历获取账号对应的值。
TACCOUNTCOUNT
TACCOUNTINDEX
作者: 技术010    时间: 2023-8-25 11:31
1、硬件资源的分配是操作系统自主实现的,软件本身没法控制。只是一个预警只能使用到1核,如果要尽量的使用硬件资源,那可以拆分成多个预警分开监控运行。多账户的下单也是从前往后依次顺序下单的,为了减少后续账户下单的滑点,还是建议控制登录的账户数量的,4个账户应该还是可以的,一般不推荐超过4个了。运算效率和硬件资源,运行品种数量、策略复杂度等都有关了,这个可能要综合考虑了,可能要从多个角度来优化了。
2、TACCOUNT(6)这个获取的是当前账户切换显示的账户的资金的,如果你要对各个账户进行单独的控制,那不建议使用多账户系数的功能了,在策略中指定账户,拆分策略,对各个账户单独进行下单控制。
作者: 100019719    时间: 2023-8-25 11:34
技术006 发表于 2023-8-25 11:26
多账户只是程序化下单时进行并发委托下单,它对效率的影响基本可以忽略不计。(账户和账户之间是顺序下单) ...

是计算量太大了。如何实现在代码开始处获取正确的账户,以绕开在非指定账户时执行无谓的计算量?

IF strfind(TACCOUNT(1),'XXXXX',1)=0 THEN EXIT;//当前账户非正确账户时会退出,无法遍历到正确账户
作者: 技术006    时间: 2023-8-25 12:46
本帖最后由 技术006 于 2023-8-25 12:51 编辑

你多账户交易下单中,使用这句话作为限制根本没有意义。既然是希望多账户下单。根源是逻辑条件成立时,按指定的账号都完成下单。至于当前账户是谁根本没有意义。

其次是如果希望得到各个账号的账号相关的信息。用TACCOUNT2t它可以指定账号进而获得指定账号的相关信息。或者拆分策略,每个账户对应一个策略预警。
作者: 100019719    时间: 2023-8-25 13:42
IF strfind(TACCOUNT(1),'XXXXX',1)=0 THEN EXIT;//无意义

我想行判断当前是正确的帐户时才继续运行策略,这样可以提高效率,正确的要怎么做呢?如果只是在策略系数中指定多账户,运行起来会非常慢。
作者: 技术010    时间: 2023-8-25 13:55
1、如果你要在代码中指定具体交易的账户,那直接在下单语句中,或者使用TACCOUNT2获取指定账户的数据来进行交易,没必要先判断下当前账户是否是某个账户。你不想交易的账户,直接不指定这个账户就可以了。
2、如果要在多账户系数中决定不要交易某个账户,那直接不勾选这个账户就可以。
3、所以,用TACCOUNT(1)判断账户是否是想交易的账户的这个判断就没有意义了。
作者: 100019719    时间: 2023-8-25 14:07
技术010 发表于 2023-8-25 13:55
1、如果你要在代码中指定具体交易的账户,那直接在下单语句中,或者使用TACCOUNT2获取指定账户的数据来进行 ...

这样做就是运行起来会非常慢,鼠标都几乎无法操作。
4个账户,下单策略也是简单的,就是监控12个股票池,里面大约3千只股,
作者: 技术010    时间: 2023-8-25 14:11
那这就要看你的硬件配置和预警数量了,3000只品种数量已经是比较高的了。况且你这个语句的限制是限制不住的,也起不到提升计算效率的作用。
作者: 100019719    时间: 2023-8-25 14:21
我的配置是至强CPU,80核,内存128G,金字塔卡死了,占用资源都不到10%,没法充分利用硬件的性能。
有没有代码可以在策略开始时遍历账户,账户正确,才执行策略后面的逻辑,如果当前账户不正确,就查找下一个账户
作者: 技术010    时间: 2023-8-25 14:26
后台最大支持64核,但是1条预警只能使用到1核,如果最大化的利用到硬件资源,那就需要拆分成多条预警,不要一个预警监控所有的品种。另外软件也没法主动来分配使用硬件资源的。没有这个遍历账户的代码的,PEL中没有提供相应的函数来支持。




欢迎光临 金字塔决策交易系统 (https://www.weistock.com/bbs/) Powered by Discuz! X3.4