金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 592|回复: 7

想编一个最近5次交易胜率的代码

[复制链接]

4090

主题

4160

帖子

4185

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-8-16 09:06 | 显示全部楼层 |阅读模式
请教:想编一个最近5次交易胜率的代码,想不出来,有这样的函数吗?

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

使用道具 举报

31

主题

7771

帖子

7781

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-8-16 09:07 | 显示全部楼层
sl:numprofit(1)>0;
s2:numprofit(2)>0;

看numprofit函数说明,1表示最近一次,2表示倒数第二次,5次的话自己罗列下然后就是了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

20

主题

109

帖子

109

积分

等级: 免费版

注册:
2022-3-11
曾用名:
发表于 2024-8-16 12:27 | 显示全部楼层
NUMPROFIT(N),取第距离现在第N次交易的盈亏数额。
例如:
NUMPROFIT(1)表示最近一次的盈亏数额。
注意:
该函数仅在逐K线计算模式下有效, 并且只能用在BUY,SELL等新图表交易系统中,不能与旧图表交易系统ENTERLONG,EXITLONG等混用。

这个是盈亏数额,不是胜率,相关的还有
NUMWINTRADE统计策略根据历史数据运行至今出现过连亏情况的总次数。
NUMSEQLOSS统计策略根据历史数据运行至今出现过连盈情况的总次数。

这都不是用来表达最近5次的胜率。
我试着用:

IF KKPD OR KDPK=0 AND 模拟持仓=1 THEN BEGIN
   模拟平仓价:=CLOSE;//记录平仓价
   该笔盈亏:=模拟平仓价-模拟开仓价;//在模拟交易模块中我们只需计算上一笔交易是赚还是亏,在这里我只计算盈亏最后的点数
   模拟持仓:=0;//将全局变量*模拟持仓*初始化为0
   IF 该笔盈亏>0 THEN BEGIN
    //真实系统下单开关:=0;//0代表模拟交易上一笔是赚钱的。
    模拟开仓价:=0;//将全局变量*模拟开仓价*初始化为0
    模拟平仓价:=0;//将全局变量*模拟开仓价*初始化为0
    盈利次数:=盈利次数+1;
   END
   IF 该笔盈亏<=0 THEN BEGIN
    //真实系统下单开关:=1;//1代表模拟交易上一笔是亏钱的。
    模拟开仓价:=0;//将全局变量*模拟开仓价*初始化为0
    模拟平仓价:=0;//将全局变量*模拟平仓价*初始化为0  
   亏损次数:=亏损次数+1;
   END
   交易次数:=交易次数+1;
END

IF KKPD AND 模拟持仓=0 THEN BEGIN
   模拟开仓价:=CLOSE;//记录开仓价
   模拟持仓:=-1;//模拟持仓为-1
END

IF KDPK OR KKPD=0 AND 模拟持仓=-1 THEN BEGIN
   模拟平仓价:=CLOSE;//记录平仓价
   该笔盈亏:=模拟开仓价-模拟平仓价;//在模拟交易模块中我们只需计算上一笔交易是赚还是亏,在这里我只计算盈亏最后的点数
   模拟持仓:=0;//将全局变量*模拟持仓*初始化为0
   IF 该笔盈亏>0 THEN BEGIN
    //真实系统下单开关:=0;//0代表模拟交易上一笔是赚钱的。
    模拟开仓价:=0;//将全局变量*模拟开仓价*初始化为0
    模拟平仓价:=0;//将全局变量*模拟开仓价*初始化为0
    盈利次数:=盈利次数+1;
   END
   IF 该笔盈亏<=0 THEN BEGIN
    //真实系统下单开关:=1;//1代表模拟交易上一笔是亏钱的。
    模拟开仓价:=0;//将全局变量*模拟开仓价*初始化为0
    模拟平仓价:=0;//将全局变量*模拟开仓价*初始化为0
    亏损次数:=亏损次数+1;
   END
   交易次数:=交易次数+1;
END

但后面就是没法在编写出最后五次交易时,盈利次数等于多少,亏损次数等于多少。你给的函数是实际交易的,这也没关系,但它不是胜率,是不是我需要把每次的单独测出来,比如用循环判断近5次的每次盈利,然后再统计?这个方法会不会有点笨了?

我还是希望能通过上面的模拟方式来实现,这样我才能进行回测,请大神指教。
1、有没有能直接实现最近5次胜率的函数?
2、有没有办法在我写的那个代码基础上,编写出模拟最近5次交易的盈利次数等于多少,亏损次数等于多少?
回复

使用道具 举报

31

主题

7771

帖子

7781

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-8-16 13:12 | 显示全部楼层
盈亏金额大于0就是表示是盈利的啊
你写个五个
然后加起来除以5就是胜率了


sl:numprofit(1)>0;
s2:numprofit(2)>0;

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

使用道具 举报

20

主题

109

帖子

109

积分

等级: 免费版

注册:
2022-3-11
曾用名:
发表于 2024-8-16 17:16 | 显示全部楼层
VARIABLE:S[]:=0;
FOR N=1 to 5 do S[N]:=NUMPROFIT(N)>0;
然后怎么对这个数组求和呢?我没找到函数对这个S[]进行求和。
回复

使用道具 举报

31

主题

7771

帖子

7781

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-8-16 17:24 | 显示全部楼层
别写循环,就直接一个个加起来就好了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

20

主题

109

帖子

109

积分

等级: 免费版

注册:
2022-3-11
曾用名:
发表于 2024-8-16 17:26 | 显示全部楼层
我要写近100次交易的,需要用到循环呀。
我想用这个
VAR 盈利次数:=0;
FOR N=1 to 100 do 盈利次数:=if(NUMPROFIT(N)>0,盈利次数+1,盈利次数);
但计算结果是错的。
回复

使用道具 举报

20

主题

109

帖子

109

积分

等级: 免费版

注册:
2022-3-11
曾用名:
发表于 2024-8-16 17:40 | 显示全部楼层
从最后一个周期开始,回朔过去的N次交易结果,然后统计结果,我想了很久还是没有办法编写出来。这个函数比NUMSEQWIN()和PERCENTWIN要灵活一些。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 09:43 , Processed in 0.239925 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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