金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1696|回复: 15

批量加减仓

[复制链接]

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
发表于 2026-8-14 17:30 | 显示全部楼层 |阅读模式
想实现用pel批量多账户账户按比例加减仓。可以写示范代码吗?
回复

使用道具 举报

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-8-14 17:34 | 显示全部楼层
能通过循环的方式获得所有持仓的个股吗?
回复

使用道具 举报

1

主题

312

帖子

312

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-8-14 17:59 | 显示全部楼层
有账户持仓函数THOLDCOUNT(AC);取得指定账户持仓品种数量(账户栏上看到的持仓品种数量)

单个账户持仓全平示例,供您参考
[PEL] 复制代码
//只在最后周期有效,防止逐K线模式前面K线刷新进入,可以提高效率。对序列模式不影响。
IF NOT(ISLASTBAR) THEN EXIT;
 
//取得当前活动账户的总持仓品种数量
HC:=THOLDCOUNT('');
//MSGOUT(1,NUMTOSTR(HC,0));

//循环取得持仓
FOR I = 1 TO HC do
BEGIN
    //获取第I个序号的账户持仓品种代码
    HLABEL:= THOLDINDEXLABEL(I,'');
    //MSGOUT(1,HLABEL);
    //取该品种多仓数量,然后平仓
    THC:=TBUYHOLDINGEX('' ,HLABEL,1);
    //MSGOUT(1,'buyholdig'&NUMTOSTR(THC,0));
    TSELL(THC>0,THC,MKT,0,0,'',HLABEL),ALLOWREPEAT;
    //取空仓数量,然后平仓
    THC:=TSELLHOLDINGEX('' ,HLABEL,1);
    //MSGOUT(1,'sellholdig'&NUMTOSTR(THC,0));
    TSELLSHORT(THC>0,THC,MKT,0,0,'',HLABEL),ALLOWREPEAT;
END
回复

使用道具 举报

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-8-14 20:21 | 显示全部楼层
这些品种的持仓成本呢?这个仅仅是获得数量吧?还能直接平所有品种仓位吗?比如我所以持仓增加一半仓位,怎么处理?
回复

使用道具 举报

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-8-15 14:01 | 显示全部楼层
tsell我记得放循环里面,在多账户中好像有问题。时灵时不灵。后面没有办法,只能把账户写死。这个问题还存在吧?
回复

使用道具 举报

1

主题

312

帖子

312

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-8-17 09:24 | 显示全部楼层
本帖最后由 资深技术07 于 2026-8-17 10:11 编辑

3楼的示例,是获取一个账户的持仓数量,并平掉所有持仓的示例,里面的账户名都是空的,默认会取第一个,多账户的在账户处都写上具体账户名即可
函数TAVGENTERPRICEEX(AC,STOCK),可获取取指定帐户品种的平均持仓成本

示例代码里,开仓平仓代码均有示例,请加上具体的限制条件,实现加仓减仓。

[PEL] 复制代码
//只在最后周期有效,防止逐K线模式前面K线刷新进入,可以提高效率。对序列模式不影响。
ZH1:='1000';
IF NOT(TACCOUNT2(53,ZH1)) THEN EXIT;//账户登陆异常直接退出
IF NOT(ISLASTBAR) THEN EXIT;
  
//取得当前活动账户的总持仓品种数量
HC:=THOLDCOUNT(ZH1);
//MSGOUT(1,NUMTOSTR(HC,0));
 
//循环取得持仓
FOR I = 1 TO HC DO
BEGIN
    //获取第I个序号的账户持仓品种代码
    HLABEL:= THOLDINDEXLABEL(I,ZH1);
    //MSGOUT(1,HLABEL);
    
    //获取第I个序号的账户持仓品种均价
    TAVGP:= TAVGENTERPRICEEX(I,ZH1);
    //取该品种多仓数量,然后平仓
    THC:=TBUYHOLDINGEX(ZH1 ,HLABEL,1);
    //MSGOUT(1,'BUYHOLDIG'&NUMTOSTR(THC,0));
    TBUY(THC>0,IF(THC*0.5>2,INTPART(THC*0.5),1),MKT,0,0,ZH1,HLABEL);//持仓增加一半,用0.5表示
    
    
    TSELL(THC>0,THC,MKT,0,0,ZH1,HLABEL),ALLOWREPEAT;//全平
    //取空仓数量,然后平仓
    THC:=TSELLHOLDINGEX('' ,HLABEL,1);
    //MSGOUT(1,'SELLHOLDIG'&NUMTOSTR(THC,0));
    TBUYSHORT(THC>0,IF(THC*0.5>2,INTPART(THC*0.5),1),MKT,0,0,ZH1,HLABEL);//持仓增加一半,用0.5表示
    
    TSELLSHORT(THC>0,THC,MKT,0,0,ZH1,HLABEL),ALLOWREPEAT;//全平
END


本帖子中包含更多资源

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

x
回复

使用道具 举报

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-8-18 17:09 | 显示全部楼层
我的意思是两层循环,第一层是账号,第二层是持仓
回复

使用道具 举报

1

主题

312

帖子

312

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-8-19 09:52 | 显示全部楼层
本帖最后由 资深技术07 于 2026-8-21 13:41 编辑

账号与账号之间是独立的,建议一个账号一个账号判断。
不建议,您多个账号,总是几乎同时进行开仓平仓的操作,被判定为关联账户的风险太高了。
回复

使用道具 举报

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-8-20 07:40 | 显示全部楼层
我明白是独立的啊。循环也是一个账户处理完毕再处理下一个啊。和独立写效果差不多吧。不用循环,账户有几个,复制几份代码,效率低,维护也困难。而且账户是写死在代码中的。增减账户都需要该程序。
回复

使用道具 举报

3

主题

16

帖子

26

积分

Rank: 6Rank: 6

等级: 机构版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2026-8-20 07:48 | 显示全部楼层
改。正常而言,多账户没有这样设计的。代码需要写死在程序中。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-18 04:05 , Processed in 0.219315 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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