金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 879|回复: 19

使用tbuyholdingex开仓过滤时连续开仓的问题

[复制链接]

27

主题

131

帖子

131

积分

等级: 免费版

注册:
2021-6-17
曾用名:
发表于 2024-12-19 11:45 | 显示全部楼层 |阅读模式
代码如下,使用多仓为0的条件过滤后,在实盘中仍出现多次预警开仓的情况,请问如何修正?建议tbuyholdingex参数为2时包含的平多未成交单优化为所有与多相关的委托单?
//开仓模块
th:=TBUYHOLDINGEX('','',2),linethick0;//全部买持
if th=0 and 开多条件 then BEGIN
        dccw:=intpart(dwzj/h/100)*100;
        tbuy(dccw>0,dccw,mkt);
        ykcs:=1;
        //ykcw:=dccw;
        end



重复开仓.png
回复

使用道具 举报

35

主题

9409

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-12-19 13:02 | 显示全部楼层
tbuyholdingex不会判断开仓方向上是否有未成交交单。它只表示持仓的仓位和平仓未成交两部分。

你检查下是否存在开仓未成交的状态,以及提供交易日志给我们看下。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

27

主题

131

帖子

131

积分

等级: 免费版

注册:
2021-6-17
曾用名:
 楼主| 发表于 2024-12-19 13:19 | 显示全部楼层
那我先用多单方向的委托单再判断一下?
wt:=TREMAINQTY(1,'','');//取多单的未成交单
th:=TBUYHOLDINGEX('','',2),linethick0;//全部买持
kdtj:=th=0 and wt=0 and kdzf;
if kdtj then  tbuy(1,100,mkt);
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2024-12-19 13:23 | 显示全部楼层
如果前面的开仓单是正常报单的,只是没有成交,那可以加未成交单来判断下,前提是需要先通过交易日志弄清楚前面开仓的报单为什么没有成交。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

27

主题

131

帖子

131

积分

等级: 免费版

注册:
2021-6-17
曾用名:
 楼主| 发表于 2024-12-19 18:52 | 显示全部楼层
我先把这几个持仓量的函数摘录下来再修改下
th1:=tholding;
{得到当前帐户可用持仓量,多仓返回正数空仓返回负
用法:该函数返回常数
  期货=多空净持仓 - 平仓未成交数
  股票=老仓(可用)总数 - 平仓未成交数量}
th2:=tholding2;//期货=多空净持仓,股票=老仓(可用)总数,包含平仓未成交单
{得到当前帐户实际持仓量,与THOLDING不同是该函数返回结果不会因为当前含有未成交委托单而变化.多仓返回正数空仓返回负
用法:
该函数返回常数。
  期货=多空净持仓(包含平仓未成交数量)
  股票=老仓(可用)总数(包含平仓未成交数量)}
th3:=tbuyholding();//
{N=0时,表示取当日买持(股票为可用持仓)
  期货=多头今仓数量 - 多头平今未成交数量
  股票=老仓(可用)总数量 - 多头平仓未成交数量,
N=1时,表示取全部买持
  期货=多头总持数量  - 多头平仓未成交数量
  股票=总持数量 - 多头平仓未成交数量.
例如:
1、当某品种当前无持仓或空仓时,该函数返回值为0
2、当某品种当前持有5手多仓时,该函数返回值为5.}
th4:=TBUYHOLDINGEX('','',2),linethick0;//全部买持(包含未成交平多单)
{取指定帐户品种的买入持仓量(多头持仓),
用法:
TBUYHOLDINGEX(AC,STOCK,N),AC为指定的帐户名,若为空表示取当前默认帐户
STOCK为指定的品种,若空表示当前品种。
N表示类型,
N=0时,表示取当日可用买持(股票为可用持仓)
  期货=多头今仓数量 - 多头平仓未成交数量
  股票=老仓(可用)总数 - 平仓未成交数量,
N=1时,表示取全部可用买持(不包含未成交平多单)
  期货=多头总持数量 - 平仓未成交数量
  股票=老仓(可用)总数 - 平仓未成交数量,
N=2时,表示取全部买持(包含未成交平多单)
  期货=多头总持数量
  股票=总持数量(今老仓之和),
N=3时,表示取平多未成交单数量.
例如:
1、当该账户某品种当前无持仓或空仓时,该函数返回值为0
2、当该账户某品种当前持有5手多仓时,该函数返回值为5.}

