楼主: mosuchen
20261 38

关于PIN(知情交易概率)计算程序中的问题 [推广有奖]

11
mosuchen 在职认证  发表于 2014-3-30 10:35:54 |只看作者 |坛友微信交流群
FlyUFalcon 发表于 2014-3-29 22:50
我不知道你的数据频率是什么样子的?
一般高频数据中都有bid 和ask 的数据阿....作微观结构的话bid-ask sp ...
你好,这是我下载的浦发银行三年,五分钟高频数据。没有BID ,ASK。来自天相证券市场数据库。

000001-2013.txt

1.06 MB

使用道具

12
枫之飘絮 发表于 2014-3-31 13:10:53 |只看作者 |坛友微信交流群
FlyUFalcon 发表于 2014-3-29 22:50
我不知道你的数据频率是什么样子的?
一般高频数据中都有bid 和ask 的数据阿....作微观结构的话bid-ask sp ...
楼主您好,刚看到这个帖子,本人刚开始做关于pin的毕业论文,不太懂,所以冒昧的问一下,做pin是不是得用分笔数据呢?所谓的分笔数据和分时数据有什么区别?谢谢了

使用道具

13
FlyUFalcon 在职认证  发表于 2014-3-31 16:16:07 |只看作者 |坛友微信交流群
枫之飘絮 发表于 2014-3-31 13:10
楼主您好,刚看到这个帖子,本人刚开始做关于pin的毕业论文,不太懂,所以冒昧的问一下,做pin是不是得用 ...
你好。 算出PIN的关键在于得到 某一时间段内 buy 和sell 的数量。 如果你能得到 buy 和sell 的数量。其实 分笔数据和分时数据的差距不是很大。

使用道具

14
mosuchen 在职认证  发表于 2014-4-1 08:20:01 |只看作者 |坛友微信交流群
FlyUFalcon 发表于 2014-3-30 18:29
这样的话也能做。 主要看每次价格变动。 如果价格上涨,即为B。 反之则是S。价格每边则是和上一次一样。
...
根据您的建议,我编制了一个程序小样,主要是用前面发的浦发银行的一年数据来计算PIN,我使用的是成交均价与相应的区间中开盘价和收盘价之中位数进行比较,若是均价高于中位数记为买盘,反之则记为卖盘。现在的问题是,有同学说应该用最高价和最低价之中位数进行比较,不知您如何建议。附上我的程序和论坛币。
%macro importtxt(table);
PROC IMPORT OUT= WORK.&table
            DATAFILE= "C:\Users\mosuchen\Desktop\pin\&table..txt"
            DBMS=TAB REPLACE;
     GETNAMES=YES;
     DATAROW=2;
RUN;
%mend importtxt;
%importtxt(gdata);

data gdata1;
set gdata;
medianp=median(open,close);
meanp=mp;
year=year(date);
run;

proc sort data=gdata1;by stkcd date;run;
data gdata2;set gdata1;
if meanp>medianp then buy=1;
else buy=0;
if meanp<medianp then sell=1;
else sell=0;
if meanp=medianp then bs=1;
else bs=0;
lagbuy=lag(buy);
lagsell=lag(sell);
run;

data gdata3;
set gdata2;
if stkcd^=lag(stkcd) or year^=lag(year) then delete; /*Lee & Ready 1991, tick-test rule*/
if buy=0 and bs=1 then delete;
if sell=0 and bs=1 then delete;
if buy=1 then buys=1;
else if bs=1 and lagbuy=1 then buys=1; /*Lee & Ready 1991, tick-test rule*/
else buys=0;
if sell=1 then sells=1;
else if bs=1 and lagsell=1 then sells=1; /*Lee & Ready 1991, tick-test rule*/
else sells=0;
run;

proc sort data=gdata3;by stkcd date;run;
proc means data=gdata3;
var  buys sells;
output out=sumbs sum=buys sells;
by stkcd date;
run;
data sumbs;
set sumbs;
drop _TYPE_ _FREQ_;
year=year(date);
run;

/*-------------------------------------------------------------------*/
/*    Create the dataset containing the observations...              */
/*    The observations for PERMCO 99999 are consistent with the      */
/*    Easley, Hvidjkaer, and O'Hara example on p. 2198 of the        */
/*    Journal of Finance.                                            */
/*-------------------------------------------------------------------*/

data buysell;
set sumbs;
run;
/*-------------------------------------------------------------------*/
/*    Get the data ready for the NLP procedure.                       */
/*-------------------------------------------------------------------*/
proc sort data=buysell;
by stkcd year;
run;

