金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 100018518

如何实现后台策略某条件在后台程序化启动时只执行一次

[复制链接]

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-7-7 08:33 | 显示全部楼层
技术006 发表于 2022-7-7 08:23
1.是,设置中指定的具体品种就是用开针对转换的。
2.不行,有很多边界情况,除非你觉得你有能力进行逻辑处 ...

3.不对,哪个函数标识是针对图表理论持仓的,基本没有什么意义。除了上期所外,其他的市场实际上都是遵循先开先平原则。只是手续费按照高的收。所以还是躲不过去的。除非你没有今仓

谢谢老师。若非上期所的品种,上述代码逻辑改为:若老仓手数大于平仓手数,先平老仓直到老仓为0,不足的改为开仓对锁。这样可以吗?
回复

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-7-7 08:35 | 显示全部楼层
//------------------------------------------优先平老仓后平今仓对锁下单程序-------------------------------------------------

if switch0>0 then BEGIN

   if TbuyHY>=switch0 then BEGIN

            //CLOSEPOSMODE:1;

                tsell(1,switch0,mkt);

   end         

   if TbuyHY>0&&TbuyHY<switch0 then BEGIN

            //CLOSEPOSMODE:1;

                tsell(1,TbuyHY,mkt);

            //CLOSEPOSMODE:0;

                tbuyshort(1,switch0-TbuyHY,mkt);

   end

   if TbuyHY<=0 then BEGIN

            //CLOSEPOSMODE:0;

                tbuyshort(1,switch0,mkt);

   end                  

                //tsell(1,switch0,mkt);

                //EXTGBDATASET(mswitch0,0);

end
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-7-7 08:49 | 显示全部楼层
这样可以
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-7-7 08:53 | 显示全部楼层

老师好,请问有没有函数确认哪些仓位是老仓呢,换句话说,如何选出老仓?

补充内容 (2022-7-7 08:55):
因为tbuyholdingex('',STKLABEL,0)函数可以识别老仓,就一定可以有办法标记老仓,供用户优先平调。谢谢,没有函数,建议增加,这不是难事,请考虑。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-7-7 08:58 | 显示全部楼层
目前没有的。目前上期所的今老仓 就是用持仓函数做差值算出来的。
需求收到了,我们会反馈给产品和开发的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-7-15 11:16 | 显示全部楼层
老师好:
最近后台实盘进行策略运行。由于本人对于后台策略书写是个新手。一直不能达到目标开平仓。请老师帮忙解决:
目的:
一:股票池选股
   mhold0:=STKNAME()&'Zhold0';
   mhold:=STKNAME()&'Zhold';
   abb:=time0-timetotime0(dynainfo(207));//结束倒数第一秒
   akk:=timetotime0(dynainfo(207))-ref(time0,1);
   TCD01:islastbar||abb<=1;//K结束第一秒
   TCD02:islastbar||akk<=1;//K开始第一秒
   if BP1=1 and TCD01 then begin
     buy(1,lots,markt);
     EXTGBDATASET(mhold0,holding);
  end
   if BK1=1 and TCD01 then begin
     sell(1,lots,markt);
     EXTGBDATASET(mhold0,holding);
  end
   if BK2=1 and TCD02 then begin
     buy(1,lots,markt);
     EXTGBDATASET(mhold0,holding);
  end
//此处EXTGBDATA(mhold0)=0表示策略运行至此处综合结果是平仓,EXTGBDATA(mhold0)<>0表示策略运行至此处综合结果是开仓
if (EXTGBDATA(mhold0)=0&&BP1)||(EXTGBDATA(mhold0)<>0&&BK1&&TCD01)||(EXTGBDATA(mhold0)<>0&&BK2&&TCD02)then begin
     EXTGBDATASET(mhold, EXTGBDATA(mhold0));
end
二、后台开平仓,每秒扫描一次
   1、每日开盘时直接读入昨日持仓情况:
   2、EXTGBDATA(mhold)=0——平仓:有老多仓,先平老多仓;没老多仓就开空仓对锁;执行一次即刻停止再等待信号改变为EXTGBDATA(mhold)<>0。
   3、EXTGBDATA(mhold)<>0——开仓:有老空仓,先平老空仓;没老空仓就直接开空仓;;执行一次即刻停止再等待信号改变EXTGBDATA(mhold)=0。

问题:
1、不能将股票池很好的结合,经常多开仓
2、不能对锁。
请老师帮忙给个实例解决我的问题。
谢谢老师了

