分析家各种数据格式 分析家数据接口 2015

FinData.FxjData.CS:

using System;

using System.Collections;

using System.Text;

using System.Text.RegularExpressions;

using System.IO;

using System.Windows.Forms;

using Microsoft.Win32;

using System.Runtime.InteropServices;

namespace FinData

{

[ProgId("FinData.FxjData"),ComVisible(true)]

public class FxjData

{

public enum DataTypes { dm,hq,hqmb,hq0,hq5,cq,cw0,fp,gb,gd,cw,jjjz,jjzh,bk,pj,hqfq};

private string[,] tableNames = new string[,] {

#region 表名

{"dm","代码",""},

{"hq","行情",""},

{"hqmb","分笔成交",""},

{"hq0","动态行情",""},

{"hq5","五分钟行情",""},

{"cq","除权数据",""},

{"cw0","最新财务数据",""},

{"fp","分红送配",""},

{"gb","股本结构",""},

{"gd","十大股东",""},

{"cw","财务数据",""},

{"jjjz","基金净值",""},

{"jjzh","基金投资组合",""},

{"bk","板块",""},

{"pj","评级",""},

{"hqfq","复权行情",""}

};//行顺序与Datatype一致,列分别为表名、表中文名、对应文件名(GetTables函数中赋值)

#endregion

public FxjData()

{

try

{

//从注册表中读取分析家数据目录,如c:fxjdata

RegistryKey keyFxj;

RegistryKey keySoftware = Registry.LocalMachine.OpenSubKey("Software");

keyFxj = keySoftware.OpenSubKey("FXJ");

if (keyFxj == null)

{

keyFxj = keySoftware.OpenSubKey("Huitianqi");

if (keyFxj == null)

{

fxjPath = "";

fxjDataPath = "";

msg = "没有找到分析家安装信息!";

return;

}

}

RegistryKey keySuperstk = keyFxj.OpenSubKey("SUPERSTK");

if (keySuperstk != null)

{

fxjPath = (string)keySuperstk.GetValue("InstPath");

if (fxjPath != "")

{

fxjPath = fxjPath.ToUpper();

if (fxjPath != "" && fxjPath.EndsWith(@"") == false)

fxjPath = fxjPath + @"";

fxjDataPath = fxjPath+ @"DATA";

fxjDataPath = fxjDataPath.ToUpper();

RegistryKey keyMarket = keySuperstk.OpenSubKey("Market");

if (keyMarket != null)

{

string[] marketSubKeyNames = keyMarket.GetSubKeyNames();

if (marketSubKeyNames.Length > 0)

{

RegistryKey[] marketSubKey = new RegistryKey[marketSubKeyNames.Length];

fxjMarket = new string[marketSubKeyNames.Length, 3];

for (int i = 0; i < marketSubKeyNames.Length; i++)

{

marketSubKey[i] = keyMarket.OpenSubKey(marketSubKeyNames[i]);

if (marketSubKey[i] != null)

{

fxjMarket[i, 0] = marketSubKeyNames[i];

fxjMarket[i, 1] = (string)marketSubKey[i].GetValue("name");

fxjMarket[i, 2] = (string)marketSubKey[i].GetValue("shortname");

}

}

for (int i = 0; i < marketSubKeyNames.Length; i++)

{

int lastI=marketSubKeyNames.Length-1;

if (fxjMarket[i, 0].ToUpper() == "SH")

{

string[] temp = new string[3];

temp[0] = fxjMarket[0, 0];

temp[1] = fxjMarket[0, 1];

temp[2] = fxjMarket[0, 2];

fxjMarket[0, 0] = fxjMarket[i, 0];

fxjMarket[0, 1] = fxjMarket[i, 1];

fxjMarket[0, 2] = fxjMarket[i, 2];

fxjMarket[i, 0] = temp[0];

fxjMarket[i, 1] = temp[1];

fxjMarket[i, 2] = temp[2];

}

if (fxjMarket[i, 0].ToUpper() == "SZ")

{

string[] temp = new string[3];

temp[0] = fxjMarket[1, 0];

temp[1] = fxjMarket[1, 1];

temp[2] = fxjMarket[1, 2];

fxjMarket[1, 0] = fxjMarket[i, 0];

fxjMarket[1, 1] = fxjMarket[i, 1];

fxjMarket[1, 2] = fxjMarket[i, 2];

fxjMarket[i, 0] = temp[0];

fxjMarket[i, 1] = temp[1];

fxjMarket[i, 2] = temp[2];

}

if (fxjMarket[i, 0].ToUpper() == "$$")

{

string[] temp = new string[3];

temp[0] = fxjMarket[lastI, 0];

temp[1] = fxjMarket[lastI, 1];

temp[2] = fxjMarket[lastI, 2];

fxjMarket[lastI, 0] = fxjMarket[i, 0];

fxjMarket[lastI, 1] = fxjMarket[i, 1];

fxjMarket[lastI, 2] = fxjMarket[i, 2];

fxjMarket[i, 0] = temp[0];

fxjMarket[i, 1] = temp[1];

fxjMarket[i, 2] = temp[2];

}

}

}

}

return;

}

}

}

catch (Exception ex)

{

msg = ex.Message;

}

}

struct fileStruct

{

public string fileName;//文件名

public int startAddress,blockSize,recordSize;//起始地址,每块长度,记录长度

public bool codeIsLong, isIndexDataStruct; //codeIsLong索引中的代码包含有市场代码SH、SZ等;isIndexDataStruct象Day.Dat那样的结构即由索引+数据组成;

public string[,] fields;//字段

public fileStruct(DataTypes fileType)

{

fileName = "";

startAddress = 0;

blockSize = 0;

recordSize = 0;

codeIsLong = false;

isIndexDataStruct = true;

string fieldString = ""; //字段名,字段标签,类型,长度字段,存储顺序,偏移量

switch (fileType)

{

#region 代码表stkinfo51.dat

case DataTypes.dm:

fileName = "STKINFO51.DAT";

startAddress = 0x845898;

blockSize = 0;

recordSize = 248;

codeIsLong = false;

isIndexDataStruct = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"jc,简称,string,32,1,10,;" +

"py,拼音,string,10,2,42,";

break;

#endregion

#region 分红送配stkinfo51.dat

case DataTypes.cq:

fileName = "STKINFO51.DAT";

startAddress = 0x14;

blockSize = 2116;

recordSize = 20;

codeIsLong = false;

isIndexDataStruct = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"rq,日期,date,4,0,0,;" +

"sgbl,送股比例,single,4,1,4,;" +

"pgbl,配股比例,single,4,2,8,;" +

"pgjg,配股价格,single,4,3,12,;" +

"fh,分红,single,4,4,16,";

break;

#endregion

#region 财务数据(简单)stkinfo51.dat

case DataTypes.cw0:

fileName = "STKINFO51.DAT";

startAddress = 0x794;

blockSize = 2116;

recordSize = 196;

codeIsLong = false;

isIndexDataStruct = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"rq,更新日期,date,4,38,192,;" +

"zgb,总股本,single,4,0,0,;" +

"gjg,国家股,single,4,1,4,;"+

"fqrg,发起人法人股,single,4,2,8,;"+

"frg,法人股,single,4,3,12,;"+

"b,B股,single,4,4,16,;"+

"h,H股,single,4,5,20,;"+

"a,流通A股,single,4,6,24,;"+

"zgg,职工股,single,4,7,28,;"+

"a2zpg,A2转配股,single,4,8,32,;"+

"bszzc,总资产,single,4,9,36,;"+

"bsldzc,流动资产,single,4,10,40,;"+

"bsgdzc,固定资产,single,4,11,44,;"+

"bswxzc,无形资产,single,4,12,48,;"+

"bscqtz,长期投资,single,4,13,52,;"+

"bsldfz,流动负债,single,4,14,56,;"+

"bscqfz,长期负债,single,4,15,60,;"+

"bszbgj,资本公积金,single,4,16,64,;"+

"mggjj,每股公积金,single,4,17,68,;"+

"bsgdqy,股东权益,single,4,18,72,;"+

"iszysl,主营收入,single,4,19,76,;"+

"iszylr,主营利润,single,4,20,80,;"+

"isqtlr,其他利润,single,4,21,84,;"+

"isyylr,营业利润,single,4,22,88,;"+

"istzsy,投资收益,single,4,23,92,;"+

"isbtsr,补贴收入,single,4,24,96,;"+

"isyywsz,营业外收支,single,4,25,100,;"+

"issytz,上年损益调整,single,4,26,104,;"+

"islrze,利润总额,single,4,27,108,;"+

"isshlr,税后利润,single,4,28,112,;"+

"isjlr,净利润,single,4,29,116,;"+

"iswfplr,未分配利润,single,4,30,120,;"+

"mgwfplr,每股未分配利润,single,4,31,124,;"+

"mgsy,每股收益,single,4,32,128,;"+

"mgjzc,每股净资产,single,4,33,132,;"+

"tzmgjzc,调整每股净资产,single,4,34,136,;"+

"gdqybl,股东权益比率,single,4,35,140,;"+

"jzcsyl,净资产收益率,single,4,36,144,";

//"unknown,(未知),string,44,37,148,;"

break;

#endregion

#region 最新行情stkinfo51.dat

case DataTypes.hq0:

fileName = "STKINFO51.DAT";

startAddress = 0x845898;

blockSize = 0;

recordSize = 248;

codeIsLong = false;

isIndexDataStruct = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"jc,简称,string,32,1,10,;" +

"py,拼音,string,10,2,42,;" +

"rq,更新时间,datetime,4,5,60,;" +

"wrjl,五日均量,single,4,6,64,;" +

"zs,昨收,single,4,7,68,;" +

"jk,今开,single,4,8,72,;" +

"zg,最高,single,4,9,76,;" +

"zd,最低,single,4,10,80,;" +

"zx,最新,single,4,11,84,;" +

"zss,总手数,single,4,12,88,;" +

"je,金额,single,4,13,92,;" +

"xss,现手数,single,4,14,96,;" +

"sbcj,上笔成交价,single,4,29,156,;" +

"dbcj,当笔成交价,single,4,30,160,;" +

"np,内盘,single,4,27,148,;" +

"wp,外盘,single,4,28,152,;" +

"mr1jg,买一价,single,4,15,100,;" +

"mr1sl,买一量,single,4,18,112,;" +

"mr2jg,买二价,single,4,16,104,;" +

"mr2sl,买二量,single,4,19,116,;" +

"mr3jg,买三价,single,4,17,108,;" +

"mr3sl,买三量,single,4,20,120,;" +

"mr4jg,买四价,single,4,32,168,;" +

"mr4sl,买四量,single,4,34,176,;" +

"mr5jg,买五价,single,4,33,172,;" +

"mr5sl,买五量,single,4,35,180,;" +

"mc1jg,卖一价,single,4,21,124,;" +

"mc1sl,卖一量,single,4,24,136,;" +

"mc2jg,卖二价,single,4,22,128,;" +

"mc2sl,卖二量,single,4,25,140,;" +

"mc3jg,卖三价,single,4,23,132,;" +

"mc3sl,卖三量,single,4,26,144,;" +

"mc4jg,卖四价,single,4,36,184,;" +

"mc4sl,卖四量,single,4,38,192,;" +

"mc5jg,卖五价,single,4,37,188,;" +

"mc5sl,卖五量,single,4,39,196,";

//"jd,精度,int,4,3,52,;" +

//"scbz,删除标志,int,4,4,56,";

//"unknown,(未知),int,4,31,164,;" +

//",(未知),,48,40,200,;"

break;

#endregion

#region 分笔成交数据文件report.dat(结构同day.dat,但其中一些数据不是直接保存)

case DataTypes.hqmb:

fileName = "REPORT.DAT";

startAddress = 0x41000;

blockSize = 4068;

recordSize = 36;

codeIsLong = false;

isIndexDataStruct = false;//不完全等同于day.dat结构,因此单独处理

fieldString =

"dm,代码,code,10,0,0,;" +

"rq,日期,datetime,4,0,0,;" +

"zjcj,最近成交价,single,4,1,4,;" +

"zss,总手数,single,4,2,8,calc;" +

"je,金额,single,4,3,12,;" +

"xss,现手数,single,4,2,8,;" +

"mm,内外盘,string,2,16,35,;" +

"mr1jg,买一价,single,1,10,28,;" +

"mr1sl,买一量,single,2,4,16,;" +

"mr2jg,买二价,single,1,11,29,;" +

"mr2sl,买二量,single,2,5,18,;" +

"mr3jg,买三价,single,1,12,30,;" +

"mr3sl,买三量,single,2,6,20,;" +

"mc1jg,卖一价,single,1,13,31,;" +

"mc1sl,卖一量,single,2,7,22,;" +

"mc2jg,卖二价,single,1,14,32,;" +

"mc2sl,卖二量,single,2,8,24,;" +

"mc3jg,卖三价,single,1,15,33,;" +

"mc3sl,卖三量,single,2,9,26,";

//以类数据类型不是存储类型,程序中不直接用实际数据类型:买/卖X量为short,买/卖X价为byte

//现手数通过当总手数计算而得,应该放在总手数后面

break;

#endregion

#region 日线数据文件day.dat

case DataTypes.hq:

fileName = "DAY.DAT";

startAddress = 0x41000;

blockSize = 8192;

recordSize = 32;

codeIsLong = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"rq,日期,date,4,1,0,;" +

"kp,开盘,single,4,2,4,B;" +

"zg,最高,single,4,3,8,B;" +

"zd,最低,single,4,4,12,B;" +

"sp,收盘,single,4,5,16,B;" +

"sl,成交数量,single,4,6,20,A;"+

"je,成交金额,single,4,7,24,";

break;

#endregion

#region 5分钟数据文件min.dat

case DataTypes.hq5:

fileName = "MIN.DAT";

startAddress = 0x41000;

blockSize = 8192;

recordSize = 32;

codeIsLong = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"rq,日期,datetime,4,1,0,;" +

"kp,开盘,single,4,2,4,B;" +

"zg,最高,single,4,3,8,B;" +

"zd,最低,single,4,4,12,B;" +

"sp,收盘,single,4,5,16,B;" +

"sl,成交数量,single,4,6,20,A;"+

"je,成交金额,single,4,7,24,";

break;

#endregion

#region 分红送配数据文件exprof.fdt

case DataTypes.fp:

fileName = "EXPROF.FDT";

startAddress = 0x41000;

blockSize = 3776;

recordSize = 236;

codeIsLong = true;

fieldString =

"dm,代码,code,12,0,0,;"+

"cqrq,除权日期,date,4,23,176,;" +

"sgbl,送股比例,double,8,1,12,;" +

"sgdjr,送股股权登记日,date,4,2,20,;"+

"sgcqr,送股除权日,date,4,3,24,;"+

"sgssr,红股上市日,date,4,4,28,;"+

"zzbl,转增比例,double,8,5,32,;"+

"zzdjr,转增股权登记日,date,4,6,40,;"+

"zzcqr,转增除权日,date,4,7,44,;"+

"zzssr,转增上市日,date,4,8,48,;"+

"fhbl,分红比例,double,8,9,52,;"+

"fhdjr,分红股权登记日,date,4,10,60,;" +

"fhcxr,分红除息日,date,4,11,64,;" +

"fhpxr,分红派息日,date,4,12,68,;" +

"pgbl,配股比例,double,8,13,72,;"+

"pgdjr,配股股权登记日,date,4,14,80,;"+

"pgcqr,配股除权基准日,date,4,15,84,;"+

"pgjkqsr,配股缴款起始日,date,4,16,88,;"+

"pgjkzzr,配股缴款终止日,date,4,17,92,;"+

"pgssr,配股可流通上市日,date,4,18,96,;"+

"pgjg,配股价格,single,4,19,100,;"+

"frgpgbl,公众股受让法人股配股比例,double,8,20,104,;"+

"frgmgzrf,认购法人股配股每股转让费,single,4,21,112,;"+

"pgzcxs,配股主承销商,string,60,22,116,;"+

"bgrq,报告日期,date,4,24,180,;"+

"dshrq,董事会日期,date,4,25,184,;"+

"gdhrq,股东会日期,date,4,26,188,;"+

"fhggrq,分红公告日期,date,4,27,192,;"+

"zgbjs,总股本基数,double,8,28,196,;"+

"sgsl,送股数量,double,8,29,204,;"+

"zzsl,转增数量,double,8,30,212,;"+

"sjpgs,实际配股总数,double,8,31,220,;"+

"cqhzgb,除权后总股本,double,8,32,228";

break;

#endregion

#region 股本结构Capital.fdt

case DataTypes.gb:

fileName = "CAPITAL.FDT";

startAddress = 0x41000;

blockSize = 3488;

recordSize = 218;

codeIsLong = true;

fieldString =

"dm,代码,code,12,0,0;" +

"rq,日期,date,4,17,214;"+

"zgb,总股本,double,8,1,12;" +

"gjg,国家股,double,8,2,20;" +

"fqrg,发起人股,double,8,3,28;" +

"frg,法人股,double,8,4,36;" +

"ybfrps,一般法人配售,double,8,5,44;" +

"zgg,内部职工股,double,8,6,52;" +

"a,流通A股,double,8,7,60;" +

"zltzag,战略投资A股,double,8,8,68;" +

"zpg,转配股,double,8,9,76;" +

"jjps,基金配售,double,8,10,84;" +

"h,H股,double,8,11,92;" +

"b,B股,double,8,12,100;" +

"yxg,优先股,double,8,13,108;" +

"ggcg,高级管理人员持股,double,8,14,116;" +

"gbbdyy,股本变动原因,string,56,15,124;" +

"gbbdyylb,股本变动原因类别,string,34,16,180";

break;

#endregion

#region 财务数据Finance.fdt

case DataTypes.cw:

fileName = "FINANCE.FDT";

startAddress = 0x41000;

blockSize = 14848;

recordSize = 464;

codeIsLong = true;

fieldString =

"dm,代码,code,12,0,0,;"+

"rq,日期,date,4,,460,;"+

"bsdqtzje,短期投资净额,double,8,1,12,;"+

"bsyszkje,应收帐款净额,double,8,2,20,;"+

"bschje,存货净额,double,8,3,28,;"+

"bsldzc,流动资产,double,8,4,36,;"+

"bscqtzje,长期投资净额,double,8,5,44,;"+

"bsgdzc,固定资产,double,8,6,52,;"+

"bswxzc,无形及其他资产,double,8,7,60,;"+

"bszzc,总资产,double,8,8,68,;"+

"bsdqjk,短期借款,double,8,9,76,;"+

"bsyfzk,应付帐款,double,8,10,84,;"+

"bsldfz,流动负债,double,8,11,92,;"+

"bscqfz,长期负债,double,8,12,100,;"+

"bsfz,负债合计,double,8,13,108,;"+

"bsgb,股本,double,8,14,116,;"+

"bsssgdqy,少数股东权益,double,8,15,124,;"+

"bsgdqy,股东权益,double,8,16,132,;"+

"bszbgj,资本公积,double,8,17,140,;"+

"bsyygj,盈余公积,double,8,18,148,;"+

"iszysr,主营业务收入净额,double,8,1,156,;"+

"iszycb,主营业务成本,double,8,2,164,;"+

"iszylr,主营业务利润,double,8,3,172,;"+

"isqtlr,其它业务利润,double,8,4,180,;"+

"isyyfy,营业费用,double,8,5,188,;"+

"isglfy,管理费用,double,8,6,196,;"+

"iscwfy,财务费用,double,8,7,204,;"+

"istzsy,投资收益,double,8,8,212,;"+

"islrze,利润总额,double,8,9,220,;"+

"issds,所得税,double,8,10,228,;"+

"isjlr,净利润,double,8,11,236,;"+

"iskchjlr,扣除经常性损益后的净利润,double,8,12,244,;"+

"iswfplr,未分配利润,double,8,13,252,;"+

"cfjyhdxjlr,经营活动现金流入,double,8,1,260,;"+

"cfjyhdxjlc,经营活动现金流出,double,8,2,268,;"+

"cfjyhdxjje,经营活动现金净额,double,8,3,276,;"+

"cftzxjlr,投资现金流入,double,8,4,284,;"+

"cftzxjlc,投资现金流出,double,8,5,292,;"+

"cftzxjje,投资现金净额,double,8,6,300,;"+

"cfczxjlr,筹措现金流入,double,8,7,308,;"+

"cfczxjlc,筹措现金流出,double,8,8,316,;"+

"cfczxjje,筹措现金净额,double,8,9,324,;"+

"cfxjjze,现金及现金等价物净增额,double,8,10,332,;"+

"cfxsspxj,销售商品收到的现金,double,8,11,340,;"+

"mgsy,每股收益,single,4,1,348,;"+

"mgjzc,每股净资产,single,4,2,352,;"+

"tzmgjzc,调整后每股净资产,single,4,3,356,;"+

"mgzbgjj,每股资本公积金,single,4,4,360,;"+

"mgwfplr,每股未分配利润,single,4,5,364,;"+

"mgjyxjllje,每股经营活动产生的现金流量净额,single,4,6,368,;"+

"mgxjzjje,每股现金及现金等价物增加净额,single,4,7,372,;"+

"mll,毛利率,single,4,8,376,;"+

"zyywlrl,主营业务利润率,single,4,9,380,;"+

"jll,净利率,single,4,10,384,;"+

"zzcbcl,总资产报酬率,single,4,11,388,;"+

"jzcsyl,净资产收益率,single,4,12,392,;"+

"xsxjzb,销售商品收到的现金占主营收入比例,single,4,13,396,;"+

"yszczzl,应收帐款周转率,single,4,14,400,;"+

"chzzl,存货周转率,single,4,15,404,;"+

"gdzczzl,固定资产周转率,single,4,16,408,;"+

"zyywzzl,主营业务增长率,single,4,17,412,;"+

"jlrzzl,净利润增长率,single,4,18,416,;"+

"zzczzl,总资产增长率,single,4,19,420,;"+

"jzczzl,净资产增长率,single,4,20,424,;"+

"ldbl,流动比率,single,4,21,428,;"+

"sdbl,速动比率,single,4,22,432,;"+

"zcfzbl,资产负债比率,single,4,23,436,;"+

"fzbl,负债比率,single,4,24,440,;"+

"gdqybl,股东权益比率,single,4,25,444,;"+

"gdzcbl,固定资产比率,single,4,26,448,;"+

"kchmgjlr,扣除经常性损益后每股净利润,single,4,27,452,";

break;

#endregion

#region 十大股东stkhold.fdt

case DataTypes.gd:

fileName = "STKHOLD.FDT";

startAddress = 0x41000;

blockSize = 17568;

recordSize = 2196;

codeIsLong = true;

fieldString =

"dm,代码,code,12,0,0,;"+

"rq,日期,date,4,66,2192,;" +

"gd1mc,股东1名称,string,160,1,12,;"+

"gd1cgsl,股东1持股数量,double,8,2,172,;"+

"gd1cgbl,股东1持股比例,single,4,3,180,;"+

"gd1bz,股东1备注,string,20,4,184,;"+

"gd1fr,股东1法人,string,8,5,204,;"+

"gd1jyfw,股东1经营范围,string,16,6,212,;"+

"gd2mc,股东2名称,string,160,7,228,;"+

"gd2cgsl,股东2持股数量,double,8,8,388,;"+

"gd2cgbl,股东2持股比例,single,4,9,396,;"+

"gd2bz,股东2备注,string,20,10,400,;"+

"gd2fr,股东2法人,string,8,11,420,;"+

"gd2jyfw,股东2经营范围,string,16,12,428,;"+

"gd3mc,股东3名称,string,160,13,444,;"+

"gd3cgsl,股东3持股数量,double,8,14,604,;"+

"gd3cgbl,股东3持股比例,single,4,15,612,;"+

"gd3bz,股东3备注,string,20,16,616,;"+

"gd3fr,股东3法人,string,8,17,636,;"+

"gd3jyfw,股东3经营范围,string,16,18,644,;"+

"gd4mc,股东4名称,string,160,19,660,;"+

"gd4cgsl,股东4持股数量,double,8,20,820,;"+

"gd4cgbl,股东4持股比例,single,4,21,828,;"+

"gd4bz,股东4备注,string,20,22,832,;"+

"gd4fr,股东4法人,string,8,23,852,;"+

"gd4jyfw,股东4经营范围,string,16,24,860,;"+

"gd5mc,股东5名称,string,160,25,876,;"+

"gd5cgsl,股东5持股数量,double,8,26,1036,;"+

"gd5cgbl,股东5持股比例,single,4,27,1044,;"+

"gd5bz,股东5备注,string,20,28,1048,;"+

"gd5fr,股东5法人,string,8,29,1068,;"+

"gd5jyfw,股东5经营范围,string,16,30,1076,;"+

"gd6mc,股东6名称,string,160,31,1092,;"+

"gd6cgsl,股东6持股数量,double,8,32,1252,;"+

"gd6cgbl,股东6持股比例,single,4,33,1260,;"+

"gd6bz,股东6备注,string,20,34,1264,;"+

"gd6fr,股东6法人,string,8,35,1284,;"+

"gd6jyfw,股东6经营范围,string,16,36,1292,;"+

"gd7mc,股东7名称,string,160,37,1308,;"+

"gd7cgsl,股东7持股数量,double,8,38,1468,;"+

"gd7cgbl,股东7持股比例,single,4,39,1476,;"+

"gd7bz,股东7备注,string,20,40,1480,;"+

"gd7fr,股东7法人,string,8,41,1500,;"+

"gd7jyfw,股东7经营范围,string,16,42,1508,;"+

"gd8mc,股东8名称,string,160,43,1524,;"+

"gd8cgsl,股东8持股数量,double,8,44,1684,;"+

"gd8cgbl,股东8持股比例,single,4,45,1692,;"+

"gd8bz,股东8备注,string,20,46,1696,;"+

"gd8fr,股东8法人,string,8,47,1716,;"+

"gd8jyfw,股东8经营范围,string,16,48,1724,;"+

"gd9mc,股东9名称,string,160,49,1740,;"+

"gd9cgsl,股东9持股数量,double,8,50,1900,;"+

"gd9cgbl,股东9持股比例,single,4,51,1908,;"+

"gd9bz,股东9备注,string,20,52,1912,;"+

"gd9fr,股东9法人,string,8,53,1932,;"+

"gd9jyfw,股东9经营范围,string,16,54,1940,;"+

"gd10mc,股东10名称,string,160,55,1956,;"+

"gd10cgsl,股东10持股数量,double,8,56,2116,;"+

"gd10cgbl,股东10持股比例,single,4,57,2124,;"+

"gd10bz,股东10备注,string,20,58,2128,;"+

"gd10fr,股东10法人,string,8,59,2148,;"+

"gd10jyfw,股东10经营范围,string,16,60,2156,;"+

"gdzs,股东总数,int,4,61,2172,;"+

"gjgfrggds,国家股法人股股东数,int,4,62,2176,;"+

"aggds,流通股A股股东数,int,4,63,2180,;"+

"bggds,流通股B股股东数,int,4,64,2184,";

break;

#endregion

#region 基金周报fundweek.fdt

case DataTypes.jjjz:

fileName = "FUNDWEEK.FDT";

startAddress = 0x41000;

blockSize = 12032;

recordSize = 188;

codeIsLong = true;

fieldString =

"dm,代码,code,12,0,0,;"+

"rq,日期,date,4,13,184,;"+

"dwjz,基金单位净值,single,4,6,152,;" +

"jjze,基金净值总额,double,8,5,144,;" +

"gm,基金规模,double,8,4,136,;" +

"dwcz,基金单位初值,single,4,7,156,;"+

"tzhjz,基金调整后净值,single,4,8,160,;"+

"tzhcz,基金调整后初值,single,4,9,164,;"+

"zzl,基金增长率(%),double,8,10,168,;"+

"ljjz,基金累计净值,single,4,11,176,;"+

"slrq,基金设立日期,date,4,1,12,;"+

"glr,基金管理人,string,60,2,16,;"+

"tgr,基金托管人,string,60,3,76,"

;//12为保留字段

break;

#endregion

#region 基金投资组合funddiv.fdt

case DataTypes.jjzh:

fileName = "FUNDDIV.FDT";

startAddress = 0x41000;

blockSize = 8320;

recordSize = 260;

codeIsLong = true;

fieldString =

"dm,代码,code,12,0,0,;" +

"bgrq,报告日期,date,4,31,252,;" +

"zzrq,截止日期,date,4,32,256,;" +

"dm1,证券1代码,string,12,1,12,;" +

"sz1,证券1市值,double,8,2,24,;" +

"bl1,证券1占净值比例(%),single,4,3,32,;" +

"dm2,证券2代码,string,12,4,36,;" +

"sz2,证券2市值,double,8,5,48,;" +

"bl2,证券2占净值比例(%),single,4,6,56,;" +

"dm3,证券3代码,string,12,7,60,;" +

"sz3,证券3市值,double,8,8,72,;" +

"bl3,证券3占净值比例(%),single,4,9,80,;" +

"dm4,证券4代码,string,12,10,84,;" +

"sz4,证券4市值,double,8,11,96,;" +

"bl4,证券4占净值比例(%),single,4,12,104,;" +

"dm5,证券5代码,string,12,13,108,;" +

"sz5,证券5市值,double,8,14,120,;" +

"bl5,证券5占净值比例(%),single,4,15,128,;" +

"dm6,证券6代码,string,12,16,132,;" +

"sz6,证券6市值,double,8,17,144,;" +

"bl6,证券6占净值比例(%),single,4,18,152,;" +

"dm7,证券7代码,string,12,19,156,;" +

"sz7,证券7市值,double,8,20,168,;" +

"bl7,证券7占净值比例(%),single,4,21,176,;" +

"dm8,证券8代码,string,12,22,180,;" +

"sz8,证券8市值,double,8,23,192,;" +

"bl8,证券8占净值比例(%),single,4,24,200,;" +

"dm9,证券9代码,string,12,25,204,;" +

"sz9,证券9市值,double,8,26,216,;" +

"bl9,证券9占净值比例(%),single,4,27,224,;" +

"dm10,证券10代码,string,12,28,228,;" +

"sz10,证券10市值,double,8,29,240,;" +

"bl10,证券10占净值比例(%),single,4,30,248,";

break;

#endregion

#region 板块userdatablock

case DataTypes.bk:

fileName = "BLOCK.DEF";

startAddress = 0;

blockSize = 0;

recordSize = 248;

codeIsLong = false;

isIndexDataStruct = false;

fieldString =

"lb,类别,string,20,0,0,;" +

"bk,板块,string,20,1,10,;" +

"dm,证券代码,string,10,2,42,";

break;

#endregion

#region 评级

case DataTypes.pj:

fileName = "评级.str";

startAddress = 0;

blockSize = 256;

recordSize = 256;

codeIsLong = true;

isIndexDataStruct = false;

fieldString =

"dm,证券代码,string,12,0,0,;" +

"pj,评级,string,2,2,0,;" +

"sm,说明,string,244,2,0,";

break;

#endregion

#region 复权行情,计算而得

case DataTypes.hqfq:

fileName = "DAY.DAT";

startAddress = 0x41000;

blockSize = 8192;

recordSize = 32;

codeIsLong = false;

fieldString =

"dm,代码,code,10,0,0,;" +

"rq,日期,date,4,1,0,;" +

"kp,开盘复权价,single,4,2,4,B;" +

"zg,最高复权价,single,4,3,8,B;" +

"zd,最低复权价,single,4,4,12,B;" +

"sp,收盘复权价,single,4,5,16,B;" +

"sl,复权成交数量,single,4,6,20,A;" +

"je,成交金额,single,4,7,24,;"+

"spsyl,收盘收益率,single,4,0,0,";

break;

#endregion

}

string[] fieldLine = fieldString.Split(new char[] { ‘;‘ });

fields = new string[fieldLine.Length, 7];

for (int i = 0; i < fieldLine.Length; i++)

{

string[] field = fieldLine[i].Split(new char[]{‘,‘} ,7 );

for(int j=0;j<field.Length;j++)

{

fields[i,j]=field[j];

}

}

}

}

private string fxjPath = "";

private string fxjDataPath="";

private string[,] fxjMarket;

private string msg = "";

private DateTime date19700101 = new DateTime(1970, 1, 1);

private FileStream fs; private BinaryReader br;

private void checkFileStream(string fxjFileName)

{

if (this.fs == null || (this.fs != null && this.fs.Name.ToUpper() != fxjFileName))

{

if (this.fs != null)

{

fs.Close();

br.Close();

}

fs = new FileStream(fxjFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

br = new BinaryReader(fs);

}

}

public string Version

{

get

{

return ("0.7");

}

}

public int Error

{

get

{

if (msg != "") return 1;

else return 0;

}

}

public string Msg

{

get { return (msg); }

}

public string FxjPath //属性FxjPath

{

get

{

return (fxjPath);

}

set

{

fxjPath = value;

fxjPath = fxjPath.Trim().ToUpper();

if (fxjPath != "" && !fxjPath.EndsWith(@""))

{

fxjPath += @"";

}

fxjPath = fxjPath.ToUpper();

}

}

public string FxjDataPath //属性FxjDataPath

{

get

{

return (fxjDataPath);

}

set

{

fxjDataPath = value;

fxjDataPath = fxjDataPath.Trim().ToUpper();

if (fxjDataPath!="" && !fxjDataPath.EndsWith(@""))

{

fxjDataPath += @"";

}

fxjDataPath=fxjDataPath.ToUpper();

}

}

public void ShowAboutBox()

{

FinData.AboutBox ab = new AboutBox();

ab.ShowDialog();

}

public void ShowFxjConverter()

{

FxjConverter fxjConverter = new FxjConverter();

fxjConverter.ShowDialog();

}

public void ShowFxjReader()

{

FxjReader fxjReader = new FxjReader();

fxjReader.ShowDialog();

}

public string[,] GetMarkets()

{

return (fxjMarket);

}

public string[,] GetTables()

{

if (tableNames[0, 2] == "")

{

for (int i = 0; i < tableNames.GetLength(0); i++)

{

DataTypes d = (DataTypes)Enum.Parse(typeof(DataTypes), tableNames[i,0].ToLower());

fileStruct fxjFileStruct = new fileStruct(d);

tableNames[i, 2] = fxjFileStruct.fileName;

}

}

return tableNames;

}

public string GetTableDef(string dataType, string descDataType, bool delOldTable)

{

dataType = dataType.Trim(); descDataType = descDataType.Trim();

string result = "";

fileStruct fxjFileStruct = new fileStruct((DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower()));

switch (descDataType.ToUpper())

{

case "SAS":

for (int i = 0; i < fxjFileStruct.fields.GetLength(0); i++)

{

if (result != "") result += ",";

result += fxjFileStruct.fields[i, 0];//字段

if (" ,code,string".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " char(" + fxjFileStruct.fields[i, 3] + ") format=$" + fxjFileStruct.fields[i, 3] + "."; //字符串

}

else if (" ,int,single,double".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " num "; //数值类型

}

else if (" ,date".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " num format=YYMMDD10."; //date类型

}

else if (" ,datetime".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " num format=datetime."; //datetime类型

}

result += " label=‘" + fxjFileStruct.fields[i, 1] + "‘";//标签

}

result = "create table FinData." + dataType + "(" + result + ");";

if (delOldTable == true)

{

result = "drop table FinData." + dataType + ";" + result;

}

result = "proc sql;" + result + "quit;";

break;

case "SASINPUT"://用于SAS直接读取数据时所用的INPUT语句,需进一步修改

for (int i = 0; i < fxjFileStruct.fields.GetLength(0); i++)

{

if (" ,code,string".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " @(p+" + fxjFileStruct.fields[i, 5] + ") " + fxjFileStruct.fields[i, 0] + " $" + fxjFileStruct.fields[i, 3] + "."; //字符串

}

else if (" ,int,date,datetime".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " @(p+" + fxjFileStruct.fields[i, 5] + ") " + fxjFileStruct.fields[i, 0] + " ib" + fxjFileStruct.fields[i, 3] + "."; //数值类型

}

else if (" ,single".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " @(p+" + fxjFileStruct.fields[i, 5] + ") " + fxjFileStruct.fields[i, 0] + " float" + fxjFileStruct.fields[i, 3] + "."; //数值类型

}

else if (" ,double".IndexOf(fxjFileStruct.fields[i, 2]) > 0)

{

result += " @(p+" + fxjFileStruct.fields[i, 5] + ") " + fxjFileStruct.fields[i, 0] + " rb" + fxjFileStruct.fields[i, 3] + "."; //数值类型

}

}

break;

case "FIELDS"://列出字段名称

for (int i = 0; i < fxjFileStruct.fields.GetLength(0); i++)

{

result += " " + fxjFileStruct.fields[i, 0] ;

}

break;

default:

result = "";

break;

}

return result;

}

public string GetCodeType(string code)

{

code = code.Trim().ToUpper();

if (Regex.IsMatch(code, @"(SH000300)") == true)

{

return "zs";

}

if (Regex.IsMatch(code, @"(SH60[0-8]d{3})|(SH90d{4})|(SZ00[01256789]d{3})|(SZ20d{4})|(SZ4[02]d{4})") == true)

{

return "gp";

}

else if (Regex.IsMatch(code, @"(SH00000d)|(SH00001[0-6])") == true)

{

return "zs";

}

else if (Regex.IsMatch(code, @"(SH[012]d{5})|(SZ1[0123]d{4})") == true && Regex.IsMatch(code, @"(SH181d{3})") == false && Regex.IsMatch(code, @"(SH190d{3})") == false)

{

return "zq";

}

else if (Regex.IsMatch(code, @"(SH5[01]d{4})|(SZ184d{3})|(SZ1[56]d{4})") == true)

{

return "jj";

}

else if (Regex.IsMatch(code, @"(SH58d{4})|(SZ03d{4})") == true)

{

return "qz";

}

else if (Regex.IsMatch(code, @"(SH000d{3})|(SZ399d{3})|(SH8[013]d{4})") == true)

{

return "zs";

}

return "";

}

private string [] GetCodes(string Market) //读取Day.dat中的代码

{

//沪市指数代码转换表,分析家同时保存沪市两类代码

string[,] codesRename = new string[,]

{

{"SH1A0001","SH000001"},

{"SH1A0002","SH000002"},

{"SH1A0003","SH000003"},

{"SH1B0001","SH000004"},

{"SH1B0002","SH000005"},

{"SH1B0004","SH000006"},

{"SH1B0005","SH000007"},

{"SH1B0006","SH000008"},

{"SH1B0007","SH000010"},

{"SH1B0008","SH000011"},

{"SH1B0009","SH000012"},

{"SH1B0010","SH000013"},

{"SH1C0003","SH000016"}

};

long len = -1;

long pos = 0;

int flag;

if (FxjDataPath == "")

{

msg = @"无法在注册表中到分析家数据文件目录,请自行将属性 FxjDataPath设置为有效路径,如c:fxjdata。";

return new string[1] { null };

}

Market = Market.Trim().ToUpper();

if (Market == "")

{

msg = "Market参数只能是市场简称,如沪市为SH,深市为SZ,香港为HK等。";

return null;

}

string FxjFile = fxjDataPath + Market+@"DAY.DAT";

msg="";

if (!File.Exists(FxjFile)) //DAY.DAT文件不存在

{

msg = FxjFile + "不存在!";

return new string[1] { null };

}

try

{

this.checkFileStream(FxjFile);

int secCounts = 0;//文件中证券总数

string code = "";

len = fs.Length;

fs.Position=0;

flag = br.ReadInt32();

if (flag == -65823756) //0xFC139BF4

{

fs.Position = 12;

secCounts=br.ReadInt32();

string[] codes = new string[secCounts];

for (int i = 0; i < secCounts; i++)

{

pos = 24 + 64*i;

if (pos <= len)

{

fs.Position = pos;

code = new string(br.ReadChars(10));//分析家用10个字节保存代码,一般用6个字节

code = Market + code.Replace("", "");

code = code.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

code = code.ToUpper();

for (int icode = 0; icode < codesRename.GetLength(0); icode++)

{

code = code.Replace(codesRename[icode, 0], codesRename[icode, 1]);

}

codes[i] = code;

}

}

//fs.Close();

msg = "";

return codes;

}

}

catch(Exception e)

{

msg=e.Message;

}

return new string[1] { null };

}

public string[,] GetFields(string dataType)

{

msg = "";

try

{

DataTypes d = (DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower());

return GetFields(d);

}

catch

{

msg = @"输入的参数有误。参数只能是:";

foreach (string s in Enum.GetNames(typeof(DataTypes)))

msg += " "" + s + """;

msg += @" 或者 ";

foreach (int i in Enum.GetValues(typeof(DataTypes)))

msg += " " + i.ToString();

return new string[1, 1] { { null } };

}

}

private string[,] GetFields(DataTypes dataType)

{

msg = "";

try

{

fileStruct fxjFileStruct = new fileStruct(dataType);

string[,] fields = new string[fxjFileStruct.fields.GetLength(0), 3];

//fields[0, 0] = "<字段名>"; fields[0, 1] = "<含义>"; fields[0, 2] = "<类型>";

for (int i = 0; i < fxjFileStruct.fields.GetLength(0); i++)

{

for (int j = 0; j < 3; j++)

{

fields[i, j] = fxjFileStruct.fields[i, j];

}

}

return fields;

}

catch

{

msg = "错误"; return new string[1, 1] { { null } };

}

}

public string[,] GetData(string dataType, string code)

{

return GetData(dataType, code, "");

}

public string[,] GetData(string dataType, string code, string newFileName)

{

try

{

DataTypes d = (DataTypes)Enum.Parse(typeof(DataTypes), dataType.ToLower());

return GetData(d, code,newFileName);

}

catch

{

msg = @"输入的参数有误。第一个参数只能是:";

foreach (string s in Enum.GetNames(typeof(DataTypes)))

msg += " "" + s + """;

msg += @" 或者 ";

foreach (int i in Enum.GetValues(typeof(DataTypes)))

msg += " " + i.ToString() ;

return new string[1, 1] { { null } };

}

}

private string[,] GetData(DataTypes dataType,string code,string newFileName) //读取数据,重载

{

if (dataType == DataTypes.bk) return GetBK(code);

if (dataType == DataTypes.pj) return GetPJ(code);

if (dataType == DataTypes.hqfq) return GetHqfq(dataType,code,newFileName);

#region 读取数据前初始化

msg = "";

fileStruct fxjFileStruct = new fileStruct(dataType);

if (newFileName != "") fxjFileStruct.fileName = newFileName; //如果用户重新指定了文件名

code = code.Trim().ToUpper();

if (code == "")

{

msg = @"CODE参数不可为空。请提供证券代码,如SZ000001。";

return new string[1, 1] { { null } };

}

ArrayList recordList = new ArrayList();

int intField; float floatField; double doubleField; //string stringField;

System.Globalization.CultureInfo cnCultureInfo = new System.Globalization.CultureInfo("zh-CN");

string market = code.Substring(0, 2);

int recordCounts = 0;

分析家各种数据格式 分析家数据接口 2015
short[] blocks = new short[25];

long len = -1;

long pos = 0;

if (this.FxjDataPath == "")

{

msg = @"无法在注册表中到分析家数据文件目录,请自行将属性 FxjDataPath设置为有效路径,如c:fxjdata。";

return new string[1, 1] { { null } };

}

string FxjFile = fxjDataPath + fxjFileStruct.fileName;

FxjFile = FxjFile.ToUpper();

if (!File.Exists(FxjFile))

{

FxjFile = fxjDataPath + market +@"" +fxjFileStruct.fileName;

}

msg = "";

if (!File.Exists(FxjFile))

{

msg = fxjFileStruct.fileName + "没有找到!";

return new string[1, 1] { { null } };

}

#endregion

if (fxjFileStruct.isIndexDataStruct == true)

{

#region 处理DAY.DAT等结构(索引/数据)的数据

try

{

this.checkFileStream(FxjFile);

int secCounts = 0;//文件中证券总数

string code0 = "";

len = fs.Length;

fs.Position = 12;

secCounts = br.ReadInt32();

bool codeRead = false;

for (int i = 0; i < secCounts && codeRead==false; i++)

{

pos = 24 + 64 * i;

if (pos <= len)

{

fs.Position = pos;

//code0 = new string(br.ReadChars(10));//分析家用10个字节保存代码,一般用8个字节

code0 = System.Text.Encoding.Default.GetString(br.ReadBytes(10));

code0 = code0.Replace("", "");

code0 = code0.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

if (fxjFileStruct.codeIsLong == false && code == market + code0 || fxjFileStruct.codeIsLong == true && code == code0)

{

recordCounts = br.ReadInt32();

for (int j = 0; j < 25; j++)

{

blocks[j] = br.ReadInt16();

}

codeRead = true;

}

}

}

int iRecord = 1;//记录

int iBlock = 0;//第iBlock块

int fieldCounts = fxjFileStruct.fields.GetLength(0);

while (iBlock < 25 && blocks[iBlock] != -1)

{

int r = 0;

while (iRecord < recordCounts + 1 && r < fxjFileStruct.blockSize / fxjFileStruct.recordSize) //16=3776/236

{

string[] record = new string[fieldCounts];

pos = fxjFileStruct.startAddress + blocks[iBlock] * fxjFileStruct.blockSize + r * fxjFileStruct.recordSize;

for (int iField = 0; iField < fieldCounts; iField++)

{

fs.Position = pos + Convert.ToInt64(fxjFileStruct.fields[iField, 5]);

switch (fxjFileStruct.fields[iField, 2].ToLower())

{

case "code":

//code0 = new string(br.ReadChars(8));//有12位,实际用了8位,第9-12位一般为,有时是错误字节,因为只读8位

//code0 = code0.Replace("", "");

record[iField] = code;

break;

case "date":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddDays(intField / 86400)).ToString("yyyy-MM-dd"));

break;

case "datetime":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddSeconds(intField)).ToString("yyyy-MM-dd HH:mm:ss"));

break;

case "int":

intField = br.ReadInt32();

record[iField] = intField.ToString("D", cnCultureInfo);

break;

case "single":

//floatField = br.ReadSingle();

//if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") floatField *= 100;

//record[iField] = floatField.ToString("G", cnCultureInfo);

doubleField =(double) br.ReadSingle();

if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") doubleField *= 100;

record[iField] = doubleField.ToString("_jj_qz".IndexOf(this.GetCodeType(code)) > 0 ? "F3" : "F", cnCultureInfo);

break;

case "double":

doubleField = br.ReadDouble();

record[iField] = doubleField.ToString("F", cnCultureInfo);

break;

case "string":

record[iField] = System.Text.Encoding.Default.GetString(br.ReadBytes(Convert.ToInt32(fxjFileStruct.fields[iField, 3]))).Replace("", "");

break;

}

}

recordList.Add(record);

r = r + 1;

iRecord = iRecord + 1;

}

iBlock = iBlock + 1;

}

//fs.Close();

string[,] records = new string[recordList.Count, fieldCounts];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

for (int j = 0; j < fieldCounts; j++)

{

records[i, j] = record0[j];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

catch (Exception e)

{

msg = e.Message;

}

#endregion

}

else

{

switch (dataType)

{

case DataTypes.dm:

#region 代码表(处理STKINFO51.DAT等结构的数据)

try

{

this.checkFileStream(FxjFile);

string[,] codesRename = new string[,]

{

{"SH1A0001","SH000001"},

{"SH1A0002","SH000002"},

{"SH1A0003","SH000003"},

{"SH1B0001","SH000004"},

{"SH1B0002","SH000005"},

{"SH1B0004","SH000006"},

{"SH1B0005","SH000007"},

{"SH1B0006","SH000008"},

{"SH1B0007","SH000010"},

{"SH1B0008","SH000011"},

{"SH1B0009","SH000012"},

{"SH1B0010","SH000013"},

{"SH1C0003","SH000016"}

};

int secCounts = 0;//文件中证券总数

string code0 = "";

fs.Position = 8;

secCounts = br.ReadInt32();

int fieldCounts = fxjFileStruct.fields.GetLength(0);

for (int i = 0; i < secCounts; i++)

{

pos = fxjFileStruct.startAddress + i * fxjFileStruct.recordSize;

fs.Position = pos;

code0 = System.Text.Encoding.Default.GetString(br.ReadBytes(10));

code0 = code0.Replace("", "");

code0 = code0.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

if (Regex.IsMatch(code0, @"(1[ABC]00dd)") == false)

{

string[] recordFieldName = new string[fieldCounts];

string[] record = new string[fieldCounts];

for (int iField = 0; iField < fieldCounts; iField++)

{

fs.Position = pos + Convert.ToInt64(fxjFileStruct.fields[iField, 5]);

switch (fxjFileStruct.fields[iField, 2].ToLower())

{

case "code":

record[iField] = fxjFileStruct.codeIsLong == true ? code0 : market + code0;

record[iField] = record[iField].Replace("HKHK", "HK");

for (int icode = 0; icode < codesRename.GetLength(0); icode++)

{

record[iField] = record[iField].Replace(codesRename[icode, 0], codesRename[icode, 1]);

}

break;

case "date":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddDays(intField / 86400)).ToString("yyyy-MM-dd"));

break;

case "datetime":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddSeconds(intField)).ToString("yyyy-MM-dd HH:mm:ss"));

break;

case "int":

intField = br.ReadInt32();

record[iField] = intField.ToString("D");

break;

case "single":

floatField = br.ReadSingle();

if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") floatField *= 100;

record[iField] = floatField.ToString("F");

break;

case "double":

doubleField = br.ReadDouble();

record[iField] = doubleField.ToString("F");

break;

case "string":

record[iField] = System.Text.Encoding.Default.GetString(br.ReadBytes(Convert.ToInt32(fxjFileStruct.fields[iField, 3]))).Replace("", "");

break;

}

}

recordList.Add(record);

}

}

//fs.Close();

string[,] records = new string[recordList.Count, fieldCounts];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

for (int j = 0; j < fieldCounts; j++)

{

records[i, j] = record0[j];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

catch (Exception e)

{

msg = e.Message;

}

#endregion

break;

case DataTypes.hq0:

#region 最新行情(处理STKINFO51.DAT等结构的数据)

try

{

this.checkFileStream(FxjFile);

int secCounts = 0;//文件中证券总数

string code0 = "";

fs.Position = 8;

secCounts = br.ReadInt32();

int fieldCounts = fxjFileStruct.fields.GetLength(0);

bool hasCode = false;

for (int i = 0; i < secCounts && hasCode==false; i++)

{

pos = fxjFileStruct.startAddress + i * fxjFileStruct.recordSize;

fs.Position = pos;

code0 = System.Text.Encoding.Default.GetString(br.ReadBytes(10));

code0 = code0.Replace("", "");

code0 = code0.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

if (fxjFileStruct.codeIsLong == false && code == market + code0 || fxjFileStruct.codeIsLong == true && code == code0)

{

hasCode = true;

string[] record = new string[fieldCounts];

for (int iField = 0; iField < fieldCounts; iField++)

{

fs.Position = pos + Convert.ToInt64(fxjFileStruct.fields[iField, 5]);

switch (fxjFileStruct.fields[iField, 2].ToLower())

{

case "code":

record[iField] = code;

break;

case "date":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddDays(intField / 86400)).ToString("yyyy-MM-dd"));

break;

case "datetime":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddSeconds(intField)).ToString("yyyy-MM-dd HH:mm:ss"));

break;

case "int":

intField = br.ReadInt32();

record[iField] = intField.ToString("D");

break;

case "single":

//floatField = br.ReadSingle();

//if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") floatField *= 100;

//record[iField] = Math.Round(floatField, 2).ToString("F");

doubleField = (double)br.ReadSingle();

if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") doubleField *= 100;

record[iField] = doubleField.ToString("_jj_qz".IndexOf(this.GetCodeType(code)) > 0 ? "F3" : "F", cnCultureInfo);

break;

case "double":

doubleField = br.ReadDouble();

record[iField] = Math.Round(doubleField, 2).ToString("F");

break;

case "string":

record[iField] = System.Text.Encoding.Default.GetString(br.ReadBytes(Convert.ToInt32(fxjFileStruct.fields[iField, 3]))).Replace("", "");

break;

}

}

recordList.Add(record);

}

}

