Posts Tagged ‘stock’

飞狐日线文件的数据格式

星期一, 3月 16th, 2009

其实这个工作做了至少一个月的时间了,分析的文档也写了相应的时间,放在桌面没整理,现在整理桌面,顺便贴上来:

飞狐的日线文件的下载地址是:http://down.88158.cn/

下载了的日线文件的后缀名一般是打包的rar,解开之后得到一个Quote.QDA

下面是这个Quote.QDA的数据格式:
文件头:
int32 header = 0xFFFFFFE2
int32 type   = 0×00000101
int32 stockcount

用UE看就是E2FFFFFF 01010000[stockcount],这里的header是区分一个文件是日线数据还是其他数据的标志,如果是五分钟线,header=0xFFFFFFE1。

stockcount就是包含的股票数量了。

文件头12个字节之后就是数据区了。

数据区按股票排列,一共有stockcount个股票,每个股票的格式如下:

股票日线:

char[12] stockid 股票ID

char[12] stockname 股票中文名称

int32 daycount 该股票一共有日线的个数

每日数据[daycount] 一个每日数据的数组

每日数据的格式:

int32 UTC_time 这个可真是用UTC算的东八区时间,有点啰嗦,应该转换的时候出的问题,不描述了,如果要转成真正的东八区时间的话,要把这个时间减个8小时。
float open 开盘价
float high 最高价
float low 最低价
float close 收盘价
float volume 成交量
float amount 成交金额
int32 dealcount 成交次数

简单点说,就是先按股票读,在每个股票描述之后是该股票的日线数据。该股票所有日线数据结束之后是下一个股票的描述信息。

Flex中AdvancedDataGrid的AdvancedDataGridColumn两种格式定义方法

星期六, 3月 7th, 2009

在用flex做一个股票版的演示,避免自己写太多的代码,就使用AdvancedDataGrid好了。

有些数据需要显示红色,有些数据需要显示绿色,当然了,这是股价。而有些数据不齐全,需要计算出来,比如有现价和昨收,而没有涨跌幅,这个需要使用现价和昨收计算出来。

1.根据数据显示红绿的方法:
在AdvancedDataGrid中指定一个styleFunction=”colStyle”
然后在actionscript段中实现这个colStyle:

private function colStyle(data:Object, col:AdvancedDataGridColumn):Object
{
var diff:Number = Number(data[col.dataField]) - Number(data["last"]);
//计算该列的数据与昨收的价差
if (diff < 0)
{
return {color:”green”}; //比昨收低,返回绿色
}
else
{
return {color:”red”};   //比昨收高,返回红色
}
}

当然,这仅是个简单的示例,还有不少细节需要完善的。

2.对于dataProvider里面没有的数据,比如涨跌额和涨跌幅,则使用AdvancedDataGridRendererProvider进行渲染

在AdvancedDataGrid的AdvancedDataGridColumn指定两列:

<mx:AdvancedDataGridColumn headerText=”涨跌” width=”64″ id=”change” />
<mx:AdvancedDataGridColumn headerText=”%”  width=”54″ id=”ratio” />

id分别是change和ratio.

然后在AdvancdeDataGrid中指令两个RenderProvider:

<mx:rendererProviders>
<mx:AdvancedDataGridRendererProvider column=”{ratio}” columnSpan=”1″

renderer=”RatioRender” />
<mx:AdvancedDataGridRendererProvider column=”{change}” columnSpan=”1″

renderer=”ChangeRenderer”/>
</mx:rendererProviders>

分别实现RatioRender和ChangeRenderer

ChangeRenderer.mxml:

<?xml version=”1.0″?>
<mx:Label xmlns:mx=”http://www.adobe.com/2006/mxml” textAlign=”center”>
<mx:Script>
<![CDATA[

override public function set data(value:Object):void
{
var diff:Number;
if (Math.abs(Number(value["now"])) < 0.001) diff = 0;
else diff = Number(value["now"]) - Number(value["last"]); //计算价差
if (Math.abs(diff) < 0.001)  //如果差距小于1/10分,就用黑色
{
setStyle(”color”, “black”);
}
else if (diff < 0)
{
setStyle(”color”, “green”);
}
else
{
setStyle(”color”, “red”);
}
text = diff.toFixed(2);          //设置显示内容,并限制小数点位数
setStyle(”textAlign”, “right”);  //右对齐
}

]]>
</mx:Script>

</mx:Label>

RatioRender.mxml也类似。

其余红绿的显示实际上也可以用2的方法来显示,只不过,针对不同的列,由于不能把列的信息传进这个Renderer里面,因此需要每个列单独写一个Renderer类,所以在内容可以使用dataProvider的列中,建议还是使用1的方法。