补充内容 (2022-7-15 11:31):
纠正:
if BP1=1 and TCD01 then begin
     sell(1,lots,markt);
     EXTGBDATASET(mhold0,holding);
  end
   if BK1=1 and TCD01 then begin
     buy(1,lots,markt);
     EXTGBDATASET(mhold0,holding);
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-7-15 13:08 | 显示全部楼层
你交易的是期货吧?为啥要用股票池,是什么需求用到了股票池。能少涉及几个功能的情况下,尽量简化整个运行的过程。否则你这个过程那么复杂,我很难理清你这个情况的。



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

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-7-15 14:11 | 显示全部楼层
请老师给个实例:昨天及之前多仓数目如何表示,今仓如何表示。

补充内容 (2022-7-15 14:38):
老师喔,我的问题这么简单,只是我之前是标准版,用的是图表。现在用的是专业版。对如何动态获得老仓、今仓数目迷惑才导致错误。请老师明示,我好对锁,减少手续费,另外我也好用于股票。


补充内容 (2022-7-15 14:39):
才购得的专业版,不熟悉这些函数。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-7-15 14:35 | 显示全部楼层
这不是可以通过持仓函数直接判断的吗?
TBUYHOLDINGEX('','',1)-TBUYHOLDINGEX('','',0) 老仓
今仓  TBUYHOLDINGEX('','',0)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
 楼主| 发表于 2022-7-15 16:03 | 显示全部楼层
麻烦老师
1、帮忙核对开平仓对锁程序:
Lots:=5;//开平仓数量
mhold:=STKNAME()&'Zhold';//《某一股票开多仓信号标识》
mswitch0:=STKNAME()&'Zswitch0';//《某一股票开仓开关状态标识》
TbuyHY:=TBUYHOLDINGEX('','',1)-TBUYHOLDINGEX('','',0) 老多仓
TbuyHT:=TBUYHOLDINGEX('','',0);//今多仓  
TSellHY:=TBUYHOLDINGEX('','',1)-TBUYHOLDINGEX('','',0) 老空仓
TSellHT:=TBUYHOLDINGEX('','',0);//今空仓  
hold0=EXTGBDATA(mhold);//获取《某一股票开多仓信号标识》的持仓数量
switch0=EXTGBDATA(mswitch0);//获取《某一股票开多仓信号标识》的开仓开关状态(0,只可平;1,只可开)
//------------------------------------------平多:优先平老仓后/老仓不足则平今仓转为开空仓对锁下单程序-------------------------------------------------
if hold0=0&&switch0=0 then begin//hold0=0获取《某一股票开多仓信号标识》的持仓数量=0——平仓;switch0=0——开关状态为《只可平》状态
   if TbuyHY>=Lots then BEGIN//老仓数量>=可平数量————优先平老多仓
                tsell(1,Lots,mkt);
   end
   if TbuyHY<Lots&&TbuyHY>0 then BEGIN//老多仓数量<可平数量————优先平老多仓,不足补开空对锁
                tsell(1,TbuyHY,mkt);//优先平老多仓
                tbuyshort(1,Lots-TbuyHY,mkt);//不足补开空对锁
   end
   if TbuyHY=0 then BEGIN//没有老多仓————直接开空仓对锁今多仓
                tbuyshort(1,Lots,mkt);
   end
   EXTGBDATASET(mswitch0,1);//将《某一股票开仓开关状态标识》《只可平》开关状态转为《只可开》状态
end

//------------------------------------------开多:优先平老空仓对锁下单程序/老空仓不足则开多仓-------------------------------------------------
if hold0>0&&switch0=1 then begin//hold0=1获取《某一股票开多仓信号标识》的持仓数量=1——开仓;switch0=0——开关状态为《只可开》状态
   if TSellHY>=Lots then BEGIN//老空仓数量>=可平数量————优先平老空仓
                tsellshort(1,Lots,mkt);
   end
   if TSellHY<Lots&&TSellHY>0 then BEGIN//老空仓数量<可平数量————优先平老空仓
                tsell(1,TSellHY,mkt);//优先平老空仓
                tbuy(1,Lots-TSellHY,mkt);//不足补开多
   end
   if TSellHY=0 then BEGIN//没有老多仓————直接开多仓
                tbuy(1,Lots,mkt);
   end
   EXTGBDATASET(mswitch0,0);//将《某一股票开仓开关状态标识》开关状态《只可开》转为《只可平》状态
end
2、请老师告知期货那几个市场默认优先平老仓。强烈老师把公司老仓标识函数开发给用户
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-5 07:14 , Processed in 0.152544 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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