• Posts tagged "逆回购"

Blog Archives

金融无风险套利工具 逆回购

用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据。在互联网混迹多年,已经熟练掌握一些IT技术。单纯地在互联网做开发,总觉得使劲的方式不对。要想靠技术养活自己,就要把技术变现。通过“跨界”可以寻找新的机会,创造技术的壁垒。

金融是离钱最近的市场,也是变现的好渠道!今天就开始踏上“用IT技术玩金融”之旅!

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/finance-repurchase-intro/

finance-repurchase-intro

前言

前不久,支付宝推出的“余额宝”赚尽无数人的眼球,同时也吸引的大量的小额资金进入。“余额宝”把我们的散钱利息提高到了年化收益率4.0%左右,比起银行活期存储存款0.3%左右高出太多了,也正在撼动着银行躺着赚钱的地位。

在金融市场,如果想获得年化收益率4%-5%左右也并非难事,通过“逆回购”一样可以。一旦遇到货币紧张时(银行缺钱),更可达到50%一天隔夜回购利率。我们就可以美美地在家里数钱了!!

注:本人金融入门级,如果文章描述不对或者不准确的地方,还请专家指点。

目录

  1. 逆回购简单介绍
  2. 逆回购债券
  3. 逆回购交易

1. 逆回购简单介绍

回购交易是质押贷款的一种方式,通常用在政府债券上。债券经纪人向投资者临时出售一定的债券,同时签约在一定的时间内以稍高价格买回来。债券经纪人从中取得资金再用来投资,而投资者从价格差中得利。回购交易长的有几个月,但通常情况下只有24小时,是一种超短期的金融工具。一般分为国债回购交易、债券回购交易、证券回购交易、质押式回购等。回购交易更多地具有短期融资的属性,从运作方式看,它结合了现货交易和远期交易的特点,通常在债券交易中运用。

国债回购交易,也称国债的现货交易,是指进行国债回购交易的市场,即卖出债券,并附加条件,于一定期间后,以预定的价格和收益,由最初出售者买回债券。还包括买入债券,于一定期间后,以预定的条件和价格,再卖给最初出售者的反回购。

质押式回购是交易双方以债券为权利质押所进行的短期资金融通业务。在质押式回购交易中,资金融入方(正回购方)在将债券出质给资金融出方(逆回购方)融入资金的同时,双方约定在将来某一日期由正回购方向逆回购方返还本金和按约定回购利率计算的利息,逆回购方向正回购方返还原出质债券。

上文摘自:http://baike.baidu.com/view/1905673.htm

逆回购简单介绍
通俗来讲,就是你(A)把钱借给别人(B),到期时,B按照约定利息,还给你(A)本资+利息。逆回购本身是无风险的。(操作与银行储蓄存款类似)

现在火热吵起来的,阿里金融的“余额宝”利息与逆回购持平。我们可以猜测“余额宝”的资金也在操作“逆回购”,不仅保持良好的流通性,同时也提供稳定的利息。

2. 逆回购债券

gc_code

上交所9支,质押式回购,资金门槛10万元,每笔为10万的整数倍,分别对应该1天,2天,3天,4天,7天,14天,28天,91天,182天
深交所9支,国债回购,资金门槛1千元,每笔为1000的整数倍,分别对应该1天,2天,3天,4天,7天,14天,28天,91天,182天

一般我们最常操作的,就是1天和7天的逆回购。

举例:
进行操作:上交所发行的”上海新质抵押式回购1天”,借款时间”1天”,回购代码”204001″,资金”10万”元,1个自然天后利息=100000*4.685%/365=12.83562。

回款本金+利息=100000+12.83562=100012.83562

如果我们对“上海新质抵押式回购7天”操作,7个自然天后利息=100000*3.85%*7/365=73.83562

此操作为无风险操作,完全就是吃利息。

3. 逆回购交易

下图为“招商证券”股票交易软件界面截图,GC001个股分时图展示。

gc001