//fs.Close();

string[,] records = new string[recordList.Count, fieldCounts];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

for (int j = 0; j < fieldCounts; j++)

{

records[i, j] = record0[j];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

catch (Exception e)

{

msg = e.Message;

}

#endregion

break;

case DataTypes.cq:

#region 分红送配(处理STKINFO51.DAT等结构的数据)

try

{

this.checkFileStream(FxjFile);

int secCounts = 0;//文件中证券总数

string code0 = "";

fileStruct fxjdmStruct = new fileStruct(DataTypes.dm);// 代码的结构

int dmpos=0;

fs.Position = 8;

secCounts = br.ReadInt32();

int fieldCounts = fxjFileStruct.fields.GetLength(0);

bool hasCode = false;

for (int i = 0; i < secCounts && hasCode==false; i++)

{

dmpos = fxjdmStruct.startAddress + i * fxjdmStruct.recordSize;

fs.Position = dmpos;

code0 = System.Text.Encoding.Default.GetString(br.ReadBytes(10));

code0 = code0.Replace("", "");

code0 = code0.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

if (fxjdmStruct.codeIsLong == false && code == market + code0 || fxjdmStruct.codeIsLong == true && code == code0)

{

hasCode = true;

int iRecord=0;

pos = fxjFileStruct.startAddress + i * fxjFileStruct.blockSize + iRecord * fxjFileStruct.recordSize;

fs.Position=pos;

while (br.ReadInt32() != 0)

{

string[] record = new string[fieldCounts];

for (int iField = 0; iField < fieldCounts; iField++)

{

fs.Position = pos + Convert.ToInt64(fxjFileStruct.fields[iField, 5]);

switch (fxjFileStruct.fields[iField, 2].ToLower())

{

case "code":

record[iField] = code;

break;

case "date":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddDays(intField / 86400)).ToString("yyyy-MM-dd"));

break;

case "datetime":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddSeconds(intField)).ToString("yyyy-MM-dd HH:mm:ss"));

break;

case "int":

intField = br.ReadInt32();

record[iField] = intField.ToString("D");

break;

case "single":

floatField = br.ReadSingle();

if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") floatField *= 100;

record[iField] = Math.Round(floatField, 2).ToString("F");

break;

case "double":

doubleField = br.ReadDouble();

record[iField] = Math.Round(doubleField, 2).ToString("F");

break;

case "string":

record[iField] = System.Text.Encoding.Default.GetString(br.ReadBytes(Convert.ToInt32(fxjFileStruct.fields[iField, 3]))).Replace("", "");

break;

}

}

recordList.Add(record);

iRecord = iRecord + 1;

pos = fxjFileStruct.startAddress + i * fxjFileStruct.blockSize + iRecord * fxjFileStruct.recordSize;

fs.Position = pos;

}

}

}

