金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 96|回复: 4

交易个数限制

[复制链接]

149

主题

311

帖子

311

积分

Rank: 4

等级: 专业版

注册:
2025-5-24
曾用名:
发表于 2026-1-19 11:47 | 显示全部楼层 |阅读模式
如何在策略中加入股票或期货交易个数的限制。比如就买入3支股票,即使用有资金也不会再买入开仓。但对于这三支股票,根据开仓条件,是可以多次开仓的。请老师帮写一个代码,谢谢。
回复

使用道具 举报

2

主题

6049

帖子

6049

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-1-19 13:45 | 显示全部楼层
本帖最后由 资深技术05 于 2026-1-19 13:48 编辑

意思是在之前资金限制基础上,追加一个品种数量限制?用在股票还是期货上?
回复

使用道具 举报

149

主题

311

帖子

311

积分

Rank: 4

等级: 专业版

注册:
2025-5-24
曾用名:
 楼主| 发表于 2026-1-19 16:21 | 显示全部楼层
资深技术05 发表于 2026-1-19 13:45
意思是在之前资金限制基础上,追加一个品种数量限制?用在股票还是期货上?

选在股票上吧。
回复

使用道具 举报

1

主题

106

帖子

106

积分

Rank: 8Rank: 8

等级: 超级版主

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

tholdvarietycount('',0,0);//获取当前账户中持仓合约的总个数。

初次开仓条件里,加入   and tholdvarietycount('',0,0)<=3
加仓条件,加入
if tholdvarietycount('',0,0)=1 and STKLABELEX=THOLDINDEXLABEL(1,'')  then con1:=1;
if tholdvarietycount('',0,0)=2 and ( STKLABELEX=THOLDINDEXLABEL(1,'') or STKLABELEX=THOLDINDEXLABEL(2,'') ) then con2:=1;
if tholdvarietycount('',0,0)=3 and ( STKLABELEX=THOLDINDEXLABEL(1,'') or STKLABELEX=THOLDINDEXLABEL(2,'')  or STKLABELEX=THOLDINDEXLABEL(2,'') ) then con3:=1;

and (con1 or con2 or con3)


回复

使用道具 举报

2

主题

6049

帖子

6049

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-1-20 09:40 | 显示全部楼层
基于之前的代码:

[PEL] 复制代码
input:P1(4.5,0.01,1000,0.01),P2(5,0.01,1000,0.01);//定义开仓品种的价格区间
input:总资金(500000,1,1000000,1),策略资金(30000,1,1000000,1),单品种资金(3000,1,1000000,1);
INPUT:最大开仓品种数量(5,1,100,1);
globalvariable:拟占用资金:=0;//用来累计下单但是可能未成交的品种的资金占用


股票池名称:='g1';
状态池名称:='c1';

//资金分配
if not(islastbar) then exit;

name:=formulaname&'_bk';//自定义的板块的名称
nm:=stkcount(name);//自定义的板块中的品种数量

当前策略资金:=0;//从账户栏中 统计自选股品种 当前的投入总金额

path:='C:\'&FORMULANAME&'_日志.txt';//日志输出路径

debugfile(path,'nm:%.2f',nm);

当前已有的持仓数量:0;

uncompleted:=0;//判断当前自选股中的品种是否有未成交
for i=1 to nm do
begin
hlabel:= stkfromblk(name,i);

//有持仓或者 开仓未成交 持仓品种数量+1
if  tbuyholdingex('',hlabel,4)>0 then 当前已有的持仓数量:=当前已有的持仓数量+1;

//当完全成交时候
if tbuyholdingex('',hlabel,2)<>0 and  tisremainex(1,'',hlabel)=0  then
begin
品种已占用的资金:=tbuyholdingex('',hlabel,2)*tavgenterpriceex2('',hlabel,0);
当前策略资金:=当前策略资金+品种已占用的资金;//累计当前的初始投入资金
debugfile(path,hlabel&'|已占用资金1:%.2f',品种已占用的资金);
debugfile(path,'当前策略资金:%.2f',当前策略资金);
continue;
end

tis:=tisremainex(1,'',hlabel);//是否有未成交
tis_p:tsubmitid(1,'',hlabel, 3,0);//未成交的价格
tis_v:tsubmitid(1,'',hlabel, 0,0);//未成交的数量
thd:tbuyholdingex('',hlabel,2);
tav:tavgenterpriceex2('',hlabel,0);

//一轮开仓后如果有开仓未成交,那么重新统计拟占用资金
if tis and uncompleted=0  then 
begin 
uncompleted:=1;
拟占用资金:=0;
debugfile(path,hlabel&'当前有未成交,重新统计拟占用资金',0);
end 

//如果 品种不在持仓中了  且没有开仓未成交从板块中直接删除即可
if thd=0 and  tis=0  then
begin
x:=deletefromblock(hlabel,name);
end

//如果有开仓未成交
if thd>=0 and  tis=1  then
begin
//改品种未成交的资金+部分成交的资金占用
品种拟占用的资金:=tis_p*tis_v+thd*tav;
拟占用资金:=拟占用资金+品种拟占用的资金;
debugfile(path,hlabel&'|品种拟占用的资金:%.2f',品种拟占用的资金);
debugfile(path,'累计拟占用资金:%.2f',拟占用资金);
end


end    




//没有 自选股品种中 没有开仓未成交时候重置 全局变量
if uncompleted=0 then 
begin 
拟占用资金:=0;
debugfile(path,'当前无未成交,拟占用资金重置为0',0);
end 



//遍历股票池
for i=1 to tstockpoolcount(股票池名称,状态池名称) do 
begin
        
if 当前已有的持仓数量>= 最大开仓品种数量 then CONTINUE;
//股票池中的品种代码 
code:=tstockpoolinxlabel(股票池名称,状态池名称,i);

c1:=callstock(code,vtclose,6,0);//这个品种最新价
ss:=100*floor(单品种资金/(c1*100));//每支股票能买入的股数
单品种拟占用资金:ss*c1;
总资金控制:=taccount(28)+单品种拟占用资金+拟占用资金<总资金;//当前总市值+单品种拟占用资金 小于总资金限制
策略资金限制:当前策略资金+拟占用资金+单品种拟占用资金<策略资金;

资金控制:策略资金限制 and 总资金控制 and ss>0;

//如果资金条件不满足,直接遍历下一个品种
if not(资金控制) then continue;




kd:c1>P1 and c1<P2;


stknamex:=dynainfo2(219,code);
//剔除st
cond:strfind(stknamex,'ST',1)=0 and  strfind(stknamex,'*ST',1)=0 ;

//该品种没有持仓+没有开仓未成交
if tbuyholdingex('',code,2)=0 and tglobalsubmitex(1,'',code,0)=0 and tisremainex(1,'',code)=0 and cond and kd then 
begin
tbuy(1,ss,lmt,c1,0,'',code),allowrepeat;         
拟占用资金:=拟占用资金+单品种拟占用资金;
debugfile(path,code&' 单品种拟占用资金:%.2f',单品种拟占用资金);
debugfile(path,code&' 开仓后累计拟占用资金:%.2f',拟占用资金);
x:=addtoblock(code,name);
end 

end 

        







总共改动的是这几个地方。其他部分代码 有可能和你本地不一样,就不用管。 你只要对照这几处改的 抄到你本地对应位置就行了。

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-24 06:35 , Processed in 0.142670 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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