金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 192|回复: 5

后台交易只能开仓不能平仓,调试显示“表达式不全”啊

[复制链接]

6

主题

22

帖子

22

积分

Rank: 1

等级: 新手上路

注册:
2025-4-22
曾用名:
发表于 2025-9-2 14:08 | 显示全部楼层 |阅读模式
大咖帮我看看呀,这个策略代码,能正常开仓,但无法平仓,使用后台调试,显示平仓条件不识别。都=0。修改了调试使用IF ISLASTBAR THEN BEGIN格式调试,编译显示“表达式不全”,卡在这儿了啊

//后台表格策略,大盘表格002
INPUT:SS(5,1,10,1);     //定义交易的手数,3手。
手数:=SS;
ZH1:='301806';
PZ1:'SH000001';
持仓量:=800000;
warning_line:=800000;         //可用资金警戒线。

//交易逻辑的基本变量设置:
做空线:3935,COLORMAGENTA;        //日内棘轮做空位置。
锁仓线a:3912,COLORWHITE;          //日内棘轮锁仓做空位置。
压力线2:3900,COLORWHITE;        //多头减仓位置2。
压力线1:3888,COLORWHITE;        //多头减仓位置1。

开盘位a:3875,COLORYELLOW;          //温和高开位置。
开盘位b:3867,COLORYELLOW;          //平开位置。

支撑线1:3857,COLORWHITE;        //空头减仓位置1。
支撑线2:3843,COLORWHITE;        //空头减仓位置2。
锁仓线b:3828,COLORWHITE;         //日内棘轮锁仓做多位置。
做多线:3805,COLORMAGENTA;         //日内棘轮做多位置。

//交易条件:
con4:=indexh>=做空线;
con3:=indexh>=锁仓线a;
con2:=indexh>=压力线2;
con1:=indexh>=压力线1;
con0:=indexh>=开盘位a;

con9:=indexl<=开盘位b;
con8:=indexl<=支撑线1;
con7:=indexl<=支撑线2;
con6:=indexl<=锁仓线b;
con5:=indexl<=做多线;

//控制日内交易次数
IF TTOTALDAYTRADE>=10 THEN EXIT;

//开盘对开进出场交易条件
KD:=open;
KK:=open;
PK:=con0 or con7;
PD:=con0 or con7;



//交易系统发布指令:
//对开做多指令:
IF KD and todayholding=0 then begin
TBUY(KD and TBUYHOLDINGEX(ZH1,'IC00',0)<10,手数,MKT,0,0,ZH1,'IC00');
END

//对开做空指令:
IF KK and todayholding=0 then begin
TBUYSHORT(KK and TSELLHOLDINGEX(ZH1,'IC00',0)<10,手数,MKT,0,0,ZH1,'IC00');
END

Path:='D:\Test\'&FormulaName&StkLabel&'.txt';//Path

DebugFile(Path,StkLabel + '[----PK='+ NumTostr((con0 or con7 and PK and todayholding<0)>0,0)+']',0);
DebugFile(Path,'PK1 con0 or con7:%.2f',con0 or con7);
DebugFile(Path,'PK2 PK and todayholding<0:%.2f',PK and todayholding<0);
//DebugFile(Path,'未成交单数量:%.0f',tRemainQty(0,'','IC00'));
//DebugFile(Path,'金叉:%.0f',Cross(ma(close,5),ma(close,60)));
////MsgOut(Taccount(19)<5000000 and Taccount(6)>0,'资金警戒线,请留意!');

IF ISLASTBAR THEN BEGIN
DEBUGFILE('D:\Test\'&FormulaName&StkLabel&'.txt','未成交单数量 :%.0f',&NUMTOSTR(tRemainQty(0,'','IC00'),0));
END

//平空条件
IF PK and todayholding<0 then begin
tsellshort(PK and TSELLHOLDINGEX(ZH1,'IC00',0)<10,手数,MKT,0,0,ZH1,'IC00');
END

//平多条件
IF PD and todayholding>0 then begin
tsell(PD and TBUYHOLDINGEX(ZH1,'IC00',0)<10,手数,MKT,0,0,ZH1,'IC00');
END



回复

使用道具 举报

25

主题

272

帖子

357

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2025-9-2 14:13 | 显示全部楼层
//调试代码
Path:='D:\Test\'&FormulaName&StkLabel&'.txt';//Path是日志输出的所在目录
IF ISLASTBAR THEN BEGIN
DEBUGFILE(Path,'未成交单数量:%.0f'  &NUMTOSTR(tRemainQty(0,'','IC00'),0),1);
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

22

帖子

22

积分

Rank: 1

等级: 新手上路

注册:
2025-4-22
曾用名:
 楼主| 发表于 2025-9-2 14:28 | 显示全部楼层
谢谢,这一点已经在代码里面改过了,可以编译正常了。现在还是要解决这个代码只能开仓,不能平仓的问题了。真心不知道这个平仓代码问题在哪儿,调试也是为了解决这个问题。这个不能平仓真是头疼。
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-9-2 14:32 | 显示全部楼层
本帖最后由 技术008 于 2025-9-2 14:42 编辑

//平多条件
IF PD and todayholding>0 then begin
tsell(PD and TBUYHOLDINGEX(ZH1,'IC00',0)<10,手数,MKT,0,0,ZH1,'IC00');
END

你这里todayholding是图表今仓,后台你直接用TBUYHOLDINGEX改成
IF PD and TBUYHOLDINGEX(ZH1,'IC00',0)>0 then begin
tsell(PD and TBUYHOLDINGEX(ZH1,'IC00',0)<10,手数,MKT,0,0,ZH1,'IC00');
END


具体可以看tbuyholdingex函数说明,最后一个参数用来控制当日持仓还是所有持仓
另外后台不管多空持仓都是大于0的,不存在说空头持仓是小于0这种说法,你都按实际交易那种判断,比如判断你空头持仓你一定是说我有5手,不会说有-5手的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

22

帖子

22

积分

Rank: 1

等级: 新手上路

注册:
2025-4-22
曾用名:
 楼主| 发表于 2025-9-2 14:42 | 显示全部楼层
我看教程手册里面,todatholding是后台的用法啊。如果要用TBUYHOLDINGEX(AC,STOCK,N),这些参数都是要写的吧?这样不是和下面指令部分的代码重复了?
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-9-2 14:44 | 显示全部楼层
电话我
021-20339087
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 12:13 , Processed in 0.133530 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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