金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 236|回复: 5

可用资金限制开仓相关问题

[复制链接]

1

主题

3

帖子

3

积分

Rank: 4

等级: 专业版

注册:
2025-4-14
曾用名:
发表于 2025-4-14 18:54 | 显示全部楼层 |阅读模式
后台交易,从股票持读入开仓。
意图:当可用资金小于20万时,就不再开仓。
代码如下:
/////////////////////////////////
可用资金:=TACCOUNT(19);
开仓条件:=ISLASTBAR  AND 可用资金>200000;
IF 开仓条件 THEN
begin
买:TBUY(CURRENTTIME>=92500 and CURRENTTIME<=150000 ,100,LMT,if(精准收盘价=当天涨停价,当天涨停价,卖一价+0.05)),NOATTACK;
end

//////////////////////////////////////////////
问题:
当天股票持选出股票较多,可用资金也多于20万。但后台交易一口气将全部资金都买满了,买了很多股票,没有达到当可用资金小于20万时,就不再开仓的要求。
代码哪里出了问题?可否帮我改一下,谢谢
回复

使用道具 举报

2

主题

4974

帖子

4974

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-4-15 09:06 | 显示全部楼层
原因在于信号太集中+账号资金状态的更新比程序执行速度慢。

比如你下单了A品种,按理下单后资金状态就更新了 下个品种下单时候也会判断资金 如果资金条件不满足就不下单。 但是从A品种到B品种运行策略的时间 如果比这个资金更新要快很多,就会导致他们几乎读取到了完全一致的资金 从而导致所有品种都认为当前是可以下单的。


可以考虑这样,给下单增加一个条件:没有任何其他品种的开仓未成交。也就说我必须等前一个品种下单完成。具体代码:TISREMAINEX(1,'','')=0



回复

使用道具 举报

1

主题

3

帖子

3

积分

Rank: 4

等级: 专业版

注册:
2025-4-14
曾用名:
 楼主| 发表于 2025-4-15 09:53 | 显示全部楼层
05老师,还有其它处理方法吗?
您给的这个代码是查询是否有未成交的。但我的策略思路是在9:25到9:30分挂单的,以当前开盘价成交的。如果加了这个条件,有一只股票不能成交,那股票池中其它股票也就停止下单了。
是否可以考虑进行时间延迟、停顿,或是查询一下上一个委托是否下单成功,以达到程序能读到当前正确的可用资金量?
谢谢!
回复

使用道具 举报

2

主题

4974

帖子

4974

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-4-15 10:15 | 显示全部楼层
你如果是集合竞价报单,那可能这个不太好处理了。的确是不能用未成交做判断了。

1.“是否可以考虑进行时间延迟、停顿” 有sleep函数,但是问题是它会阻塞整个进程。本来a-c 三个品种顺序执行策略,用了sleep后面的会先暂停下来。并且后b,c每个品种都会sleep一次。它的影响不可控。可能只能实际实践下来确认是否可行了。  如果你想尝试下 我的建议是在下单之前短暂的sleep下,评估下实际的效果,最好是在所有条件都判断满足之后(除了资金条件) 再sleep下然后判断下资金情况 最后执行下单。

2.“或是查询一下上一个委托是否下单成功”我们的框架下 一个策略下的多个品种,本质上是分开执行的。没办法在不同品种之间进行这种交互的。

至于其他方案 我需要思考下,暂时没有现成的合适的方案。
回复

使用道具 举报

1

主题

3

帖子

3

积分

Rank: 4

等级: 专业版

注册:
2025-4-14
曾用名:
 楼主| 发表于 2025-4-15 10:20 | 显示全部楼层
我在begin后加了一句
SLEEP(1000);
然后把查询可用资金的语句加在了sleep后面,试试效果。
老师觉得可行吗?

begin
SLEEP(500);
可用资金:=TACCOUNT(19);
买:TBUY(CURRENTTIME>=92500 and CURRENTTIME<=150000 AND 可用资金>200000 ,计算价开仓量,LMT,if(精准收盘价=当天涨停价,当天涨停价,卖一价+0.05)),NOATTACK;
end
回复

使用道具 举报

2

主题

4974

帖子

4974

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-4-15 10:30 | 显示全部楼层
你这个会出现很多无效的sleep的。所有条件判断好再sleep。另外可用资金不要赋值给某个变量后再用,直接放到条件里判断就行。


if CURRENTTIME>=92500 and CURRENTTIME<=93000 AND  then
begin
SLEEP(500);
买:TBUY(TACCOUNT(19)>200000 ,计算价开仓量,LMT,if(精准收盘价=当天涨停价,当天涨停价,卖一价+0.05)),NOATTACK;
end


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-5-20 11:11 , Processed in 0.123150 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表