金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1307|回复: 8

请教实现判断亏损持仓数量的代码

[复制链接]

38

主题

85

帖子

95

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
发表于 2023-5-24 09:57 | 显示全部楼层 |阅读模式
技术支持你好,我想实现:每个品种轮询的时候统计持仓亏损单的数量n,if n<=5就不执行开仓命令,否则进入if判断执行开仓语句。能否帮忙写一下代码?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2023-5-24 10:00 | 显示全部楼层
您的问题正在查看中,请稍后
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2023-5-24 10:25 | 显示全部楼层
//只在最后周期有效,防止逐K线模式前面K线刷新进入,可以提高效率。对序列模式不影响。

IF NOT(ISLASTBAR) THEN
EXIT;

N:=0;
//取得当前活动账户的总持仓品种数量

HC:=THOLDCOUNT('');
//MSGOUT(1,NUMTOSTR(HC,0));
//循环取得持仓
FOR I = 1 TO HC do
BEGIN
//获取第I个序号的账户持仓品种代码
HLABEL:= THOLDINDEXLABEL(I,'');
//如果多单或空单是亏损,则N+1
if TAVGENTERPRICEEX2('',HLABEL,0)<DYNAINFO2(7 ,HLABEL) or TAVGENTERPRICEEX2('',HLABEL,1)>DYNAINFO2(7 ,HLABEL) then
N:=N+1;
end

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

使用道具 举报

38

主题

85

帖子

95

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
 楼主| 发表于 2023-5-24 10:29 | 显示全部楼层
我现在进展到可以统计出持仓亏损单的数量n,但是遇到一个问题:一旦满足条件if n<=5的时候,所有监控板块里面的品种都会开仓,实际上我想要的效果是比如轮询到玉米,只要玉米一个品种开仓,然后其它品种一个个的轮着来判断n<=5,下面是我的代码,看一下能否帮忙修改达到我要的效果:

//每次轮询前先统计亏损仓位的个数
TH:=THOLDCOUNT('');
TEMP_STR:='';//保存品种代码集合
j:=0;
FOR I=1 TO TH do
BEGIN
HLABEL:= THOLDINDEXLABEL(I,'');

//判断当前代码集合中是否已经存在,不存在则进行统计。存在则不进入统计
if STRFIND(TEMP_STR,','&HLABEL,1)=0 then begin
        //将不在代码集合中的品种添加到代码集合中。
        TEMP_STR:=STRCAT( TEMP_STR, ','&HLABEL );       
        if TBUYHOLDINGEX('',HLABEL,2)>0 and (DYNAINFO2(7 ,HLABEL)-TAVGENTERPRICEEX2('',HLABEL,0))/TAVGENTERPRICEEX2('',HLABEL,0)*100<=0.1 then
        j:=j+1;
        if TSELLHOLDINGEX('',HLABEL,2)>0 and (TAVGENTERPRICEEX2('',HLABEL,1)-DYNAINFO2(7 ,HLABEL ))/TAVGENTERPRICEEX2('',HLABEL,1)*100<=0.1 then
        j:=j+1;
END
end   
lossnum:J;
DEBUGFILE('E:\SHIPAN.TXT',stklabel+'lossnum数量:%.0f',lossnum);

//*************开仓模块*****************
//开多
if j<=4 then BEGIN
    if tbuyholdingex('',STKLABEL,2)=0 then BEGIN
                TBUY(1,手数,LMT,close);       
                goto QUITLINE;    //开完仓的品种不需要再执行后面的语句
        END
END
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2023-5-24 10:32 | 显示全部楼层
if N>5 and EXTGBDATA('num')=0 then
begin
        开仓逻辑
        EXTGBDATASET('num',1);
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2023-5-24 10:34 | 显示全部楼层
只能用一个全局变量去控制,有过开仓后把这个变量置为1,那么当其他品种运行时候读取这个全局变量发现他不是0就不会开仓了

本身后台程序的设计逻辑是策略在每个品种上单独的执行,互相之间本就是一种互不干扰的状态
如果你要强行要进行品种和品种之间进行一些关联分析比较复杂需要用extgbdata这类整个金字塔内共享的全局变量去进行控制,这种共享变量一般来说是比较考验编程功底的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

38

主题

85

帖子

95

积分

Rank: 4

等级: 专业版

注册:
2022-1-11
曾用名:
 楼主| 发表于 2023-5-24 14:26 | 显示全部楼层
我测试了你写的全局变量,确实控制住了其它品种不再开仓。但是我想要的效果是:比如我程序定死最多只持有n=4个亏损的单,当n=2时可以开2个品种,使用这种全局变量的方式,只能开一种。怎么写代码能实现我说的效果?
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2023-5-24 14:34 | 显示全部楼层

if N>5 and EXTGBDATA('num')<2 then
begin
        开仓逻辑
        EXTGBDATASET('num',EXTGBDATA('num')+1);
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2023-5-24 14:35 | 显示全部楼层
每开过一个品种,把num全局变量+1,然后赋值回去
然后通过对这个全局变量控制小于2才能开仓来控制

还是需要您对全局变量非常熟悉,要了解这种一个变量做全局控制的想法
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 18:23 , Processed in 0.266350 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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