BOOL CSetKDataDlg::DeleteKData( CString strStockCode ) { if( strStockCode.GetLength() <= 0 ) return FALSE; UpdateData( ); if( m_tmDate.GetTime() == -1 ) return FALSE; CStockInfo info; CStock stock; if( !info.SetStockCode( CStock::marketUnknown, strStockCode ) ) return FALSE; stock.SetStockInfo( &info ); int nKType = m_comboKType.GetSelect(); AfxPrepareStockData( &AfxGetDB(), stock, nKType, CKData::formatOriginal, CKData::mdtypeClose, FALSE, TRUE ); CKData & kdata = stock.GetKData(nKType); CSPTime sptime = m_tmDate.GetTime(); int nIndex = kdata.GetIndexByDate( sptime.ToStockTime(CKData::IsDayOrMin(kdata.GetKType())) ); if( nIndex >= 0 && nIndex < kdata.GetSize() ) { kdata.RemoveAt(nIndex); AfxGetDB().InstallKData( kdata, TRUE ); return TRUE; } return FALSE; }
void CSetKDataDlg::LoadKData( CString strStockCode ) { if( strStockCode.GetLength() <= 0 ) return; UpdateData(); m_strOpen.Empty(); m_strHigh.Empty(); m_strLow.Empty(); m_strClose.Empty(); m_dwVolume = 0; m_dwAmount = 0; if( m_tmDate.GetTime() == -1 ) { UpdateData( FALSE ); return; } CStockInfo info; CStock stock; if( !info.SetStockCode( CStock::marketUnknown, strStockCode ) ) return; stock.SetStockInfo( &info ); int nKType = m_comboKType.GetSelect(); AfxPrepareStockData( &AfxGetDB(), stock, nKType, CKData::formatOriginal, CKData::mdtypeClose, FALSE, TRUE ); CKData & kdata = stock.GetKData(nKType); // 价格小数位数格式串 CString strPriceFmt; strPriceFmt.Format( "%%.%df", info.DigitBit() ); CSPTime sptime = m_tmDate.GetTime(); int nIndex = kdata.GetIndexByDate( sptime.ToStockTime(CKData::IsDayOrMin(kdata.GetKType())) ); if( nIndex >= 0 && nIndex < kdata.GetSize() ) { KDATA kd = kdata.ElementAt(nIndex); m_strOpen.Format( strPriceFmt, kd.m_fOpen ); m_strHigh.Format( strPriceFmt, kd.m_fHigh ); m_strLow.Format( strPriceFmt, kd.m_fLow ); m_strClose.Format( strPriceFmt, kd.m_fClose ); m_dwVolume = (DWORD)(kd.m_fVolume/100); m_dwAmount = (DWORD)(kd.m_fAmount/1000); } UpdateData( FALSE ); }
BOOL CSetKDataDlg::StoreKData( CString strStockCode ) { if( strStockCode.GetLength() <= 0 ) return FALSE; UpdateData( ); if( m_tmDate.GetTime() == -1 ) return FALSE; if( !IsNumber(m_strOpen,FALSE) || !IsNumber(m_strHigh,FALSE) || !IsNumber(m_strLow,FALSE) || !IsNumber(m_strClose,FALSE) ) { AfxMessageBox( IDS_SETKDATA_NOTNUMBER ); return FALSE; } DWORD dwMarket = CStock::marketUnknown; CStockInfo info; if( info.SetStockCode(dwMarket, strStockCode) ) dwMarket = info.GetMarket(); int nKType = m_comboKType.GetSelect(); CSPTime sptime = m_tmDate.GetTime(); KDATA kd; memset( &kd, 0, sizeof(kd) ); kd.m_dwMarket = dwMarket; strncpy( kd.m_szCode, strStockCode, min(sizeof(kd.m_szCode)-1,strStockCode.GetLength()) ); kd.m_time = m_tmDate.GetTime(); kd.m_date = sptime.ToStockTime(CKData::IsDayOrMin(nKType)); kd.m_fOpen = (float)atof(m_strOpen); kd.m_fHigh = (float)atof(m_strHigh); kd.m_fLow = (float)atof(m_strLow); kd.m_fClose = (float)atof(m_strClose); kd.m_fVolume = (float)m_dwVolume*100; kd.m_fAmount = (float)m_dwAmount*1000; CKData kdata(nKType); kdata.Add( kd ); AfxGetDB().InstallKData( kdata ); return TRUE; }