图标注释:

  • 1. 年化收益率:表示Y轴,以年化收益率百分比度量,红色为高于开盘价,白色为开盘价,绿色为低于开盘价
  • 2. 年化收益率曲线:以X(交易时间轴)和Y(年化收益率)坐标系,构建的曲线。
  • 3. 交易量:表示Y轴,显示交易资金量
  • 4. 交易量柱状图:以X(交易时间轴)和Y(交易量)坐标系,构建的柱状图。
  • 5. 交易时间轴:表示X轴,中国股市的交易时间,从上午9:30至11:30,下午13:00至15:00为交易时间。
  • 6. 分隔线:分隔上下两个图,上图为年化收益率曲线,下图为交易量柱状图
  • 7. 变动百分比:右边的Y轴,以开盘价做为0点,红色为增长百分比,绿色为下降百分比
  • 8. 交易代码和名称:显示交易代码(204001)和名称(GC001)
  • 9. 买卖比例:
    委比=(委买手数-委卖手数)/(委买手数+委卖手数)×100%,
    委差=委买金额-委卖金额。
    红色表示买盘>卖盘。绿色则相反。
  • 10. 买卖挂单情况:
    买一,就是现在这一时刻委托买入的单子中,价格最高的那些笔的集合笔数与价格。
    卖一,就是现在这一时刻委托卖出的单子中,最低价格的那些笔的集合笔数与价格。
    买一,买二,买三,买四,买五是委托买入价格,价格是由高到低。
    卖一,卖二,卖三,卖四,卖五是委托卖出价格,价格是由低到高。
  • 11. 当前汇总信息:
    现价:最后一次交易的价格。
    今开:开盘价。
    涨跌:今收盘-昨收盘
    涨幅:(现价-上一个交易日收盘价)/上一个交易日收盘价*100%
    最高:今天最高时的价格
    最低:今天最低时的价格
    总量:买进与卖出量的和,总量=外盘+内盘
    量比:当日总成交手数与近期平均成交手数的比值。如量比数值大于1,表示这个时刻的成交总手量已经放大;若量比数值小于1,表示这个时刻成交总手萎缩。
    外盘:成交价是卖出价时成交的手数总和称为外盘。
    内盘:成交价是买入价时成交的手数总和称为内盘。当外盘累计数量比内盘累计数量大很多,而股价也在上涨时,表明很多人在抢盘买入股票。 当内盘累计数量比外盘累计数量大很多,而股价下跌时,表示很多人在抛售股票。
  • 12. 交易历史:每一笔交易的流水信息,包括交易时间,交易价格(合算的年化收益率),交易资金量,交易操作:B(买)S(卖),
  • 13. 开盘价:今日的开盘时的价格

下图为“招商证券”股票交易软件界面截图,GC001交易操作展示

gc001_trade

图标注释:

  • 1. 业务选择:“招商证券”软件把“逆回购”单独做了一个分类
  • 2. 交易操作:
    股东代码:选择“上交所”或者“深交所”
    证券代码:204001,
    年化回购利率:可要理解为借款利息,
    可用资金:当前账号中的余额
    最大可融数量:当前余额可以借出多少张(每张1000元),=可用资金/1000
    委托数量:输出借出多少张
    回款测算:计算到期后本息共多少钱,=委托数量*1000*年化回购利率/365
    下单:确认付款
  • 3. 价格跟踪:时时变化显示买一,买五,卖一,卖五
  • 4. 逆回购债券列表:列出所有逆回购债券,不会时时更新要自己手动刷新。

大家开个户玩一下,接下来就可以进入“逆回购”的策略分析了。用IT技术玩金融系列文章:用RHive从历史数据中提取逆回购信息

“逆回购”赚不到大钱,不过转移银行储蓄存款到是不错的选择。

转载请注明出处:
http://blog.fens.me/finance-repurchase-intro/

打赏作者

用RHive从历史数据中提取逆回购信息

