30 Star 77 Fork 79

liuyinghua/FastTrader

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Database.cpp 20.98 KB
一键复制 编辑 原始数据 按行查看 历史
liuyinghua 提交于 2018-05-08 01:05 +08:00 . 整个项目的编译
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
/*
Cross Platform Core Code.
Copyright(R) 2001-2002 Balang Software.
All rights reserved.
Using:
DllMain( HANDLE, DWORD, LPVOID );
class CStDatabase;
*/
#include "Database.h"
#ifdef _WIN32
#include <direct.h>
#include <io.h>
#endif
#include "SelfDB.h"
#include <string.h>
//#include "DatabaseOperator.h"
#define STRING_DIRSEP "\\"
////////////////////////////////////////////////////////////////////////////////////////////
// convertor
BOOL convert_TYDAY_RECORD_to_KDATA( TYDAY_RECORD * precord, KDATA * pkd )
{
//ASSERT( precord && pkd );
if( NULL == precord || NULL == pkd )
return false;
memset( pkd, 0, sizeof(KDATA) );
//pkd->m_dwMarket = CStock::marketUnknown;
//strncpy( pkd->m_szCode, precord->code, min(sizeof(pkd->m_szCode)-1,sizeof(precord->code)) );
//pkd->m_date = precord->date;
//CSPTime sptime;
//if( sptime.FromStockTimeDay(pkd->m_date) )
// pkd->m_time = sptime.GetTime();
//pkd->m_fOpen = (float)( precord->open * 0.001 );
//pkd->m_fHigh = (float)( precord->high * 0.001 );
//pkd->m_fLow = (float)( precord->low * 0.001 );
//pkd->m_fClose = (float)( precord->close * 0.001 );
//pkd->m_fAmount = (float)( precord->amount * 1000. );
//pkd->m_fVolume = (float)( precord->volume * 100. );
return true;
}
BOOL convert_TYDAY_RECORD_MIN_to_KDATA( TYDAY_RECORD * precord, KDATA * pkd )
{
//ASSERT( precord && pkd );
if( NULL == precord || NULL == pkd )
return false;
memset( pkd, 0, sizeof(KDATA) );
//pkd->m_dwMarket = CStock::marketUnknown;
//strncpy( pkd->m_szCode, precord->code, min(sizeof(pkd->m_szCode)-1,sizeof(precord->code)) );
//pkd->m_date = precord->date;
//CSPTime sptime;
//if( sptime.FromStockTimeDay(pkd->m_date) )
// pkd->m_time = sptime.GetTime();
//pkd->m_fOpen = (float)( precord->open * 0.001 );
//pkd->m_fHigh = (float)( precord->high * 0.001 );
//pkd->m_fLow = (float)( precord->low * 0.001 );
//pkd->m_fClose = (float)( precord->close * 0.001 );
//pkd->m_fAmount = (float)( precord->amount * 100. );
//pkd->m_fVolume = (float)( precord->volume * 100. );
return true;
}
BOOL convert_KDATA_to_TYDAY_RECORD( DWORD dwSerial, const char * name, KDATA * pkd, TYDAY_RECORD * precord )
{
// ASSERT( precord && pkd );
if( NULL == precord || NULL == pkd )
return false;
memset( precord, 0, sizeof(TYDAY_RECORD) );
precord->magic = 0x06;
precord->magic2 = 0x08;
//strncpy( precord->code, pkd->m_szCode, min(sizeof(precord->code),sizeof(pkd->m_szCode)) );
//if( name )
// strncpy( precord->name, name, min(sizeof(precord->name),strlen(name)) );
//precord->date = pkd->m_date;
//
//precord->open = (DWORD)( pkd->m_fOpen * 1000 );
//precord->high = (DWORD)( pkd->m_fHigh * 1000 );
//precord->low = (DWORD)( pkd->m_fLow * 1000 );
//precord->close = (DWORD)( pkd->m_fClose * 1000 );
//precord->amount = (DWORD)( pkd->m_fAmount * 0.001 );
//precord->volume = (DWORD)( pkd->m_fVolume * 0.01 );
precord->serial = dwSerial;
return true;
}
BOOL convert_KDATA_to_TYDAY_RECORD_MIN( DWORD dwSerial, const char * name, KDATA * pkd, TYDAY_RECORD * precord )
{
// ASSERT( precord && pkd );
//if( NULL == precord || NULL == pkd )
// return false;
//memset( precord, 0, sizeof(TYDAY_RECORD) );
//precord->magic = 0x06;
//precord->magic2 = 0x08;
//
//strncpy( precord->code, pkd->m_szCode, min(sizeof(precord->code),sizeof(pkd->m_szCode)) );
//if( name )
// strncpy( precord->name, name, min(sizeof(precord->name),strlen(name)) );
//precord->date = pkd->m_date;
//
//precord->open = (DWORD)( pkd->m_fOpen * 1000 );
//precord->high = (DWORD)( pkd->m_fHigh * 1000 );
//precord->low = (DWORD)( pkd->m_fLow * 1000 );
//precord->close = (DWORD)( pkd->m_fClose * 1000 );
//precord->amount = (DWORD)( pkd->m_fAmount * 0.01 );
//precord->volume = (DWORD)( pkd->m_fVolume * 0.01 );
//precord->serial = dwSerial;
return true;
}
BOOL convert_FXJDAY_RECORD_to_KDATA( DWORD dwMarket, const char* lpszCode, int nKType, FXJDAY_RECORD *precord, KDATA *pkd )
{
// ASSERT( precord && pkd && lpszCode );
if( NULL == precord || NULL == pkd )
return false;
memset( pkd, 0, sizeof(KDATA) );
//pkd->m_dwMarket = dwMarket;
//strncpy( pkd->m_szCode, lpszCode, min(sizeof(pkd->m_szCode)-1,strlen(lpszCode)) );
//pkd->m_time = precord->m_time;
//CSPTime sptime(pkd->m_time);
//pkd->m_date = sptime.ToStockTime( CKData::IsDayOrMin(nKType) );
//pkd->m_fOpen = precord->open;
//pkd->m_fHigh = precord->high;
//pkd->m_fLow = precord->low;
//pkd->m_fClose = precord->close;
//pkd->m_fAmount = precord->amount;
//pkd->m_fVolume = (float)( precord->volume * 100. );
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////
// class CStDatabase
CStDatabase::CStDatabase()
{
m_pStore = NULL;
}
CStDatabase::~CStDatabase()
{
if( m_pStore )
{
delete m_pStore;
m_pStore = NULL;
}
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
if( pStore )
{ delete pStore;pStore=NULL;}
}
m_aptrAssistant.clear();
}
bool CStDatabase::CreateSelfDB( const char * rootpath )
{
return CSelfDB::CreateSelfDB( rootpath );
}
bool CStDatabase::IsValidDataType ( int nType )
{
//return IDataStore::IsValidDataType( nType );
return 0;
}
int CStDatabase::GetSupportedDataType ( CDBType * pdbtype, int maxsize )
{
return IDataStore::GetSupportedDataType( pdbtype, maxsize );
return 0;
}
bool CStDatabase::SetRootPath( const char * rootpath, int nDBType )
{
if( m_pStore )
delete m_pStore;
m_pStore = IDataStore::CreateStore( rootpath, nDBType );
return (NULL != m_pStore);
}
bool CStDatabase::IsOK( )
{
return m_pStore && m_pStore->IsOK();
}
const char *CStDatabase::GetRootPath( )
{ if(!IsOK()) return NULL; return m_pStore->GetRootPath(); }
int CStDatabase::GetDBType( )
{ if(!IsOK()) return IDataStore::dbtypeUnknown; return m_pStore->GetDBType(); }
const char *CStDatabase::GetDBTypeName( )
{ if(!IsOK()) return NULL; return m_pStore->GetDBTypeName(); }
DWORD CStDatabase::GetSelfTempPath( char *szTempPath, int size )
{
const char *szRoot = GetRootPath();
if( 0 == strlen( szRoot ) )
{
if( NULL != szTempPath && size > 0 )
szTempPath[0] = '\0';
return 0;
}
char szReturn[MAX_PATH+1];
memset( szReturn, 0, sizeof(szReturn) );
#ifdef _MSC_VER
strncpy_s( szReturn, szRoot, MAX_PATH );
strncat_s( szReturn, "temp", MAX_PATH-strlen(szReturn) );
strncat_s( szReturn, STRING_DIRSEP, MAX_PATH-strlen(szReturn) );
#else
strncpy( szReturn, szRoot, MAX_PATH );
strncat( szReturn, "temp", MAX_PATH-strlen(szReturn) );
strncat( szReturn, STRING_DIRSEP, MAX_PATH-strlen(szReturn) );
#endif
BOOL bCreated = true;
if( 0 != access(szReturn,0) )
#ifdef _WIN32
bCreated = (0==mkdir(szReturn));
#else
bCreated = (0==mkdir(szReturn,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH));
#endif
if( !bCreated )
{
if( NULL != szTempPath && size > 0 )
szTempPath[0] = '\0';
return 0;
}
strncpy( szTempPath,szReturn, size );
return strlen(szReturn);
}
bool CStDatabase::GetLastErrorMessage(char* lpszError, UINT nMaxError)
{
if( nMaxError > 0 )
lpszError[0] = '\0';
return false;
}
int CStDatabase::GetMaxStockNumber( )
{
if(!IsOK()) return 0;
int nSize = m_pStore->GetMaxStockNumber();
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
nSize = pStore->GetMaxStockNumber();
if( nSize > 0 )
return nSize;
}
return nSize;
}
int CStDatabase::LoadCodetable( CInstrumentContainer & container )
{
if(!IsOK()) return 0;
int nSize = m_pStore->LoadCodetable( container );
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
nSize = pStore->LoadCodetable( container );
if( nSize > 0 )
return nSize;
}
return nSize;
}
int CStDatabase::StoreCodetable( CInstrumentContainer & container )
{ if(!IsOK()) return 0; return m_pStore->StoreCodetable( container ); }
int CStDatabase::LoadKDataCache( CInstrumentContainer & container, PROGRESS_CALLBACK fnCallback, void *cookie, int nProgStart, int nProgEnd )
{
if(!IsOK()) return 0;
int nSize = m_pStore->LoadKDataCache( container, fnCallback, cookie, nProgStart, nProgEnd );
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
nSize = pStore->LoadKDataCache( container, fnCallback, cookie, nProgStart, nProgEnd );
if( nSize > 0 )
return nSize;
}
return nSize;
}
int CStDatabase::LoadBasetable( CInstrumentContainer & container )
{ if(!IsOK()) return 0; return m_pStore->LoadBasetable( container ); }
int CStDatabase::StoreBasetable( CInstrumentContainer & container )
{ if(!IsOK()) return 0; return m_pStore->StoreBasetable( container ); }
int CStDatabase::LoadBaseText( CInstrument *pstock )
{
if( !pstock || !IsOK() ) return 0;
int nSize = m_pStore->LoadBaseText( pstock );
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
CInstrument stock;
stock.SetInstrumentInfo( &(pstock->GetInstrumentInfo()) );
if( pStore && pStore->LoadBaseText( &stock ) > 0 )
{
nSize = pstock->MergeBaseText( stock );
}
}
return nSize;
}
int CStDatabase::LoadKData( CInstrument *pstock, int period )
{
if( !pstock || !IsOK()) return 0;
int nSize = m_pStore->LoadKData( pstock, period );
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
CInstrument stock;
stock.SetInstrumentInfo( &(pstock->GetInstrumentInfo()) );
if( pStore->LoadKData( &stock, period ) > 0 )
{
nSize = pstock->MergeKData( stock, period );
}
}
return nSize;
}
int CStDatabase::LoadDRData( CInstrument *pstock )
{
if( !pstock || !IsOK() )
return 0;
int nSize = m_pStore->LoadDRData( pstock );
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
CInstrument stock;
stock.SetInstrumentInfo( &(pstock->GetInstrumentInfo()) );
if( pStore && pStore->LoadDRData( &stock ) > 0 )
{
//nSize = pstock->MergeDRData( stock );
}
}
return nSize;
}
int CStDatabase::StoreDRData( CInstrument *pstock )
{ if(!IsOK()) return 0;
return m_pStore->StoreDRData( pstock ); }
int CStDatabase::LoadReport( CInstrument *pstock )
{
if( !pstock || !IsOK() ) return 0;
int nSize = m_pStore->LoadReport( pstock );
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
if( pStore )
nSize = pStore->LoadReport( pstock );
if( nSize > 0 )
return nSize;
}
return nSize;
}
int CStDatabase::LoadMinute( CInstrument *pstock )
{
if( !pstock || !IsOK() ) return 0;
int nSize = m_pStore->LoadMinute( pstock );
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
if( pStore )
nSize = pStore->LoadMinute( pstock );
if( nSize > 0 )
return nSize;
}
return nSize;
}
int CStDatabase::LoadOutline( CInstrument *pstock )
{
if( !pstock || !IsOK() ) return 0;
int nSize = m_pStore->LoadOutline( pstock );
if( nSize > 0 )
return nSize;
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
if( pStore )
nSize = pStore->LoadOutline( pstock );
if( nSize > 0 )
return nSize;
}
return nSize;
}
int CStDatabase::StoreReport( REPORT * pReport, int nCount, BOOL bBigTrade )
{ if(!IsOK())
return 0;
return m_pStore->StoreReport( pReport, nCount, bBigTrade );
}
int CStDatabase::StoreMinute( MINUTE * pMinute, int nCount )
{ if(!IsOK())
return 0;
return m_pStore->StoreMinute( pMinute, nCount );
}
int CStDatabase::StoreOutline( OUTLINE * pOutline, int nCount )
{ if(!IsOK()) return 0;
return m_pStore->StoreOutline( pOutline, nCount ); }
int CStDatabase::InstallCodetbl( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallCodetbl( filename, orgname ); }
int CStDatabase::InstallCodetblBlock( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallCodetblBlock( filename, orgname ); }
int CStDatabase::InstallCodetblFxjBlock( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallCodetblFxjBlock( filename, orgname ); }
int CStDatabase::InstallKData( CKData &kdata, BOOL bOverwrite )
{ if(!IsOK()) return 0;
return m_pStore->InstallKData( kdata, bOverwrite ); }
int CStDatabase::InstallKDataTy( const char * stkfile, int ktype, PROGRESS_CALLBACK fnCallback, void *cookie )
{ if(!IsOK()) return 0;
return m_pStore->InstallKDataTy( stkfile, ktype, fnCallback, cookie ); }
int CStDatabase::InstallKDataFxj( const char * dadfile, int ktype, PROGRESS_CALLBACK fnCallback, void *cookie )
{ if(!IsOK()) return 0;
return m_pStore->InstallKDataFxj( dadfile, ktype, fnCallback, cookie ); }
// int CStDatabase::InstallDRData( CDRData &drdata )
// { if(!IsOK()) return 0;
// return m_pStore->InstallDRData( drdata ); }
int CStDatabase::InstallDRDataClk( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallDRDataClk( filename, orgname ); }
int CStDatabase::InstallDRDataFxj( const char * fxjfilename )
{ if(!IsOK()) return 0;
return m_pStore->InstallDRDataFxj( fxjfilename ); }
int CStDatabase::InstallBasetable( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallBasetable( filename, orgname ); }
int CStDatabase::InstallBasetableTdx( const char * filename )
{ if(!IsOK()) return 0;
return m_pStore->InstallBasetableTdx( filename ); }
int CStDatabase::InstallBasetableFxj( const char * filename )
{ if(!IsOK()) return 0;
return m_pStore->InstallBasetableFxj( filename ); }
int CStDatabase::InstallBaseText( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallBaseText( filename, orgname ); }
int CStDatabase::InstallBaseText( const char * buffer, int nLen, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallBaseText( buffer, nLen, orgname ); }
int CStDatabase::InstallNewsText( const char * filename, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallNewsText( filename, orgname ); }
int CStDatabase::InstallNewsText( const char * buffer, int nLen, const char *orgname )
{ if(!IsOK()) return 0;
return m_pStore->InstallNewsText( buffer, nLen, orgname ); }
bool CStDatabase::AddAssistantRootPath( const char * rootpath, int nDBType )
{
/*IDataStore * pStore = IDataStore::CreateStore( rootpath, nDBType );
if( NULL == pStore )
return false;
m_aptrAssistant.Add( pStore );*/
return true;
}
void CStDatabase::RemoveAssistant( const char * rootpath )
{
if( NULL == rootpath || strlen(rootpath) == 0 )
return;
for( int i=m_aptrAssistant.size()-1; i>=0; i-- )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
if( pStore && 0 == strcmp( pStore->GetRootPath(), rootpath ) )
{
m_aptrAssistant.erase(i+m_aptrAssistant.begin());
delete pStore;
}
}
}
void CStDatabase::RemoveAllAssistant( )
{
for( int i=0; i<m_aptrAssistant.size(); i++ )
{
IDataStore * pStore = (IDataStore *)m_aptrAssistant.at(i);
if( pStore )
{
delete pStore;
}
}
m_aptrAssistant.clear( );
}
CSPTime CStDatabase::GetTimeInitial( )
{
return CSPTime( 1990, 12, 19, 0, 0, 0 );
}
bool CStDatabase::GetTimeLocalRange( CSPTime *ptmLatest, CSPTime * ptmPioneer, CSPTime * ptmInitial )
{
CInstrument stock;
//stock.SetInstrumentID( CInstrument::marketSHSE, STKLIB_CODE_MAIN );
//stock.SetDatabase( this );
if( !stock.PrepareData( CInstrument::dataK, CKData::ktypeDay ) )
return false;
CKData & kday = stock.GetKDataDay();
int nYear, nMonth, nDay, nHour, nMinute;
if( ptmLatest )
{
if( !kday.LatestDate( nYear, nMonth, nDay, nHour, nMinute ) )
return false;
*ptmLatest = CSPTime( nYear, nMonth, nDay, 23, 59, 59 );
}
if( ptmPioneer )
{
if( kday.GetSize() == 0 || !kday.DateAt(0, nYear, nMonth, nDay, nHour, nMinute ) )
return false;
*ptmPioneer = CSPTime( nYear, nMonth, nDay, 0, 0, 0 );
}
if( ptmInitial )
{
*ptmInitial = GetTimeInitial( );
}
return true;
}
bool CStDatabase::GetNeedDownloadRange( CInstrumentInfo &info, CSPTime tmBegin, CSPTime tmEnd, CSPTime &tmDLBegin, CSPTime &tmDLEnd )
{
tmDLBegin = tmBegin;
tmDLEnd = tmEnd;
// Prepare Data
CInstrument stock;
stock.SetInstrumentInfo( &info );
//stock.SetDatabase( this );
if( !stock.PrepareData( CInstrument::dataK, CKData::ktypeDay ) )
return true;
CKData & kday = stock.GetKDataDay();
// Prepare Time
CSPTime tmInitial, tmLatest, tmPioneer;
CSPTime sptimeInitial;
if( 0 != info.m_datebegin && sptimeInitial.FromInstrumentTimeDay( info.m_datebegin ) )
tmInitial = sptimeInitial.GetTime();
else
tmInitial = GetTimeInitial( );
int nYear, nMonth, nDay, nHour, nMinute;
if( !kday.LatestDate( nYear, nMonth, nDay, nHour, nMinute ) )
return true;
tmLatest = CSPTime( nYear, nMonth, nDay, 23, 59, 59 );
if( kday.GetSize() == 0 || !kday.DateAt(0, nYear, nMonth, nDay, nHour, nMinute ) )
return true;
tmPioneer = CSPTime( nYear, nMonth, nDay, 0, 0, 0 );
// Deal With
if( tmBegin < tmInitial )
tmBegin = tmInitial;
if( tmBegin >= tmPioneer && tmEnd <= tmLatest )
{
int nCount = 0;
for( int k=0; k<kday.GetSize(); k++ )
{
DWORD date = kday.ElementAt(k).TradingDate;
CSPTime sptime;
if( sptime.FromInstrumentTimeDay(date) )
{
if( sptime.GetTime() >= tmBegin.GetTime() && sptime.GetTime() <= tmEnd.GetTime() )
nCount ++;
}
}
CSPTimeSpan span = tmEnd - tmBegin;
if( nCount > span.GetDays()*4/7 )
return false;
}
if( tmEnd <= tmPioneer )
{
tmDLBegin = tmBegin;
tmDLEnd = tmPioneer-CSPTimeSpan(1,0,0,0);
}
else if( tmBegin >= tmLatest )
{
tmDLBegin = tmLatest+CSPTimeSpan(1,0,0,0);
tmDLEnd = tmEnd;
}
else if( tmBegin < tmPioneer && tmEnd > tmPioneer && tmEnd <= tmLatest )
{
tmDLBegin = tmBegin;
tmDLEnd = tmPioneer-CSPTimeSpan(1,0,0,0);
}
else if( tmBegin >= tmPioneer && tmBegin < tmLatest && tmEnd > tmLatest )
{
tmDLBegin = tmLatest+CSPTimeSpan(1,0,0,0);
tmDLEnd = tmEnd;
}
else
{
tmDLBegin = tmBegin;
tmDLEnd = tmEnd;
}
return true;
}
// 将钱龙格式K线数据 加入 通用数据包
int CStDatabase::AppendToTyData( const char *code, const char *name, int nKType, char* lpszKFile, char* lpszTyDataFile, time_t tmBegin, time_t tmEnd )
{
int nCount = 0;
//CFile fileK, fileTy;
//if( fileK.Open( lpszKFile, CFile::modeRead )
// && fileTy.Open( lpszTyDataFile, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite ) )
//{
// // Init Header
// TYDAY_FHEADER header;
// memset( &header, 0, sizeof(header) );
// header.magic = 0x06;
// for( int i=0; i<sizeof(header.code); i++ )
// header.code[i] = ' ';
// header.magic2 = 0x08;
// for( int i=0; i<sizeof(header.name); i++ )
// header.name[i] = ' ';
// CSPTime sptime = CSPTime::GetCurrentTime();
// header.date = sptime.ToInstrumentTimeDay();
// header.datebegin= header.date;
// header.dateend = header.date;
// header.gendate = header.date;
// header.gentime = sptime.GetTime();
// if( sizeof(header) != fileTy.Read( &header, sizeof(header) ) )
// {
// fileTy.SeekToBegin();
// fileTy.Write( &header, sizeof(header) );
// }
// header.from = 'CL';
// fileTy.SeekToEnd();
// // generate
// if( CKData::IsDayOrMin(nKType) )
// {
// DWORD dateBegin = CSPTime(tmBegin).ToInstrumentTimeDay();
// DWORD dateEnd = CSPTime(tmEnd).ToInstrumentTimeDay();
// struct QL_Data_day qlkd;
// while( sizeof(qlkd) == fileK.Read( &qlkd, sizeof(qlkd) ) )
// {
// if( qlkd.day_date < dateBegin || qlkd.day_date > dateEnd )
// continue;
// KDATA kd;
// TYDAY_RECORD tyrecord;
// //convert_QL_Data_day_to_KDATA( CStock::marketUnknown, code, &qlkd, &kd );
// convert_KDATA_to_TYDAY_RECORD( header.recordcount+1, name, &kd, &tyrecord );
// fileTy.Write( &tyrecord, sizeof(tyrecord) );
//
// // Modified header
// if( tyrecord.date < header.datebegin )
// header.datebegin = tyrecord.date;
// if( tyrecord.date > header.dateend )
// header.dateend = tyrecord.date;
// header.recordcount += 1;
// nCount ++;
// }
// }
// else
// {
// DWORD dateBegin = CSPTime(tmBegin).ToInstrumentTimeMin();
// DWORD dateEnd = CSPTime(tmEnd).ToInstrumentTimeMin();
// struct QL_Data_5min qlkd;
// while( sizeof(qlkd) == fileK.Read( &qlkd, sizeof(qlkd) ) )
// {
// if( qlkd.min_off < dateBegin || qlkd.min_off > dateEnd )
// continue;
// KDATA kd;
// TYDAY_RECORD tyrecord;
// //convert_QL_Data_5min_to_KDATA( CStock::marketUnknown, code, &qlkd, &kd );
// convert_KDATA_to_TYDAY_RECORD_MIN( header.recordcount+1, name, &kd, &tyrecord );
// fileTy.Write( &tyrecord, sizeof(tyrecord) );
//
// // Modified header
// if( tyrecord.date < header.datebegin )
// header.datebegin = tyrecord.date;
// if( tyrecord.date > header.dateend )
// header.dateend = tyrecord.date;
// header.recordcount += 1;
// nCount ++;
// }
// }
// if( nCount > 0 )
// header.sharecount += 1;
// fileTy.SeekToBegin();
// fileTy.Write( &header, sizeof(header) );
// fileK.Close();
// fileTy.Close();
//}
return nCount;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/mongodb_client/FastTrader.git
[email protected]:mongodb_client/FastTrader.git
mongodb_client
FastTrader
FastTrader
master

搜索帮助