你好!我正在写股票后台程序化,后台程序化A已经写好了。我想在上午9:30到下午2:50之间执行A,在下午2:50后,将账户中没有买成股票的资金,够10万的,买成上海1天期逆回购;不够10万但是够1000的,买成深圳1天期逆回购。不够1000的,就留在账户里。
后台程序化A已经写好了,后面的时间控制和逆回购操作,不知到如何实现。
请教。谢谢
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,自然不会下深圳了。
谢谢!但是有个问题,手动进行国债逆回购具体操作时,买入的操作是卖出,相当于借出资金,那么代码还是tbuy吗?
哦。这个得用TBUYSHORT了 。不是tbuy.
另外关于这个交易规则,我不是很清楚。不知道你们实盘时候 是按照下面哪种方式来的
1.按照十万资金以及当前的价格计算手数,
2.手数直接填写100就表示使用10万资金了。(有看到说是这种的)
目前我是按照1写的。 因为我们模拟盘不能测试逆回购,所以这里有必要确认下。
[此贴子已经被作者于2021/4/27 10:54:08编辑过]
在实盘的时候,逆回购在手机端都是一键操作,应该是第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 不为空,则下单。
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编辑过]
if code<>'' and Timecd2 then tbuyshort(1,手数,mkt,0,0,'',code);//如果code 不为空,则下单。
刚才这里我为了测试改成了Timecd1 。更正下。
谢谢。我把完整的策略写出来了,并写了注释,加载在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 不为空,则下单。
嗯差不多了。你搞个股票模拟测试下来吧。逆回购虽然不能在模拟成交,但是可以检查下信号是否正常出现,以及手数是否对。
[此贴子已经被作者于2021/4/27 14:16:14编辑过]