用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据。在互联网混迹多年,已经熟练掌握一些IT技术。单纯地在互联网做开发,总觉得使劲的方式不对。要想靠技术养活自己,就要把技术变现。通过“跨界”可以寻找新的机会,创造技术的壁垒。

金融是离钱最近的市场,也是变现的好渠道!今天就开始踏上“用IT技术玩金融”之旅!

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/finance-rhive-repurchase/

it-finance

前言

接触金融时间并不太长,对我来说第一个操作的业务,就是逆回购。逆回购对于大部分人来说,都是一个新鲜词,就算是炒股多年的玩家,可能也是在2013年6月份发生银行缺钱的事件之后才了解的。隔夜的银行间拆借利率达到了30%,简单来说银行缺钱了!各种机构 分分出售股票,债券,兑换成现金借给应银行。个人用户也都取出存款,通过逆回购,把钱借给银行。30%的利率,让所有人在那一周都为之兴奋,只有银行在惶恐。

目录

  1. 逆回购简介
  2. 历史数据模型
  3. 通过用RHive提取数据
  4. 简单策略实现

1. 逆回购简介

债券回购的含义

债券质押式回购简单地说就是交易双方以债券为质押品的一种短期资金借贷行为。其中债券持有人(正回购方)将债券质押而获得资金使用权,到约定的时间还本并支付一定的利息,从而“赎回”债券。而资金持有人(逆回购方)就是正回购方的交易对手。在实际交易中债券是质押给了第三方即中国结算公司,这样交易双方否更加安全、便捷。

可回购的债券

所有的国债、绝大部分企业债、公司债和分离债的纯债都可用于债券回购交易。沪深交易所每周都会公布可回购债券的折算率,上面没有但可交易的品种就是不可回购的债券。折算率简单说,就是把债券质押时,交易所按债券面值给出的可质押的比率。

现在交易的回购品种

我们仅列出个人投资者经常参与的公司债(包括企业债等)回购品种。

上海证券交易所可交易的质押式回购(括弧中为交易代码)分为1日(204001)、2日(204002)、3日(204003)、4日(204004)、7日(204007)、14日(204014)、28日(204028)、91日(204091)、182日(204182)共9个品种。深圳交易所按回购期限分为分为1日(131810)、2日(131811)、3日(131800)、7日(131801)共4个品种。其中经常交易的只有沪深1日和7日四个品种,并且沪市的日均交易量又远远大于深市的交易量。

以上逆回购定义摘自:http://finance.sina.com.cn/money/bond/20121016/180713385513.shtml

2. 历史数据模型

Hive中的表结构:


rhive.desc.table('t_reverse_repurchase')
    col_name data_type
1  tradedate    string
2  tradetime    string
3 securityid    string
4     bidpx1    double
5   bidsize1    double
6   offerpx1    double
7 offersize1    double

tradedate:交易日期
tradetime:交易时间
securityid:股票ID
bidpx1:买一
bidsize1:买一交易量
offerpx1:卖一
bidsize1:卖一交易量

3. 通过用RHive提取数据

登陆c1服务器,打开R的客户端。


#装载RHive
library(RHive)

#初始化
rhive.init()

#连接到Hive集群
> rhive.connect("c1.wtmart.com")
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/cos/toolkit/hive-0.9.0/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/cos/toolkit/hadoop-1.0.3/lib/slf4j-log4j12-1.4.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

#查看当前的表
> rhive.list.tables()
              tab_name
1            t_hft_day   //历史数据表
2            t_hft_tmp   //临时表
4 t_reverse_repurchase   //逆回购表

查看所有股票历史数据分片:测试数据从20130627–20130726。


> rhive.query("SHOW PARTITIONS t_hft_day");
            partition
1  tradedate=20130627
2  tradedate=20130628
3  tradedate=20130701
4  tradedate=20130702
5  tradedate=20130703
6  tradedate=20130704
7  tradedate=20130705
8  tradedate=20130708
9  tradedate=20130709
10 tradedate=20130710
11 tradedate=20130712
12 tradedate=20130715
13 tradedate=20130716
14 tradedate=20130719
15 tradedate=20130722
16 tradedate=20130723
17 tradedate=20130724
18 tradedate=20130725
19 tradedate=20130726

