以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  请教如何加入时间控制和逆回购操作  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=188062)

--  作者:drliang680
--  发布时间:2021/4/27 6:23:21
--  请教如何加入时间控制和逆回购操作
你好!我正在写股票后台程序化,后台程序化A已经写好了。我想在上午9:30到下午2:50之间执行A,在下午2:50后,将账户中没有买成股票的资金,够10万的,买成上海1天期逆回购;不够10万但是够1000的,买成深圳1天期逆回购。不够1000的,就留在账户里。

后台程序化A已经写好了,后面的时间控制和逆回购操作,不知到如何实现。

请教。谢谢

--  作者:FireScript
--  发布时间:2021/4/27 9:22:12
--  
 1.时间控制。
Timecd:time>=93000 and time<=145000;

这个条件放到程序A里作为开平的条件之一。这样过了时间程序自然就限制住了。也可以直接把这个作为if的条件,将所有代码嵌套进去。

2.相应的程序化B的代码。则是
Timecd:time>145000;
用这个条件作为下单的限制条件之一。

至于操作逆回购,你可以在代码里判断当前资金情况,这个好做。账户函数里面都有相应函数。

code:=\'\';

if TACCOUNT( 3)>100000 then code:=逆回购代码1;//上海
if TACCOUNT( 3)<100000 and TACCOUNT( 3)>1000 then code:=逆回购代码2;//深圳

ss1:CEILING(100000 /c);//计算手数1
ss2:CEILING(1000 /c);//计算手数2
手数:=if(code=逆回购代码1,ss1,if(code=逆回购代码2,ss2,\'\') );//根据品种区分下单的手数
if code<>\'\' and Timecd  then tbuy(1,ss,mkt,0,0,\'\',code);//如果code 不为空,则下单。


但是有个问题,如果十万够了,买了上海还剩了。下个周期运行,可能会触发深圳的下单。简单的做法是你这个交易周期设置大些。这样没有新K,自然不会下深圳了。

--  作者:drliang680
--  发布时间:2021/4/27 10:28:16
--  
谢谢!但是有个问题,手动进行国债逆回购具体操作时,买入的操作是卖出,相当于借出资金,那么代码还是tbuy吗?
--  作者:FireScript
--  发布时间:2021/4/27 10:42:11
--  
 哦。这个得用TBUYSHORT了 。不是tbuy.

另外关于这个交易规则,我不是很清楚。不知道你们实盘时候 是按照下面哪种方式来的

1.按照十万资金以及当前的价格计算手数,
2.手数直接填写100就表示使用10万资金了。(有看到说是这种的)

目前我是按照1写的。  因为我们模拟盘不能测试逆回购,所以这里有必要确认下。
[此贴子已经被作者于2021/4/27 10:54:08编辑过]

--  作者:drliang680
--  发布时间:2021/4/27 13:13:40
--  
在实盘的时候,逆回购在手机端都是一键操作,应该是第1种方式。

我按照你的指导,重新编辑了一下我的程序,请你帮我看看是否可行。

Timecd1:time>=093000 and time<=145000;
Timecd2:time>145000;

kd:= XXXXXX;
pd:= XXXXXX;

TBUY(kd and TBUYHOLDING(1)=0 and Timecd1,100000/c,MKT,0,0,\'\',\'\');
TSELL(pd and TBUYHOLDING(1)>0 and Timecd1,TBUYHOLDING(1),MKT,0,0,\'\',\'\');

code:=\'\';

if TACCOUNT( 3)>100000 then code:=204001;//上海
if TACCOUNT( 3)<100000 and TACCOUNT( 3)>1000 then code:=131810;//深圳

ss1:CEILING(100000/c);//计算手数1
ss2:CEILING(1000/c);//计算手数2
手数:=if(code=逆回购代码1,ss1,if(code=逆回购代码2,ss2,\'\') );//根据品种区分下单的手数
if code<>\'\' and Timecd2  then tbuyshort(1,ss,mkt,0,0,\'\',code);//如果code 不为空,则下单。

--  作者:FireScript
--  发布时间:2021/4/27 13:27:46
--  
 Timecd1:time>=093000 and time<=145000;
Timecd2:time>145000;


code:=\'\';

if TACCOUNT( 3)>100000 then code:=\'204001\';//上海
if TACCOUNT( 3)<100000 and TACCOUNT( 3)>1000 then code:=\'131810\';//深圳


ss1:CEILING(100000/DYNAINFO2(7 , \'204001\'));//计算手数1
ss2:CEILING(1000/DYNAINFO2(7 , \'131810\'));//计算手数2
手数:=if(code=\'204001\',ss1,if(code=\'131810\',ss2,\'\') );//根据品种区分下单的手数
if code<>\'\' and Timecd2 then tbuyshort(1,手数,mkt,0,0,\'\',code);//如果code 不为空,则下单。


1.品种代码必须是字符串。
2.因为监控品种和下单品种未必一致。所以计算手数的地方,用到的价格需要引用到指定品种才行。
[此贴子已经被作者于2021/4/27 14:00:11编辑过]

--  作者:FireScript
--  发布时间:2021/4/27 14:00:53
--  
 if code<>\'\' and Timecd2 then tbuyshort(1,手数,mkt,0,0,\'\',code);//如果code 不为空,则下单。

刚才这里我为了测试改成了Timecd1 。更正下。

--  作者:drliang680
--  发布时间:2021/4/27 14:09:02
--  
谢谢。我把完整的策略写出来了,并写了注释,加载在15分钟以上周期,请再帮我看看。

//此模型挂在15分钟以上周期,交易周期设置大于剩余做国债逆回购的最后10分钟。这样没有新K,自然不会下深圳了

Timecd1:time>=93000 and time<=145000;
Timecd2:time>145000;

kd:= "macd.macd1">0;
pd:= "macd.macd1"<0;

TBUY(kd and TBUYHOLDING(1)=0 and Timecd1,100000/c,MKT,0,0,\'\',\'\');
TSELL(pd and TBUYHOLDING(1)>0 and Timecd1,TBUYHOLDING(1),MKT,0,0,\'\',\'\');

code:=\'\';

if TACCOUNT( 3)>100000 then code:=\'204001\';//上海
if TACCOUNT( 3)<100000 and TACCOUNT( 3)>1000 then code:=\'131810\';//深圳

ss1:CEILING(100000/DYNAINFO2(7 , \'204001\'));//计算手数1
ss2:CEILING(1000/DYNAINFO2(7 , \'131810\'));//计算手数2
手数:=if(code=\'204001\',ss1,if(code=\'131810\',ss2,\'\') );//根据品种区分下单的手数
if code<>\'\' and Timecd2  then tbuyshort(1,手数,mkt,0,0,\'\',code);//如果code 不为空,则下单。

--  作者:FireScript
--  发布时间:2021/4/27 14:15:52
--  
 嗯差不多了。你搞个股票模拟测试下来吧。逆回购虽然不能在模拟成交,但是可以检查下信号是否正常出现,以及手数是否对。
[此贴子已经被作者于2021/4/27 14:16:14编辑过]

--  作者:drliang680
--  发布时间:2021/4/27 14:17:08
--  
多谢!我先测试下,有什么问题再请教。