//fs.Close();

string[,] records = new string[recordList.Count, fieldCounts];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

for (int j = 0; j < fieldCounts; j++)

{

records[i, j] = record0[j];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

catch (Exception e)

{

msg = e.Message;

}

#endregion

break;

case DataTypes.cw0:

#region 财务数据--简单(处理STKINFO51.DAT等结构的数据)

try

{

this.checkFileStream(FxjFile);

int secCounts = 0;//文件中证券总数

string code0 = "";

fileStruct fxjdmStruct = new fileStruct(DataTypes.dm);// 代码的结构

int dmpos = 0;

fs.Position = 8;

secCounts = br.ReadInt32();

int fieldCounts = fxjFileStruct.fields.GetLength(0);

bool hasCode = false;

for (int i = 0; i < secCounts && hasCode == false; i++)

{

dmpos = fxjdmStruct.startAddress + i * fxjdmStruct.recordSize;

fs.Position = dmpos;

code0 = System.Text.Encoding.Default.GetString(br.ReadBytes(10));

code0 = code0.Replace("", "");

code0 = code0.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

if (fxjdmStruct.codeIsLong == false && code == market + code0 || fxjdmStruct.codeIsLong == true && code == code0)

{

hasCode = true;

int iRecord = 0;

pos = fxjFileStruct.startAddress + i * fxjFileStruct.blockSize + iRecord * fxjFileStruct.recordSize;

fs.Position = pos;

string[] record = new string[fieldCounts];

for (int iField = 0; iField < fieldCounts; iField++)

{

fs.Position = pos + Convert.ToInt64(fxjFileStruct.fields[iField, 5]);

switch (fxjFileStruct.fields[iField, 2].ToLower())

{

case "code":

record[iField] = code;

break;

case "date":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddDays(intField / 86400)).ToString("yyyy-MM-dd"));

break;

case "datetime":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddSeconds(intField)).ToString("yyyy-MM-dd HH:mm:ss"));

break;

case "int":

intField = br.ReadInt32();

record[iField] = intField.ToString("D");

break;

case "single":

floatField = br.ReadSingle();

if (fxjFileStruct.fields[iField, 6].ToUpper() == "A") floatField *= 100;

record[iField] = Math.Round(floatField, 2).ToString("F");

break;

case "double":

doubleField = br.ReadDouble();

record[iField] = Math.Round(doubleField, 2).ToString("F");

break;

case "string":

record[iField] = System.Text.Encoding.Default.GetString(br.ReadBytes(Convert.ToInt32(fxjFileStruct.fields[iField, 3]))).Replace("", "");

break;

}

}