分为提取”上交所一天逆回购”(204001),和”深交所一天逆回购”(131810),从7月22日至7月26日的一周数据。


> rhive.drop.table("t_reverse_repurchase")
> rhive.query("CREATE TABLE t_reverse_repurchase AS SELECT tradedate,tradetime,securityid,bidpx1,bidsize1,offerpx1,offersize1 FROM t_hft_day where tradedate>=20130722 and tradedate<=20130726 and securityid in (131810,204001)");

查看数据结果集

> rhive.query("SELECT securityid,count(1) FROM t_reverse_repurchase group by securityid");
  securityid  X_c1
1     131810 17061
2     204001 12441

加载到R的内存中。


> bidpx1<-rhive.query("SELECT securityid,concat(tradedate,tradetime) as tradetime,bidpx1 FROM t_reverse_repurchase"); 

#查看记录条数 
> nrow(bidpx1)
[1] 29502

#查看数据
> head(bidpx1)
  securityid      tradetime bidpx1
1     131810 20130724145004  2.620
2     131810 20130724145101  2.860
3     131810 20130724145128  2.850
4     131810 20130724145143  2.603
5     131810 20130724144831  2.890
6     131810 20130724145222  2.600

用ggplot2做数据可视化

一周数据的走势

library(ggplot2)
g<-ggplot(data=bidpx1, aes(x=as.POSIXct(tradetime,format="%Y%m%d%H%M%S"), y=bidpx1))
g<-g+geom_line(aes(group=securityid,colour=securityid))
g<-g+xlab('tradetime')+ylab('bidpx1')
ggsave(g,file="01.png",width=12,height=8)

01

一天数据的走势

bidpx1<-rhive.query("SELECT securityid,concat(tradedate,tradetime) as tradetime,bidpx1 FROM t_reverse_repurchase WHERE tradedate=20130726");
g<-ggplot(data=bidpx1, aes(x=as.POSIXct(tradetime,format="%Y%m%d%H%M%S"), y=bidpx1))
g<-g+geom_line(aes(group=securityid,colour=securityid))
g<-g+xlab('tradetime')+ylab('bidpx1')
ggsave(g,file="02.png",width=12,height=8)

02

4. 简单策略实现

通过简单的打印出两幅图片的两条曲线,我们可以看到131810一直在追随204001变化,并且大部情况都低于204001。
下面做一个简单的策略分析:通过204001变化,判断131810的卖点。

  1. 把131810和204001按每分钟标准化
  2. 设置当131810和204001有交点的时候,提取卖出信号
  3. 当后一个交点的卖一价格大于前一个交点的卖一价格10%以上,做为局部最优的卖出信号点

提取131810,204001的数据,存储在t_reverse_repurchase表中


#登陆R
library(RHive)
rhive.init()
rhive.connect("c1.wtmart.com")

#提取131810,204001的数据
rhive.drop.table("t_reverse_repurchase")
rhive.query("CREATE TABLE t_reverse_repurchase AS SELECT tradedate,tradetime,securityid,bidpx1,bidsize1,offerpx1,offersize1 FROM t_hft_day where securityid in (131810,204001)");

#查看数据集
rhive.query("select count(1),tradedate from t_reverse_repurchase group by tradedate")
   X_c0 tradedate
1  4840  20130627
2  4792  20130628
3  4677  20130701
4  3124  20130702
5  2328  20130703
6  3787  20130704
7  4294  20130705
8  4977  20130708
9  4568  20130709
10 6619  20130710
11 5633  20130712
12 6159  20130715
13 5918  20130716
14 6200  20130719
15 6074  20130722
16 5991  20130723
17 5899  20130724
18 5346  20130725
19 6192  20130726

加载软件包


library(ggplot2)
library(scales)
library(plyr)

获得一天的数据并做ETL


