国债逆回购的收益一般都比货币基金高,普通的余额理财买的是货币基金,所以国债逆回购的收益比普通余额理财还高,而且时不时有惊喜,比如9月27日,国债逆回购年化4.6%,买一天可享受11天收益。
特别是对于炒股的朋友,国债逆回购简直是理想的额外生钱之道,每天收盘后有多余资金,可以买入逆回购,第二天9点前自动会还本付息,不影响继续炒股。
有这个钱,为什么大家不去捡了,原因是“麻烦”,因为要每天去操作。今天就分享一下自动购买国债逆回购的策略代码。
首先是配置监控开始时间、监控结束时间、最低购买利息、监控结束时是否无论如何都购买这些策略参数:
{"comment":"watch_end_time必须小于等于15:30!","watch_start_time":"15:00","watch_end_time":"15:30","least_buy_price":1.9,"buy_anyway_at_end":"True"}
初始化部分,指定要跟踪的逆回购,读取配置参数:
def initialize(context):
# 初始化策略
g.security = ["204001.SS","131810.SZ"]
g.read_params_error = False
set_universe(g.security)
# 读取参数文件
read_param_file()
if g.read_params_error:
return
s_dt = datetime.strptime(context.blotter.current_dt.strftime('%Y%m%d')+g.params['watch_start_time'],'%Y%m%d%H:%M')
e_dt = datetime.strptime(context.blotter.current_dt.strftime('%Y%m%d')+g.params['watch_end_time'],'%Y%m%d%H:%M')
while True:
run_daily(context, GZ, time=s_dt.strftime('%H:%M')) #设置监控时间内,每分钟执行一次
s_dt += timedelta(minutes=1)
if s_dt == e_dt:
break
主体,如果有未成交的挂单先撤单释放资金,然后比较两个逆回购利息,哪个高买哪个:
def GZ(context):
if g.read_params_error:
return
# 撤销未成交的买单
for _order in get_all_orders():
if ( _order['status'] in ['2', '7']) & ( _order['entrust_bs']==1) :
log.info("撤销买入单: %s"% _order)
cancel_order_ex(_order)
time.sleep(15)
# 获取资金 判断是否进行逆回购
portfolio_info = context.portfolio
g.cash = portfolio_info.cash
g.count = int(g.cash/1000)
if g.count > 0: #沪市和深市起购金额都是1000,哪个高买哪个
gear_price = get_gear_price('204001.SS') # 沪市
ss_bid_grp_1 = gear_price['bid_grp'][1][0] #买1价
ss_bid_grp_2 = gear_price['bid_grp'][2][0] #买2价
gear_price = get_gear_price('131810.SZ') # 深市
sz_bid_grp_1 = gear_price['bid_grp'][1][0] #买1价
sz_bid_grp_2 = gear_price['bid_grp'][2][0] #买2价
# 判断是否到监控的最后一分钟,如果这时还没有成交,则不管利息多少都买入
now_dt = datetime.strptime(context.blotter.current_dt.strftime('%Y%m%d%H:%M'),'%Y%m%d%H:%M')
e_dt = datetime.strptime(now_dt.strftime('%Y%m%d')+g.params['watch_end_time'],'%Y%m%d%H:%M')
last_minute = False
if now_dt+timedelta(minutes=1) == e_dt:
last_minute = True
log.info('最后一分钟')
if ss_bid_grp_1 >= sz_bid_grp_1 and (ss_bid_grp_1 >= g.params['least_buy_price'] or (g.params['buy_anyway_at_end'] and last_minute)) :
order('204001.SS',-10*g.count,ss_bid_grp_2)
log.info('沪市利息:{},深市利息:{},沪市高借给沪市。借出笔数:{},借出金额:{}。'.format(ss_bid_grp_1,sz_bid_grp_1,g.count,1000*g.count))
elif ss_bid_grp_1 < sz_bid_grp_1 and (sz_bid_grp_1 >= g.params['least_buy_price'] or (g.params['buy_anyway_at_end'] and last_minute)):
order('131810.SZ',-10*g.count,sz_bid_grp_2)
log.info('沪市利息:{},深市利息:{},深市高借给深市。借出笔数:{},借出金额:{}。'.format(ss_bid_grp_1,sz_bid_grp_1,g.count,1000*g.count))
else:
log.info('当前沪深两市最高利息:{},小于最小买入利息:{},不借出'.format(max(ss_bid_grp_1,sz_bid_grp_1),g.params['least_buy_price']))