recordList.Add(record);

}

}

//fs.Close();

string[,] records = new string[recordList.Count, fieldCounts];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

for (int j = 0; j < fieldCounts; j++)

{

records[i, j] = record0[j];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

catch (Exception e)

{

msg = e.Message;

}

#endregion

break;

case DataTypes.hqmb:

#region 处理Report.DAT数据(结构类似DAY.DAT,但有些数值需要进一步计算而来)

try

{

this.checkFileStream(FxjFile);

int secCounts = 0;//文件中证券总数

string code0 = "";

len = fs.Length;

fs.Position = 12;

secCounts = br.ReadInt32();

bool codeRead = false;

for (int i = 0; i < secCounts && codeRead==false; i++)

{

pos = 24 + 64 * i;

if (pos <= len)

{

fs.Position = pos;

//code0 = new string(br.ReadChars(10));//分析家用10个字节保存代码,一般用8个字节

code0 = System.Text.Encoding.Default.GetString(br.ReadBytes(10));

code0 = code0.Replace("", "");

code0 = code0.Replace("HKHK", "HK"); //香港证券代码本身保存为HKxxxx

if (fxjFileStruct.codeIsLong == false && code == market + code0 || fxjFileStruct.codeIsLong == true && code == code0)

{

recordCounts = br.ReadInt32();

for (int j = 0; j < 25; j++)

{

blocks[j] = br.ReadInt16();

}

codeRead = true;

}

}

}

int iRecord = 1;//记录

int iBlock = 0;//第iBlock块

int fieldCounts = fxjFileStruct.fields.GetLength(0);

while (iBlock < 25 && blocks[iBlock] != -1)

{

int r = 0;

while (iRecord < recordCounts + 1 && r < fxjFileStruct.blockSize / fxjFileStruct.recordSize) //16=3776/236

{

string[] record = new string[fieldCounts];

pos = fxjFileStruct.startAddress + blocks[iBlock] * fxjFileStruct.blockSize + r * fxjFileStruct.recordSize;

for (int iField = 0; iField < fieldCounts; iField++)

{

fs.Position = pos + Convert.ToInt64(fxjFileStruct.fields[iField, 5]);

switch (fxjFileStruct.fields[iField, 0].ToLower()) //这里与读取DAY.DAT用法不同,判断的是代码而不是类型

{

case "dm":

record[iField] = code;

break;

case "rq":

intField = br.ReadInt32();

record[iField] = (intField == 0 ? "" : (date19700101.AddSeconds(intField)).ToString("yyyy-MM-dd HH:mm:ss"));

break;

case "zjcj":

case "zss":

case "je":

floatField = br.ReadSingle();

record[iField] = floatField.ToString("_jj_qz".IndexOf(this.GetCodeType(code)) > 0 ? "F3" : "F");

break;

case "mr1sl":

case "mr2sl":

case "mr3sl":

case "mc1sl":

case "mc2sl":

case "mc3sl":

record[iField] = br.ReadUInt16().ToString("D");

break;

case "mr1jg":

case "mr2jg":

case "mr3jg":

case "mc1jg":

case "mc2jg":

case "mc3jg":

float jg=br.ReadSByte();

if ("_jj_qz".IndexOf(this.GetCodeType(code)) > 0)

{

jg = Convert.ToSingle(record[2]) + jg / 1000;

record[iField] = jg.ToString("F3");

}

else

{

jg = Convert.ToSingle(record[2]) + jg / 100;

record[iField] = jg.ToString("F");

}

break;

case "xss":

record[iField] = "";//现手数在下面计算

break;

case "mm":

int mm = br.ReadSByte();

record[iField] = "";

if (mm == -128) record[iField] = "内盘"; //-128 = 0x80

if (mm == -64) record[iField] = "外盘"; //-64 = 0xC0

break;

}

}

recordList.Add(record);

r = r + 1;

iRecord = iRecord + 1;

}

iBlock = iBlock + 1;

}

//fs.Close();

float zssSaved = 0;

string[,] records = new string[recordList.Count, fieldCounts];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

for (int j = 0; j < fieldCounts; j++)

{

if (j == 5) //现手数

{

record0[j]= (Convert.ToSingle(record0[3]) - zssSaved).ToString();

zssSaved = Convert.ToSingle(record0[3]);

}

records[i, j] = record0[j];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

catch (Exception e)

{

msg = e.Message;

}

#endregion

break;

}

}

msg = "返回空数组。";

return new string[1, 1] { { null } };

}