#把一周的数据加载到内存
bidpx1<-rhive.query(paste("SELECT securityid,tradedate,tradetime,bidpx1 FROM t_reverse_repurchase WHERE tradedate>=20130722"));

#加载一天的数据并做ETL
oneDay<-function(date){
  d1<-bidpx1[which(bidpx1$tradedate==date),]
  d1$tradetime2<-round( as.numeric(as.character(d1$tradetime))/100)*100
  d1$tradetime2[which(d1$tradetime2<100000)]<-paste(0,d1$tradetime2[which(d1$tradetime2<100000)],sep="")
  d1$tradetime2[which(d1$tradetime2=='1e+05')]='100000'
  d1$tradetime2[which(d1$tradetime2=='096000')]='100000'
  d1$tradetime2[which(d1$tradetime2=='106000')]='110000'
  d1$tradetime2[which(d1$tradetime2=='126000')]='130000'
  d1$tradetime2[which(d1$tradetime2=='136000')]='140000'
  d1$tradetime2[which(d1$tradetime2=='146000')]='150000'
  d1
}

#通过均值标准化
meanScale<-function(d1){
  ddply(d1, .(securityid,tradetime2), summarize, bidpx1=mean(bidpx1))
}

#找到要分析的点
findPoint<-function(a1,a2){
  #找到所有a1大于a2的点
  bigger_point<-function(a1,a2){
    idx<-c()
    for(i in intersect(a1$tradetime2,a2$tradetime2)){
      i1<-which(a1$tradetime2==i)
      i2<-which(a2$tradetime2==i)              
      if(a1$bidpx1[i1]-a2$bidpx1[i2]>=-0.02){
        idx<-c(idx,i1)
      }
    }
    idx
  }

  #去掉连续的索引值
  remove_continuous_point<-function(idx){
    idx[-which(idx-c(NA,rev(rev(idx)[-1]))==1)]
  }

  idx<-bigger_point(a1,a2)
  remove_continuous_point(idx)
}

#发现局部最优卖出点
findOptimize<-function(d3){
  idx2<-which((d3$bidpx1-c(NA,rev(rev(d3$bidpx1)[-1])))/d3$bidpx1>0.1)
  if(length(idx2)<1)
    print("No Optimize point")
  d3[idx2,]
}

#画图查看结果
draw<-function(d2,d3,d4,date,png=FALSE){
  g<-ggplot(data=d2, aes(x=strptime(paste(date,tradetime2,sep=""),format="%Y%m%d%H%M%S"), y=bidpx1))
  g<-g+geom_line(aes(group=securityid,colour=securityid))
  g<-g+geom_point(data=d3,aes(size=1.5,colour=securityid))   if(nrow(d4)>0){
    g<-g+geom_text(data=d4,aes(label= format(d4$bidpx1,digits=4)),colour="blue",hjust=0, vjust=0)
  }
  g<-g+xlab('tradetime')+ylab('bidpx1')
  if(png){
    ggsave(g,file=paste(date,".png",sep=""),width=12,height=8)
  }else{
    g
  }
}

#执行策略封装
date<-20130722
d1<-oneDay(date)
d2<-meanScale(d1)
a1<-d2[which(d2$securityid==131810),]
a2<-d2[which(d2$securityid==204001),]
d3<-d2[findPoint(a1,a2),]
d4<-findOptimize(d3)
draw(d2,d3,d4,as.character(date),TRUE)

20130722
20130722

20130723
20130723

20130724
20130724

20130725
20130725

20130726
20130726

 

通过对一周数据的比较我们发现,这个简单的策略能我们带来一些收益。虽然不是全局最优的,但比人为的判断会更有依据。

用IT技术玩金融系列文章,第一篇就当是一个抛砖引玉的开始,后面的文章会更精彩。

######################################################
看文字不过瘾,作者视频讲解,请访问网站:http://onbook.me/video
######################################################

转载请注明出处:
http://blog.fens.me/finance-rhive-repurchase/

打赏作者