补充内容 (2024-12-19 19:18):
TISREMAIN(N)
{N为委托方向.0所有方向;1开多;2平多;3开空;4平空
返回值:  无未成交时返回 0  有未成交时返回 1
注意:
1.该函数只有在后台程式化交易运行中有效。该函数依赖TBUY等交易语句或者在交易监控中的手工...
回复

使用道具 举报

27

主题

131

帖子

131

积分

等级: 免费版

注册:
2021-6-17
曾用名:
 楼主| 发表于 2024-12-24 10:20 | 显示全部楼层
技术006 发表于 2024-12-19 13:02
tbuyholdingex不会判断开仓方向上是否有未成交交单。它只表示持仓的仓位和平仓未成交两部分。

你检查下 ...

我现在做了这样的修改,但159555等品种还是有两次开仓,交易日志附后
kdzf:=(ttype(1)=0 and szz)or(ttype(1)=2 and szt);//为避免未来函数问题用状态值
qbcw:=TBUYHOLDINGEX('','',2),linethick0;//N=2时,表示取全部买持(包含未成交平多单)  期货=多头总持数量 股票=总持数量(今老仓之和),
wcj:=TISREMAIN(1);//未成交--开多方向有无未成交单,无未成交时返回 0  有未成交时返回 1
kdtj:=qbcw=0 and wcj=0 and kdzf;
if kdtj then BEGIN
dccw:=intpart(dwzj/h/100)*100;
tbuy(dccw>0,dccw,mkt);
ykcs:=1;
//ykcw:=dccw;
end

PleaceOrder.txt2024-12-24 09#40#13.txt

500.02 KB, 下载次数: 152

回复

使用道具 举报

35

主题

9409

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-12-24 10:30 | 显示全部楼层
lcgs005 发表于 2024-12-24 10:20
我现在做了这样的修改,但159555等品种还是有两次开仓,交易日志附后
kdzf:=(ttype(1)=0 and szz)or(tty ...

两次开仓的代码行分别是第60行和71行。排查下71行代码的相关条件因子的变化过程。
或者直接使用dbugfile输出下单条件因子的值进行定位分析。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-12-24 10:32 | 显示全部楼层
截图202412241031196952.png

从日志里看是不同下单语句触发的。

检查下另外一处下单语句里的条件控制是否完整。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

27

主题

131

帖子

131

积分

等级: 免费版

注册:
2021-6-17
曾用名:
 楼主| 发表于 2024-12-24 10:46 | 显示全部楼层
技术009 发表于 2024-12-24 10:32
从日志里看是不同下单语句触发的。

检查下另外一处下单语句里的条件控制是否完整。

谢谢你,你给我指出了一个关键,是哪行触发的,我重点排查下这两行,另外,我那语句中的两个函数,取全部多单持仓和取是否有多单未成交单的,用的有没有问题,请指导
回复

使用道具 举报

27

主题

131

帖子

131

积分

等级: 免费版

注册:
2021-6-17
曾用名:
 楼主| 发表于 2024-12-24 11:20 | 显示全部楼层
目前输出发现,是这两句中的两个函数取的值在实际开仓后的第3根K才取到>0的值造成的,是否函数的使用位置有问题?
qbcw:=TBUYHOLDINGEX('','',2),linethick0;//N=2时,表示取全部买持(包含未成交平多单)  期货=多头总持数量 股票=总持数量(今老仓之和),
wcj:=TISREMAIN(1);//未成交--开多方向有无未成交单,无未成交时返回 0  有未成交时返回 1
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-6 03:10 , Processed in 0.206117 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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