/*-------------------------------------------------------------------*/
/*    This is the procedure used to maximize the log likelihood       */
/*    function specified below.                                       */
/*                                                                   */
/*    This particular factorization of the log-likelihood function    */
/*    appears in the paper "Time-Varying Arrival Rates of Informed    */
/*    and Uninformed Trades" by David Easley, Robert F. Engle,        */
/*    Maureen O’ara, and Liuren Wu (paper presented at the 2002      */
/*    AFA meetings).                                                 */
/*                                                                   */
/*    The parameters emerging from this estimation, for PERMCO 99999, */
/*    are consistent with what's mentioned in the Easley, Hvidjkaer,  */
/*    O'Hara paper.                                                  */
/*-------------------------------------------------------------------*/

proc nlp data=buysell noprint out=pinest(keep=stkcd year alpha eta mu);
by stkcd year;

max loglik;
decvar alpha ,delta,eta,mu;
M = min(buys,sells) + max(buys,sells) / 2.0 ;
x = eta / (mu + eta);

bounds   0.0 < eta mu, 0.0 <= alpha delta <= 1.0 ;

loglik = -2.0 * eta + M * log(x) + (buys + sells) * log(mu + eta) +
          log( alpha * (1.0 - delta) * exp(-1.0 * mu) * (x ** (sells - M )) +
          alpha * delta * exp(-1.0 * mu) * (x ** (buys - M))  +
          (1.0 - alpha) * (x ** (buys + sells - M)) ) ;

run;

/*-------------------------------------------------------------------*/
/*    Clean the output and print it nicely.                           */
/*-------------------------------------------------------------------*/
proc sort data = pinest  nodupkey;
by stkcd year;
run;

data pinest;
set pinest;
pin=alpha*mu/(alpha*mu+2.0*eta);
label pin='probability of informed trading';
format pin 5.3;
run;

proc print data=pinest;
var stkcd year pin alpha eta mu;
run;

使用道具

15
FlyUFalcon 在职认证  发表于 2014-4-1 17:09:07 |只看作者 |坛友微信交流群
不好意思, 你的数据我打开后全是乱码。我不太清楚bid ask在你的数据里的中文 是什么。你的数据里面肯定有。

我的意思是说第一种方法是lee-ready 的方法
Mid = 1/2 * (bid + ask)
If transaction price > mid then sign =B
If transaction price < mid then sign = S


第二种方法是:看每次价格变动。 如果价格上涨,即为B。 反之则是S。价格每边则是和上一次一样。

使用道具

16
mosuchen 在职认证  发表于 2014-4-1 18:19:24 |只看作者 |坛友微信交流群
FlyUFalcon 发表于 2014-4-1 17:09
不好意思, 你的数据我打开后全是乱码。我不太清楚bid ask在你的数据里的中文 是什么。你的数据里面肯定有。 ...
这是我的数据下面的中文变量名称
序号        名称        代码        日期        时间        开盘        前收        最高        最低        收盘        成交量[股]        成交金额[元]        均价        成交笔数       
真的没有BID和ASK,因为天相的高频数据比较粗糙。
如果以价格变动来判断是否以本期均价和上期均价进行比较来判断买卖方向?

使用道具

17
FlyUFalcon 在职认证  发表于 2014-4-1 20:58:58 |只看作者 |坛友微信交流群
看样子开盘收盘应该是每天的 opening 和closing price
所以这里应该用最高和 最低价格.....
我觉得是。  


下面是我的数据,你可以看一下。 有每次的quotes 和每次的成交价
Capture.PNG

使用道具

18
mosuchen 在职认证  发表于 2014-4-1 22:35:08 |只看作者 |坛友微信交流群
FlyUFalcon 发表于 2014-4-1 20:58
看样子开盘收盘应该是每天的 opening 和closing price
所以这里应该用最高和 最低价格.....
我觉得是。   ...
好呀,多谢了,我再找找数据,希望能取得你这样的数据

使用道具

19
长假 发表于 2014-4-3 01:28:21 |只看作者 |坛友微信交流群
我也在做PIN现在,希望多多交流。我觉得你的数据可以用最高和最低报价的和除以2,然后跟后面的成交价格比较,按照lee-ready 1991判断买卖方,就可以算出PIN了。

使用道具

20
mosuchen 在职认证  发表于 2014-4-3 01:57:55 |只看作者 |坛友微信交流群
长假 发表于 2014-4-3 01:28
我也在做PIN现在,希望多多交流。我觉得你的数据可以用最高和最低报价的和除以2,然后跟后面的成交价格比较 ...
好呀,其实我用MATLAB和SAS都写好程序了。可惜是碰到的数据问题。正在找高频数据源,我手上的数据太粗糙。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 03:44