金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3611|回复: 8

如何用代码写出总交易时间(天),持仓时间(天),空仓时间(天)。

[复制链接]

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
发表于 2023-6-29 13:57 | 显示全部楼层 |阅读模式
如何用代码写出总交易时间(天),持仓时间(天),空仓时间(天)。(用天数表达,不用多少根)






补充内容 (2023-6-29 14:00):
还有,总共交易多少天

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-6-29 14:48 | 显示全部楼层
第一个这样,测试范例如下:
交易日:sum(TODAYBAR=1,barpos);

第二个:
VARIABLE:ct:=0;

//交易语句写在这里

if holding<>0 then ct:=ct+1;

持仓天数:count(time=CLOSETIME(0),ct)+1;//平仓当天最后持仓是0 ,所以补上1

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

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-6-29 14:57 | 显示全部楼层

VARIABLE:ct2:=0;
if holding=0 then ct2:=ct2+1;

Notd:0;
v1:=sum(TODAYBAR=1,ct2);
if holding<>0  and ct2<>0 then
begin
ct2:=0;
notd:=v1;
end

r:hhv(notd,v1)-1;

//交易语句



最大空仓时间:count(time=CLOSETIME(0),ct2)+1;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
 楼主| 发表于 2023-6-29 16:33 | 显示全部楼层
技术009 发表于 2023-6-29 14:57
VARIABLE:ct2:=0;
if holding=0 then ct2:=ct2+1;

谢谢老师,,第一个对着,但是,持仓时间(天),空仓时间(天),数字对不上呀?完整代码,和测试截图如下:
INPUT:NMIN(10,1,100,1);

//
ma1:MA(c,40);
ma2:MA(C,950);
ma3:MA(c,100);

//交易条件
开多条件:CROSS(ma1,ma2)and holding=0;
开空条件:CROSS(ma2,ma1)and holding=0;

收盘平仓:=TIME>=CLOSETIME(0)-NMIN*100;//收盘平仓

平多条件:(CROSS(ma3,ma1) OR 收盘平仓)and holding=1;
平空条件:(CROSS(ma1,ma3) OR 收盘平仓)and holding=-1;



//第二个:持仓天数
VARIABLE:ct:=0;
//交易语句写在这里

//交易系统
开多:BUY(开多条件 ,1,MARKET);
//开空:BUYSHORT(开空条件,1,MARKET);

平多:SELL(平多条件,1,MARKET);
//平空:SELLSHORT(平空条件,1,MARKET);

//
if holding<>0 then ct:=ct+1;
持仓天数:count(time=CLOSETIME(0),ct)+1;//平仓当天最后持仓是0 ,所以补上1


//**********************输出
AddTestReport('持仓天数',持仓天数);




VARIABLE:ct2:=0;
if holding=0 then ct2:=ct2+1;

Notd:0;
v1:=sum(TODAYBAR=1,ct2);
if holding<>0  and ct2<>0 then
begin
ct2:=0;
notd:=v1;
end

r:hhv(notd,v1)-1;

//交易语句

最大空仓时间:count(time=CLOSETIME(0),ct2)+1;

AddTestReport('最大空仓时间',最大空仓时间);





补充内容 (2023-6-29 16:35):
测试品种,螺纹连续,2023.3.1---2023.4.20,一分钟周期

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-6-29 17:10 | 显示全部楼层
[PEL] 复制代码
INPUT:NMIN(10,1,100,1);
VARIABLE:ct:=0;
VARIABLE:ct2:=0;

ma1:=MA(c,40);
ma2:=MA(C,950);
ma3:=MA(c,100);





HD1:=HOLDING;
//交易条件
开多条件:=CROSS(ma1,ma2)and holding=0;
开空条件:=CROSS(ma2,ma1)and holding=0;

收盘平仓:=TIME>=CLOSETIME(0)-NMIN*100;//收盘平仓

平多条件:=(CROSS(ma3,ma1) OR 收盘平仓)and holding=1;
平空条件:=(CROSS(ma1,ma3) OR 收盘平仓)and holding=-1;


开多:BUY(开多条件 ,1,MARKET);
平多:SELL(平多条件,1,MARKET);

HD2:=HOLDING;
if count((HD1+HD2)<>0,TODAYBAR)>=1 and time=CLOSETIME(0) then ct:=ct+1;
持仓天数:ct;//平仓当天最后持仓是0 ,所以补上1



"最大空仓时间" 这个我再看下,回测里的统计方式没搞清怎么处理的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
 楼主| 发表于 2023-6-29 18:06 | 显示全部楼层
技术009 发表于 2023-6-29 17:10
[mw_shl_code=pel,true]INPUT:NMIN(10,1,100,1);
VARIABLE:ct:=0;
VARIABLE:ct2:=0;

好的,谢谢老师
回复

使用道具 举报

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
 楼主| 发表于 2023-6-30 12:57 | 显示全部楼层
技术009 发表于 2023-6-29 17:10
[mw_shl_code=pel,true]INPUT:NMIN(10,1,100,1);
VARIABLE:ct:=0;
VARIABLE:ct2:=0;

老师,持仓时间如果放在日线上,是不是取掉and time=CLOSETIME(0)这句,变成
if count((HD1+HD2)<>0,TODAYBAR)>=1  then ct:=ct+1;
就可以了?
另外,最大空仓时间(天),你那里有思路了吗?我把你的持仓时间公式反着来,试了下,还是不行。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-6-30 13:40 | 显示全部楼层
是的,如果是日线,则不需要做那个判断。

[PEL] 复制代码
INPUT:NMIN(10,1,100,1);
VARIABLE:ct2:=0;


ma1:=MA(c,40);
ma2:=MA(C,50);
ma3:=MA(c,60);





HD1:=HOLDING;
//交易条件
开多条件:=CROSS(ma1,ma2)and holding=0;
开空条件:=CROSS(ma2,ma1)and holding=0;

收盘平仓:=TIME>=CLOSETIME(0)-NMIN*100;//收盘平仓

平多条件:=(CROSS(ma3,ma1) OR 收盘平仓)and holding=1;
平空条件:=(CROSS(ma1,ma3) OR 收盘平仓)and holding=-1;


开多:BUY(开多条件 ,1,MARKET);
平多:SELL(平多条件,1,MARKET);

HD2:=HOLDING;



V1:HD1=0 AND  HD2=0;

//如果是日线 则不需要判断 TIME=CLOSETIME(0)
IF TIME=CLOSETIME(0) AND ALL(V1,TODAYBAR) then ct2:=ct2+1;
if time=CLOSETIME(0) and any(not(v1),TODAYBAR) then ct2:=0;
最大空仓时间:hhv(ct2,0);


我刚才测试了几个周期的回测 看上去没啥问题,你本地再试试看。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

39

主题

147

帖子

147

积分

Rank: 2

等级: 标准版

注册:
2023-6-14
曾用名:
 楼主| 发表于 2023-6-30 17:52 | 显示全部楼层
技术009 发表于 2023-6-30 13:40
是的,如果是日线,则不需要做那个判断。

[mw_shl_code=pel,true]INPUT:NMIN(10,1,100,1);

嗯,好的,谢谢老师
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-28 05:57 , Processed in 0.152993 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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