?? selfdb.h
字號:
#include "QianLong.h"
#pragma pack(1)
/* 2.0版財務信息數據結構 dat\basetbl.dat
typedef struct clk20_basedata_t {
LONG type; // stock type
char code[8]; // 代碼
char domain[16+1]; // 板塊
char province[8+1]; // 省份
DWORD date; // 日期 Format is YYYYMMDD for base data
LONG reporttype; // 報告類型:年報、中報、季報
LONG erate_dollar; // 當期美元匯率 0.001
LONG erate_hkdollar; // 當期港幣匯率 0.001
// ★償債能力
LONG ratio_liquidity; // 流動比率 0.001
LONG ratio_quick; // 速動比率 0.001
LONG velocity_receivables; // 應收帳款周率 0.001
// ★經營能力
LONG velocity_merchandise; // 存貨周轉率 0.001
LONG main_income; // 主營業務收入 10000
LONG cash_ps; // 每股凈現金流量 0.001
// ★盈利能力
LONG profit_margin; // 主營業務利潤率 % 0.001
LONG netasset_yield; // 凈資產收益率 % 0.001
// ★資本結構
LONG date_begin; // 上市日期 Format is YYYYMMDD
LONG share_count_total; // 總股本 10000
LONG share_count_a; // 流通A股 10000
LONG share_count_b; // 流通B股 10000
LONG share_count_h; // 流通H股 10000
LONG share_count_national; // 國有股 10000
LONG share_count_corp; // 法人股 10000
LONG profit_psud; // 每股未分配利潤 0.001
LONG asset; // 總資產 10000
LONG ratio_holderright; // 股東權益比率 0.001
LONG ratio_longdebt; // 長期負債率 0.001
LONG ratio_debt; // 資產負債率 0.001
// ★投資收益能力
LONG netasset_ps; // 每股凈資產 0.001
LONG netasset_ps_regulate; // 調整每股凈資產 0.001
LONG eps; // 每股收益 0.001
LONG eps_deduct; // 扣除后每股收益 0.001
LONG net_profit; // 凈利潤 10000
LONG main_profit; // 主營業務利潤 10000
LONG total_profit; // 利潤總額 10000
// ★增長率
LONG profit_inc; // 主營利潤增長率% 0.001
LONG income_inc; // 主營收入增長率% 0.001
LONG asset_inc; // 總資產增長率% 0.001
// ★技術數據統計值
LONG yield_average; // 平均收益率% 0.001
LONG yield_stddev; // 收益標準差% 0.001
LONG beite; // β值 0.001
DWORD reserved[4];
}CLK20_BASEDATA, *PCLK20_BASEDATA;
*/
// 除權數據
typedef struct clk_drdata_t {
DWORD date;
DWORD bonus; // 10派X元 /1000
DWORD bonus_share; // 10送X股 /100
DWORD ration_share; // 10配X股 /100
DWORD ration_value; // 配股價 /1000
DWORD reserved;
}CLK_DRDATA, * PCLK_DRDATA;
// 分析家格式除權數據
typedef union fxj_drdata_t {
struct
{
DWORD m_dwMagic; // = -1
WORD m_wMarket; // SH 上海 SZ 深圳
char m_szCode[6];
char m_szReserved[8];
};
struct
{
time_t m_time;
float m_fGive; // 每股送
float m_fPei; // 每股配
float m_fPeiPrice; // 配股價,僅當 m_fPei!=0.0f 時有效
float m_fProfit; // 每股紅利
};
}FXJ_DRDATA, * PFXJ_DRDATA;
// 通達信格式財務數據
#define TDX_FHEADER_SIZE 0x521
typedef struct tdx_basedata_t {
char m_szMagic;
char m_szMarket; // 市場 '0' 深圳 '1' 上海
char m_szCode[6];
char m_szDate_modified[8]; // 更新日期
char m_szShare_count_total[14]; // 總股本 10000
char m_szShare_count_national[14]; // 國家股 10000
char m_szShare_count_orig[14]; // 發起股 10000
char m_szShare_count_corp[14]; // 法人股 10000
char m_szShare_count_b[14]; // B股 10000
char m_szShare_count_h[14]; // H股 10000
char m_szShare_count_currency[14]; // 流通股 10000
char m_szShare_count_employ[14]; // 職工股 10000
char m_szUnkown1[14]; //
char m_szAsset[14]; // 總資產 1000
char m_szAsset_currency[14]; // 流動資產 1000
char m_szAsset_capital[14]; // 固定資產 1000
char m_szAsset_imma[14]; // 無形資產 1000
char m_szInvest_long[14]; // 長期投資 1000
char m_szDebt_currency[14]; // 流動負債 1000
char m_szDebt_long[14]; // 長期負債 1000
char m_szAcc_fund[14]; // 公積金 1000
char m_szNet_asset[14]; // 凈資產 1000
char m_szMain_income[14]; // 主營收入 1000
char m_szMain_profit[14]; // 主營利益 1000
char m_szOther_profit[14]; // 其他利益 1000
char m_szBusiness_profit[14]; // 營業利益 1000
char m_szInvest_profit[14]; // 投資收益 1000
char m_szAllow_profit[14]; // 補貼收入 1000
char m_szOut_profit[14]; // 業外收支 1000
char m_szProfit_regulate[14]; // 損益調整 1000
char m_szTotal_profit[14]; // 利潤總額 1000
char m_szProfit_aftertax[14]; // 稅后利益 1000
char m_szNet_profit[14]; // 凈利益 1000
char m_szProfit_ud[14]; // 未分利潤 1000
char m_szNet_asset_ps_regulate[14]; // 每股凈資2
char m_szUnknown2[3]; //
char m_szUnknown3[4]; //
char m_szUnknown4[2]; //
char m_szDate_begin[8]; // 上市日期
char m_szUnknown5[3]; //
char m_szUnknown6[11]; //
}TDX_BASEDATA, *PTDX_BASEDATA;
// 分析家格式財務數據
#define FXJ_FHEADER_SIZE 0x8
typedef struct fxj_basedata_header_t {
DWORD m_dwMagic1; // 0x223FD90C;
DWORD m_dwMagic2; // 0x000000A6;
}FXJ_BASEDATA_HEADER, *PFXJ_BASEDATA_HEADER;
typedef struct fxj_basedata_t {
WORD m_wMarket; // 市場 'ZS'" 深圳 'HS' 上海
WORD m_wUnknown;
char m_szCode[6];
float m_fData[39];
/*
m_fData[0]
m_fData[1]
m_fData[2]*10000 // 總股本
m_fData[3]*10000 // 國有股
m_fData[4]*10000 // 發起人法人股
m_fData[5]*10000 // 法人股
m_fData[6]*10000 // 流通B股
m_fData[7]*10000 // 流通H股
m_fData[8]*10000 // 流通A股
m_fData[9]
m_fData[10]
m_fData[11]*1000 // 總資產
m_fData[12]*1000 // 流通資產
m_fData[13]*1000 // 固定資產
m_fData[14]
m_fData[15]*1000 // 長期投資
m_fData[16]*1000 // 流通負債
m_fData[17]*1000 // 長期負債
m_fData[18]*1000 // 資本公積金
m_fData[19] // 公積金/股
m_fData[20]*1000 // 股東權益
m_fData[21]*1000 // 主營業務收入
m_fData[22]*1000 // 主營業務利潤
m_fData[23]*1000 // 其它業務利潤
m_fData[24]*1000 // 營業利益
m_fData[25]*1000 // 投資收益
m_fData[29]*1000 // 利潤總額
m_fData[30]
m_fData[31]*1000 // 凈利潤
m_fData[32]*1000 // 未分配利潤
m_fData[33] // 每股未分配利潤
m_fData[34] // 每股收益
m_fData[35] // 每股凈資產
m_fData[36] // 調整每股凈資產
m_fData[37] // 股東權益比率
m_fData[38] // 凈資產收益率 %
*/
}FXJ_BASEDATA, *PFXJ_BASEDATA;
/* 適用各種數據類型存儲的文件格式包含三部分
1. 文件頭:CLK_FHEADER
2. 索引區:大小為 CLK_FHEADER.m_dwIndexRecordSize * CLK_FHADER.m_dwIndexRecordCount
分為 CLK_FHADER.m_dwIndexRecordCount 個塊,
每塊為 CLK_FHEADER.m_dwIndexRecordSize,即 CLK_INDEXRECORD
3. 數據區:大小為CLK_FHEADER.m_dwBlockSize * CLK_FHEADER.m_dwBlockCount
分為 CLK_FHADER.m_dwBlockCount 個 Block,
每一 Block 有一個 CLK_BLOCKHEADER,和緊隨其后的 CLK_BLOCKHEADER.m_dwDataRecordCount 個股票數據記錄
如果一個 Block 不能記錄該股票全部記錄,則 CLK_BLOCKHEAHDRE.m_dwPosNextBlock 指向下一個數據塊
*/
#define CLK_FHEADER_MAGIC 'FKLC'
#define CLK_FHEADER_VERMAJOR '2003'
#define CLK_FHEADER_VERMINOR '1002'
// 自有文件格式,文件頭
typedef struct clk_fheader
{
// 文件信息
DWORD m_dwMagic; // = CLK_FHEADER_MAGIC
DWORD m_dwVerMajor; // = CLK_FHEADER_VERMAJOR
DWORD m_dwVerMinor; // = CLK_FHEADER_VERMINOR
DWORD m_dwReserved1; // 保留
DWORD m_dwDataType; // 數據分類說明,see CStock::DataType
DWORD m_dwMarket; // 市場,see CStock::StockMarket,如果文件包含多個市場,則=0無效
time_t m_time; // 文件最后修改日期
// 索引區信息
DWORD m_dwPosFirstIndex; // 索引區起始位置
DWORD m_dwIndexRecordSize; // 索引區記錄單元字節數
DWORD m_dwIndexRecordCount; // 索引區記錄單元個數
DWORD m_dwStockCount; // 本文件索引區中的總股票數
// 數據區信息,包含m_dwBlockCount個Block,每個Block包含m_dwBlockSize/m_dwDataRecordSize個DataRecord
DWORD m_dwDataRecordSize; // 數據區記錄字節數
// 根據m_dwDataType,
// = sizeof(REPORT)
// or = sizeof(MINUTE)
// or = sizeof(KDATA)
DWORD m_dwRecordPerBlock; // 每個Block的記錄數
DWORD m_dwBlockSize; // 數據區Block單元字節數,一個Block有一個BlockHeader和若干個DataRecord
DWORD m_dwPosFirstBlock; // 文件中第一個Block位置.
DWORD m_dwPosFirstBlankBlock; // 文件中第一個空Block的位置,所有空Block組成一個鏈表
DWORD m_dwReserved2[4]; // 保留
char m_szDescript[128]; // 文件說明
char m_szNextFileName[MAX_PATH]; // 有時候,一個文件不能太大,有多個文件,m_szNextFileName指向下
// 一個同類型文件的相對目錄,目前未使用
} CLK_FHEADER;
#define CLK_INDEXRECORD_MAGIC 'XDNI'
// 自有文件格式,股票索引部分單元
typedef struct clk_indexrecord
{
DWORD m_dwMagic; // = CLK_INDEXRECORD_MAGIC
DWORD m_dwMarket; // 股票市場 see CStock::StockMarket
char m_szCode[STKLIB_MAX_CODE2]; // 股票代碼
DWORD m_dwPosFirstBlock; // 本股票第一個Block起始位置,-1或0表示無
DWORD m_dwDataRecordCountTotal; // 本股票數據記錄總數
DWORD m_dwReserved; // 保留
} CLK_INDEXRECORD;
#define CLK_BLOCKHEADER_MAGIC 'KCLB'
// 自有文件格式,數據區部分,數據塊頭
typedef struct clk_blockheader
{
DWORD m_dwMagic; // = CLK_BLOCKHEADER_MAGIC
DWORD m_bUsed; // 本Block是否使用
DWORD m_dwPosFirstRecord; // 本Block數據記錄起始位置
DWORD m_dwDataRecordCount; // 本Block塊數據記錄個數
DWORD m_dwPosNextBlock; // 含有本股票數據的下一個Block的起始位置,-1或0表示無
DWORD m_dwReserved; // 保留
} CLK_BLOCKHEADER;
#pragma pack()
//=============================================================================
// CTSKFile
class CTSKFile
{
public:
CTSKFile();
virtual ~CTSKFile();
protected:
CSPFile m_file;
CLK_FHEADER m_header;
// 記下當前正在操作的股票
CLK_INDEXRECORD m_CurIndexRecord;
DWORD m_dwPosCurIndex;
public:
BOOL Open(LPCTSTR lpszFileName);
void Close();
public:
static BOOL BuildEmptyFile(LPCTSTR lpszFileName, DWORD dwDataType, DWORD dwMarket, DWORD dwIndexRecordCount = 3000,
DWORD dwRecordPerBlock = 50, BOOL bRebuildIfExists = FALSE);
static BOOL RemoveFileIfOutoftime(LPCTSTR lpszFileName, time_t tmNow);
// Store Function
BOOL EmptyAll();
DWORD StoreDataRecord(DWORD dwMarket, const char * szCode, void * pData, DWORD dwDataElementSize, DWORD dwDataElementCount, BOOL bOverWrite); // 返回成功保存記錄數
// Load Function
DWORD GetDataRecordCount(DWORD dwMarket, const char * szCode);
DWORD LoadDataRecord(DWORD dwMarket, const char * szCode,
void * pData, DWORD dwDataElementSize, DWORD dwMaxDataElement);// 返回成功讀取記錄數
protected:
DWORD Hash(LPCTSTR key, DWORD dwMax);
BOOL GetDataInfo(DWORD dwMarket, const char * szCode, CLK_INDEXRECORD & idxRet, DWORD & dwPosIndexFind, BOOL bAddIfNotExists);
BOOL SetDataInfo(DWORD dwPosIndex, CLK_INDEXRECORD idx, BOOL bFlush);
DWORD GetFirstBlankBlockPos(BOOL bAddIfNotExists, BOOL bUseIt);
DWORD EmptyBlockChain(DWORD dwPosFirstBlock);
DWORD ReadData(DWORD dwPostBlock, void * pData, DWORD dwDataElementSize, DWORD dwMaxDataElement);
DWORD WriteData(DWORD dwPosBlock, void * pData, DWORD dwDataElementSize, DWORD dwDataElementCount, BOOL bFlush);
};
//=============================================================================
// CSelfDB
class CSelfDB : public CQianlong
{
public:
CSelfDB(const char * rootpath, BOOL bOK = TRUE);
virtual ~CSelfDB();
public:
static char m_szDataType[256];
public:
virtual BOOL GetFileName(CSPString& sFileName, int nDataType, CStockInfo* pInfo = NULL, int nKType = CKData::ktypeDay);
static int GetType() { return dbtypeSelfDB; }
static const char * GetName() { return m_szDataType; }
virtual int GetDBType() { return GetType(); }
virtual const char * GetDBTypeName() { return GetName(); }
static CSPString GetNewsPath(DWORD dwMarket);
static CSPString GetBasePath(DWORD dwMarket);
static BOOL CreateSelfDB(const char * rootpath);
static BOOL GetAccurateRoot(const char * rootpath, char *accurateroot, int maxlen);
public:
virtual int LoadCodetable(CStockContainer& container);
virtual int StoreCodetable(CStockContainer& container);
virtual int LoadKData(CStock* pstock, int nKType);
virtual int LoadBasetable(CStockContainer& container);
virtual int StoreBasetable(CStockContainer& container);
virtual int LoadDRData(CStock* pstock);
virtual int StoreDRData(CStock* pstock);
virtual int LoadOutline(CStock* pstock);
virtual int StoreOutline(OUTLINE* pOutline, int nCount);
virtual int LoadMinute(CStock* pstock);
virtual int StoreMinute(MINUTE* pMinute, int nCount);
virtual int LoadReport(CStock* pstock);
virtual int StoreReport(REPORT* pReport, int nCount, BOOL bBigTrade);
public:
virtual int InstallCodetbl(const char * filename, const char * orgname);
virtual int InstallCodetblBlock(const char * filename, const char * orgname);
virtual int InstallCodetblFxjBlock(const char * filename, const char * orgname);
virtual int InstallDRData(CDRData& drdata);
virtual int InstallDRDataClk(const char * filename, const char * orgname);
virtual int InstallDRDataFxj(const char * fxjfilename);
virtual int InstallBasetable(const char * filename, const char * orgname);
virtual int InstallBasetableTdx(const char * filename);
virtual int InstallBasetableFxj(const char * filename);
virtual int InstallNewsText(const char * filename, const char * orgname);
virtual int InstallNewsText(const char * buffer, int nLen, const char * orgname);
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -