以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 不为空,则下单。 |
-- 作者: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 -- 多谢!我先测试下,有什么问题再请教。 |