private string[,] GetBK(string code)//板块定义数据

{

msg = "";

fileStruct fxjFileStruct = new fileStruct(DataTypes.bk);

if (code == null) code = "";

code = code.Trim().ToUpper();

ArrayList recordList = new ArrayList();

if (this.FxjDataPath == "")

{

msg = @"无法在注册表中到分析家数据文件目录,请自行将属性 FxjDataPath设置为有效路径,如c:fxjdata。";

return new string[1, 1] { { null } };

}

string FxjBlockPath = fxjDataPath;

FxjBlockPath = FxjBlockPath.ToUpper().Replace("\DATA\", "\USERDATA\BLOCK\") ; //假设目录中含有data文字

string FxjFile = FxjBlockPath + fxjFileStruct.fileName;

msg = "";

if (!File.Exists(FxjFile))

{

msg = "板块文件无法找到。";

return new string[1, 1] { { null } };

}

try

{

this.checkFileStream(FxjFile);

string bklines="";string lb="";string bk="";

string bkFile = ""; string dmLines = ""; int n = -1;

bklines=System.Text.Encoding.Default.GetString(br.ReadBytes((int)fs.Length));

string[] bks = bklines.Replace("rn","n").Split(new Char[] { ‘n‘ });

for(int i =0 ; i<bks.Length;i++)

{

if (bks[i] != "")

{

bks[i] = bks[i].Trim();

if (bks[i].StartsWith("[") && bks[i].EndsWith("]"))

{

lb = bks[i].Replace("[","").Replace("]","");

}

else

{

bk = bks[i];

if (bk != "")

{

if (code == "" || (code!="" && bk.ToUpper()==code) )

{

bkFile = FxjBlockPath + bk + ".blk";

if (File.Exists(bkFile))

{

StreamReader bkReader = new StreamReader(bkFile);

bkReader.Read(); bkReader.Read();

dmLines = bkReader.ReadToEnd();

dmLines = dmLines.Replace("x05", "").Replace("Z00", "").Replace("", ",");

string[] dms = dmLines.Split(‘,‘);

string[,] record = new string[dms.Length, 3];

for (int r = 0; r < dms.Length; r++)

{

if (dms[r] != "")

{

n = n + 1;

record[r, 0] = lb;

record[r, 1] = bk;

record[r, 2] = dms[r];

}

}

recordList.Add(record);

}

}

}

}

}

}

//fs.Close();

if (n > 0)

{

string[,] records = new string[n+1, 3];

int rr = 0;

for (int i = 0; i < recordList.Count; i++)

{

string[,] record0 = (string[,])recordList[i];

for (int j = 0; j < record0.GetLength(0); j++)

{

if (record0[j, 0] != null && record0[j, 1] != null && record0[j,2]!=null)

{

records[rr, 0] = record0[j, 0];

records[rr, 1] = record0[j, 1];

records[rr, 2] = record0[j, 2];

rr = rr + 1;

}

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

}

catch (Exception e)

{

msg = e.Message;

}

return new string[1, 1] { { null } };

}

private string[,] GetPJ(string code)//评级数据

{

msg = "";

fileStruct fxjFileStruct = new fileStruct(DataTypes.pj);

code = code.Trim().ToUpper();

ArrayList recordList = new ArrayList();

if (this.FxjDataPath == "")

{

msg = @"无法在注册表中到分析家数据文件目录,请自行将属性 FxjDataPath设置为有效路径,如c:fxjdata。";

return new string[1, 1] { { null } };

}

string fxjSubPath = fxjDataPath;

fxjSubPath = fxjSubPath.ToUpper().Replace("\DATA\", "\USERDATA\SelfData\"); //假设目录中含有data文字

string FxjFile = fxjSubPath + fxjFileStruct.fileName;

msg = "";

if (!File.Exists(FxjFile))

{

msg = fxjFileStruct.fileName +"无法找到。";

return new string[1, 1] { { null } };

}

try

{

this.checkFileStream(FxjFile);

int n = 0;

int pos =fxjFileStruct.startAddress + n * fxjFileStruct.recordSize;

fs.Position = pos;

while (br.PeekChar()!=-1)

{

string[] record = new string[3];

pos = fxjFileStruct.startAddress + n * fxjFileStruct.recordSize;

fs.Position = pos;

record[0]=System.Text.Encoding.Default.GetString(br.ReadBytes(8));//dm

if (code==""||(code!="" && code==record[0]))

{

fs.Position = pos+12;

record[2] = System.Text.Encoding.Default.GetString(br.ReadBytes(244));

record[1] = record[2].Substring(0,2).Trim();

record[2] = record[2].Replace("","").Trim();

if(record[0]!="") recordList.Add(record);

}

n = n + 1;

}

//fs.Close();

if (n > 0)

{

string[,] records = new string[recordList.Count, 3];

for (int i = 0; i < recordList.Count; i++)

{

string[] record0 = (string[])recordList[i];

if (record0[0] != null)

{

records[i, 0] = record0[0];

records[i, 1] = record0[1];

records[i, 2] = record0[2];

}

}

if (records.GetLength(0) == 0) msg = "没有读到数据!";

return records;

}

}

catch (Exception e)

{

msg = e.Message;

}

return new string[1, 1] { { null } };

}

private string[,] GetHqfq(DataTypes dataType, string code, string newFileName)//复权价格,分红再投资,向前复权法

{

FxjData fxj = new FxjData();

string[,] hq=fxj.GetData("hq", code, newFileName);

if (fxj.Error != 0 || hq.GetLength(1)<4 ) return new string[1, 1] { { null } };

string[,] x = new string[hq.GetLength(0),9];

string[,] cq = fxj.GetData("cq", code, newFileName);

string fmt = "_jj_qz".IndexOf(this.GetCodeType(code)) > 0 ? "F3" : "F";

if (fxj.Error != 0 || cq.GetLength(1) < 4 || cq.GetLength(0)==0) //没有除权信息

{

for (int i = 0; i < hq.GetLength(0); i++)

{

for (int j = 0; j < hq.GetLength(1); j++)

{

x[i, j] = hq[i, j];

}

if (i == 0)

{

x[i, hq.GetLength(1)] = "0.00000";

}

else

{

x[i, hq.GetLength(1)] = (Single.Parse(hq[i, 5]) / Single.Parse(hq[i - 1, 5]) - 1).ToString("0.00000");

}

}

}

else //有除权信息

{

DateTime[] cqdt = new DateTime[cq.GetLength(0)];

for (int j = 0; j < cq.GetLength(0); j++) cqdt[j] = new DateTime(int.Parse(cq[j, 1].Split(‘-‘)[0]), int.Parse(cq[j, 1].Split(‘-‘)[1]), int.Parse(cq[j, 1].Split(‘-‘)[2]));

int i0 = hq.GetLength(0) - 1;

DateTime hqdt_1,hqdt;

double kp_1,zg_1,zd_1,sp_1,kp,zg,zd,sp,kpx,zgx,zdx,spx,sgbl,kpsyl,zgsyl,zdsyl,spsyl, pgbl, pgjg, fh;

for (int k = 0; k < 8; k++) x[i0, k] = hq[i0, k]; //最后一条记录

x[0, 8] = "0.00000";

kpx = double.Parse(x[i0, 2]);

zgx = double.Parse(x[i0, 3]);

zdx = double.Parse(x[i0, 4]);

spx = double.Parse(x[i0, 5]);

for (int i = i0; i > 0; i--)

{

sgbl = 0; pgbl = 0; pgjg = 0; fh = 0;

hqdt_1 = new DateTime(int.Parse(hq[i - 1, 1].Split(‘-‘)[0]), int.Parse(hq[i - 1, 1].Split(‘-‘)[1]), int.Parse(hq[i - 1, 1].Split(‘-‘)[2]));

hqdt = new DateTime(int.Parse(hq[i, 1].Split(‘-‘)[0]), int.Parse(hq[i, 1].Split(‘-‘)[1]), int.Parse(hq[i, 1].Split(‘-‘)[2]));

for (int j = 0; j < cq.GetLength(0); j++)

{

if (hqdt_1 < cqdt[j] && cqdt[j] <= hqdt)

{

sgbl = double.Parse(cq[j, 2]);

pgbl = double.Parse(cq[j, 3]);

pgjg = double.Parse(cq[j, 4]);

fh = double.Parse(cq[j, 5]);

}

}

x[i-1, 0] = hq[i-1, 0];//dm

x[i-1, 1] = hq[i-1, 1];//rq

//syl=1+第t日收益率 =( t日收盘价*(1+送股比例+配股比例)+分红金额-配股价格*配股比例)/(t-1日收盘价)

kp = double.Parse(hq[i, 2]);

zg = double.Parse(hq[i, 3]);

zd = double.Parse(hq[i, 4]);

sp = double.Parse(hq[i, 5]);

kp_1 = double.Parse(hq[i-1, 2]);

zg_1 = double.Parse(hq[i-1, 3]);

zd_1 = double.Parse(hq[i-1, 4]);

sp_1 = double.Parse(hq[i-1, 5]);

kpsyl = (kp * (1 + sgbl + pgbl) + fh - pgjg * pgbl) / kp_1;

zgsyl = (zg * (1 + sgbl + pgbl) + fh - pgjg * pgbl) / zg_1;

zdsyl = (zd * (1 + sgbl + pgbl) + fh - pgjg * pgbl) / zd_1;

spsyl = (sp * (1 + sgbl + pgbl) + fh - pgjg * pgbl) / sp_1;

kpx = kpx / kpsyl;

zgx = zgx / zgsyl;

zdx = zdx / zdsyl;

spx = spx / spsyl;

x[i - 1, 2] = kpx.ToString(fmt);

x[i - 1, 3] = zgx.ToString(fmt);

x[i - 1, 4] = zdx.ToString(fmt);

x[i - 1, 5] = spx.ToString(fmt);

x[i - 1, 6] = hq[i - 1, 6];//sl 成交量未复权

x[i - 1, 7] = hq[i - 1, 7];//je

x[i, 8] = (spsyl - 1).ToString("0.00000");//spsyl 收盘价收益率

}

}

return x;

}

}

}

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/120773.html

更多阅读

excel2003表格的基本操作 word表格的基本操作

excel2003表格的基本操作——简介 Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组

怎么给excel加密 精 精雕软件5.5加密狗

怎么给excel加密 精——简介Microsoft Excel是微软公司锁研发的Microsoft office中的组件之一,它是一种试算表软件,可以对各种数据进行处理统计和分析,它广泛的被应用于金融,管理等很多领域。在每个领域都有很多需要保密的数据,Excel就可

视频会议系统方案配置清单 系统软硬件配置清单

视频会议系统方案配置清单——简介随着国家信息化建设的加快,各种数据、视频、语音业务的融合让视频会议通信更受到行业青睐。视频会议系统从单纯开会发展到更广阔的领域:企业协同办公、远程培训教学、应急指挥调度、远程医疗、远程招

李悔之:心头滴血的数据

李悔之:心头滴血的数据搞笑2015-09-09 00:10:56昨天,有一位网友转来一篇文章,说:北大教授潘维又胡说八道,气得我要吐血,老李您写篇一章驳斥他一下吧。打开文章后,才发现是我曾看过的一篇文章——北京大学中国与世界研究中心主任潘维在香

转载 SOHU搜狐财经股票数据接口 sohu搜狐视频

原文地址:SOHU搜狐财经股票数据接口作者:文和_好运来2013年12月31日,有博友反应,无法打开,sohu 接口换掉了。。这个我无法控制……http://q.stock.sohu.com/hisHq?code=cn_300228&amp;start=20130930&amp;end=20131231&amp;stat=1&amp;o

声明:《分析家各种数据格式 分析家数据接口 2015》为网友一场春暖分享!如侵犯到您的合法权益请联系我们删除