/*** 手动改变拥有股票数量 */ void CSimuRealOp::OnModified() { // TODO: Add your control notification handler code here CSimuAddStockDlg dlg; dlg.SetStrategy( m_pStrategy ); dlg.SetMode( CSimuAddStockDlg::modeModifiedCash, "", m_pStrategy->RealGetCurrentCash(), 0 ); if( IDOK == dlg.DoModal( ) ) { double dValue = dlg.GetValue(); double dValueOld = m_pStrategy->RealGetCurrentCash(); OPRECORD record; memset( &record, 0, sizeof(record) ); CSPTime tmNow = CSPTime::GetCurrentTime(); CSPTime tmDay = CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 ); record.time = tmDay.GetTime(); if( dValue > dValueOld ) record.lOpType = STRATEGY_OPTYPE_ADDCASH; else record.lOpType = STRATEGY_OPTYPE_REMOVECASH; record.dSharePrice = fabs(dValue-dValueOld); if( m_pStrategy->RealOperate( record ) ) Initialize( ); else AfxMessageBox( IDS_SIMUREALOP_MODIFIEDCASHFAILED, MB_OK|MB_ICONINFORMATION ); m_bModified = TRUE; } }
/*** 手动加入拥有股票 */ void CSimuRealOp::OnAddstock() { CSimuAddStockDlg dlg; dlg.SetStrategy( m_pStrategy ); dlg.SetMode( CSimuAddStockDlg::modeAddStock, "", 0, 0 ); if( IDOK == dlg.DoModal( ) ) { CString strStockCode = dlg.GetStockCode(); double dShare = dlg.GetValue(); double dSharePrice = dlg.GetPrice(); OPRECORD record; memset( &record, 0, sizeof(record) ); CSPTime tmNow = CSPTime::GetCurrentTime(); CSPTime tmDay = CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 ); record.time = tmDay.GetTime(); record.lOpType = STRATEGY_OPTYPE_ADDSTOCK; strncpy( record.szCode, strStockCode.GetBuffer(sizeof(record.szCode)+1), sizeof(record.szCode) ); strStockCode.ReleaseBuffer(); record.dwShare = (DWORD)dShare; record.dSharePrice = dSharePrice; if( m_pStrategy->RealOperate( record ) ) Initialize( ); else AfxMessageBox( IDS_SIMUREALOP_ADDSTOCKFAILED, MB_OK|MB_ICONINFORMATION ); m_bModified = TRUE; } }
/*** 手动移除拥有股票 */ void CSimuRealOp::OnDeletestock() { // TODO: Add your control notification handler code here if( m_pStrategy && m_listStockOwn.IsWindowVisible() ) { int nSelected = m_listStockOwn.GetSelected(); if( -1 == nSelected ) { AfxMessageBox( IDS_SIMUREALOP_OPRECORDNOSEL, MB_OK | MB_ICONINFORMATION ); return; } int nStock = m_listStockOwn.GetItemData( nSelected ); CStockOwnContainer & stockown = m_pStrategy->RealGetStockOwn(); BOOL bOK = FALSE; if( nStock >= 0 && nStock < stockown.GetSize() ) { OPRECORD record; memset( &record, 0, sizeof(record) ); CSPTime tmNow = CSPTime::GetCurrentTime(); CSPTime tmDay = CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 ); record.time = tmDay.GetTime(); record.lOpType = STRATEGY_OPTYPE_REMOVESTOCK; strncpy( record.szCode, stockown.ElementAt(nStock).szCode, sizeof(record.szCode) ); record.dwShare = stockown.ElementAt(nStock).dwShare; bOK = m_pStrategy->RealOperate( record ); Initialize( ); m_bModified = TRUE; } if( !bOK ) AfxMessageBox( IDS_SIMUREALOP_CANNOTDELETE, MB_OK | MB_ICONINFORMATION ); } }
void CDateComboBox::SetCurrentWindowText( ) { if( !::IsWindow(m_hWnd) ) return; DWORD dwDate = -1; AfxGetSListStockContainer().GetCurrentType(NULL,NULL,&dwDate); CSPTime sptime; if( DWORD(-2) == dwDate ) { CString strItem; strItem.LoadString( IDS_DATECOMBOBOX_MORE ); SelectString( 0, strItem ); } else if( DWORD(-1) == dwDate ) { CString strItem; strItem.LoadString( IDS_DATECOMBOBOX_NOW ); SelectString( 0, strItem ); } else if( sptime.FromStockTimeDay( dwDate ) ) { CString strItem = AfxGetTimeString( sptime.GetTime(), szDateComboBoxTimeFormat, TRUE ); SelectString( 0, strItem ); } else { CString strItem; strItem.LoadString( IDS_DATECOMBOBOX_NOW ); SelectString( 0, strItem ); } }
time_t CSPTime::GetLatestTradeTime( time_t tmNow ) { CSPTime tNow(tmNow); CSPTime tTradeLatest = tNow; if( 7 == tNow.GetDayOfWeek() ) { tNow -= CSPTimeSpan(1,0,0,0); tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0); } else if( 1 == tNow.GetDayOfWeek() ) { tNow -= CSPTimeSpan(2,0,0,0); tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0); } else if( (tNow.GetHour() == 9 && tNow.GetMinute() < 25 ) || tNow.GetHour() < 9 ) { tNow -= CSPTimeSpan(1,0,0,0); tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0); } else if( (tNow.GetHour() == 11 && tNow.GetMinute() >= 30) || tNow.GetHour() == 12 ) { tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),11,30,0).GetTime(); } else if( tNow.GetHour() >= 15 ) { tTradeLatest = CSPTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),15,0,0).GetTime(); } return tTradeLatest.GetTime(); }
time_t CSPTime::GetTimeTradeLatest( time_t tmTradeFirstToday ) { CSPTime tNow = CSPTime::GetCurrentTime(); CSPTime tTradeFirstToday( tmTradeFirstToday ); time_t tmTradeLatest = -1; int nYear = tTradeFirstToday.GetYear(); int nMonth = tTradeFirstToday.GetMonth(); int nDay = tTradeFirstToday.GetDay(); if( tNow > tTradeFirstToday && tNow.GetYear() == nYear && tNow.GetMonth() == nMonth && tNow.GetDay() == nDay ) { tmTradeLatest = tNow.GetTime(); if( (tNow.GetHour() == 11 && tNow.GetMinute() >= 30) || tNow.GetHour() == 12 ) tmTradeLatest = CSPTime(nYear,nMonth,nDay,11,30,0).GetTime(); else if( tNow.GetHour() >= 15 ) tmTradeLatest = CSPTime(nYear,nMonth,nDay,15,0,0).GetTime(); } else if( tNow > tTradeFirstToday ) tmTradeLatest = CSPTime(nYear,nMonth,nDay,15,0,0).GetTime(); return tmTradeLatest; }
CInstallPacDlg::CInstallPacDlg( ) : CPropertyPageEx(CInstallPacDlg::IDD) { //{{AFX_DATA_INIT(CInstallPacDlg) //}}AFX_DATA_INIT m_pInstallInfo = NULL; m_bDBModified = FALSE; m_bCodetableInstalled = FALSE; CSPTime tmLatestOld = 0; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) ) m_netdb.GetTimeLocalRange( &tmLatestOld, NULL, NULL ); m_tmLatestOld = tmLatestOld.GetTime(); }
void CEditKDATADlg::SetKDATA( KDATA kd, int nKType ) { m_kd = kd; m_nKType = nKType; CSPTime sptime; if( sptime.FromStockTime( kd.m_date, CKData::IsDayOrMin(m_nKType) ) ) m_tmDate = CSPTime( sptime.GetTime() ); m_strOpen.Format( "%.3f", kd.m_fOpen ); m_strHigh.Format( "%.3f", kd.m_fHigh ); m_strLow.Format( "%.3f", kd.m_fLow ); m_strClose.Format( "%.3f", kd.m_fClose ); m_dwVolume = (DWORD)(kd.m_fVolume/100); m_dwAmount = (DWORD)(kd.m_fAmount/1000); }
/*** 初始化拥有股票列表的数据 */ BOOL CReportListCtrl::LoadStockOwnList( CStockOwnContainer & stockown, double dCash, CSPTime tmCur, double dAsset, CTechStockContainer & techstocks ) { DeleteAllItems(); int i; for( i=0; i<stockown.GetSize(); i++ ) { STOCKOWN & own = stockown.ElementAt(i); CString strStock, strShare, strBuyPrice, strNowPrice; CStockInfo info; strStock = own.szCode; if( AfxGetStockContainer().GetStockInfo( own.szCode, &info ) ) strStock = info.GetStockName(); strShare.Format( "%u", own.dwShare ); strBuyPrice.Format( "%.2f", own.dBuyPrice ); double dNowPrice = 0; if( techstocks.GetClosePrice( own.szCode, tmCur.GetTime(), &dNowPrice ) ) strNowPrice.Format( "%.2f", dNowPrice ); InsertItem( i, strStock ); SetItemText( i, 0, strStock ); SetItemText( i, 1, strShare ); SetItemText( i, 2, strBuyPrice ); SetItemText( i, 3, strNowPrice ); SetItemData( i, i ); } CString strCash; strCash.LoadString( IDS_SIMUREPORT_CASH ); InsertItem( i, strCash ); strCash.Format( "%.2f", dCash ); SetItemText( i, 1, strCash ); i++; CString strAsset; strAsset.LoadString( IDS_SIMUREPORT_ASSET ); InsertItem( i, strAsset ); strAsset.Format( "%.2f", dAsset ); SetItemText( i, 1, strAsset ); if( GetItemCount() > 0 ) SetItemState( 0, LVIS_SELECTED, LVIS_SELECTED ); return TRUE; }
void CDownloadDlg::OnCancel() { // TODO: Add extra cleanup here m_btnCancel.EnableWindow( FALSE ); AfxGetStkReceiver().RemoveRcvDataWnd( GetSafeHwnd() ); AfxReleaseDB(); char szErr[1024]; if( !AfxInitializeDB( szErr, sizeof(szErr) ) ) AfxMessageBox( szErr, MB_OK|MB_ICONINFORMATION ); CDialog::OnCancel( ); if( m_bDBModified ) { BOOL bRecalculate = FALSE; CSPTime tmLatest = 0; if( ( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) && tmLatest.GetTime() > m_tmLatestOld.GetTime() ) ) { bRecalculate = TRUE; } if( m_bAutoRun ) bRecalculate = FALSE; AfxGetStkUIApp()->OnDBChanged( FALSE /*bRecalculate*/ ); } if( !m_bAutoRun ) { CNetInfoDlg dlg; dlg.DoModal( ); if( AfxGetProfile().HasNewVersion() && IDYES == AfxMessageBox( IDS_DOWNLOAD_UPGRADENOW, MB_YESNO ) ) { CUpgradeDlg dlg; dlg.SetAutoRun( TRUE ); dlg.DoModal(); } } CXFDialog::PostNcDestroy(); }
void CInstallPacDlg::OnCompleted( ) { AfxReleaseDB(); char szErr[1024]; if( !AfxInitializeDB( szErr, sizeof(szErr) ) ) AfxMessageBox( szErr, MB_OK|MB_ICONINFORMATION ); if( m_bDBModified ) { BOOL bRecalculate = FALSE; CSPTime tmLatest = 0; if( m_bCodetableInstalled || ( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) && tmLatest.GetTime() > m_tmLatestOld.GetTime() ) ) { bRecalculate = TRUE; } AfxGetStkUIApp()->OnDBChanged( FALSE /*bRecalculate*/ ); m_bDBModified = FALSE; } }
BOOL CDateComboBox::InitDates( ) { ResetContent( ); // Add Date ComboBox Members CSPDWordArray dwArray; AfxGetStockContainer().GetTechDateArray( dwArray ); InitStorage( dwArray.GetSize()+2, 32 ); CString strMore; strMore.LoadString( IDS_DATECOMBOBOX_MORE ); int nIndex = AddString( strMore ); SetItemData( nIndex, -2 ); /*int nMaxDaysCalculate = AfxGetProfile().GetMaxDaysCalculate( );*/ // for( int nCount=dwArray.GetSize()-1; nCount >= 0/*nCount > nMaxDaysCalculate*/; nCount -- ) for( int nCount=0; nCount < dwArray.GetSize(); nCount ++ ) { CSPTime sptime; if( sptime.FromStockTimeDay( dwArray[nCount] ) ) { CSPTime time( sptime.GetTime() ); CString strItem = AfxGetTimeString( time.GetTime(), szDateComboBoxTimeFormat, TRUE ); if( strItem.GetLength() > 0 ) { int nIndex = AddString( strItem ); SetItemData( nIndex, dwArray[nCount] ); } } } CString strNow; strNow.LoadString( IDS_DATECOMBOBOX_NOW ); nIndex = AddString( strNow ); SetItemData( nIndex, -1 ); SetCurSel( nIndex ); return TRUE; }
CDownloadDlg::CDownloadDlg(CWnd* pParent /*=NULL*/) : CXFDialog(CDownloadDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDownloadDlg) m_tmDayFrom = 0; m_tmDayTo = 0; m_tmMin5From = 0; m_tmMin5To = 0; //}}AFX_DATA_INIT m_pDownloadInfo = NULL; m_bDBModified = FALSE; CSPTime tmLatestOld = 0; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) ) m_netdb.GetTimeLocalRange( &tmLatestOld, NULL, NULL ); m_tmLatestOld = tmLatestOld.GetTime(); m_bInitDownloadTime = FALSE; m_bAutoRun = FALSE; m_bReportFinished = TRUE; }
void DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, CSPTime& value) { CTime tm = value.GetTime(); DDX_DateTimeCtrl(pDX, nIDC,tm); value = tm.GetTime(); }
BOOL CDownloadDlg::OnInitDialog() { CXFDialog::OnInitDialog(); // TODO: Add extra initialization here m_staticRefreshServer.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW); m_staticStatus.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW); m_ctrlProgress.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW); m_btnStopRefresh.EnableWindow( FALSE ); m_btnStop.EnableWindow( FALSE ); InitComboServers(); m_ctrlProgress.SetRange( 0, STKLIB_MAX_PROGRESS ); m_ctrlProgress.SetPos( 0 ); m_btnCheckReport.SetCheck( AfxGetStkReceiver().NetEngineIsWorking() ); m_btnCheckReport.EnableWindow( AfxGetStkReceiver().NetEngineIsWorking() ); m_btnCheckDay.SetCheck( TRUE ); // Set Time CSPTime tmCurrent = CSPTime::GetCurrentTime(); if( tmCurrent.GetHour() < 15 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetMonth() == 1 && tmCurrent.GetDay() == 1 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetMonth() == 5 && tmCurrent.GetDay() == 1 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetMonth() == 10 && tmCurrent.GetDay() == 1 ) tmCurrent -= CSPTimeSpan(1,0,0,0); if( tmCurrent.GetDayOfWeek() == 1 ) tmCurrent -= CSPTimeSpan(2,0,0,0); if( tmCurrent.GetDayOfWeek() == 7 ) tmCurrent -= CSPTimeSpan(1,0,0,0); m_tmDayFrom = m_netdb.GetTimeInitial().GetTime(); m_tmDayTo = tmCurrent; m_tmMin5From = m_tmMin5To = tmCurrent; CSPTime tmLatest; if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) ) { CString strTimeLatest = (LPCTSTR)AfxGetTimeString( tmLatest.GetTime(), "%Y-%m-%d", TRUE ); //tmLatest.Format( "%Y-%m-%d,%A" ); m_staticLatest.SetWindowText( strTimeLatest ); m_tmDayFrom = CSPTime(tmLatest.GetTime()) + CSPTimeSpan(1,0,0,0 ); if( m_tmDayFrom.GetMonth() == 1 && m_tmDayFrom.GetDay() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetMonth() == 5 && m_tmDayFrom.GetDay() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetMonth() == 10 && m_tmDayFrom.GetDay() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetDayOfWeek() == 1 ) m_tmDayFrom += CSPTimeSpan(1,0,0,0); if( m_tmDayFrom.GetDayOfWeek() == 7 ) m_tmDayFrom += CSPTimeSpan(2,0,0,0); if( m_tmDayFrom > m_tmDayTo ) m_tmDayTo = m_tmDayFrom; } // Initial Download if( m_bInitDownloadTime ) { m_tmDayFrom = m_tmDLBegin; m_tmDayTo = m_tmDLEnd; } UpdateData( FALSE ); if( m_bAutoRun ) { UpdateWindow( ); ShowWindow( SW_SHOW ); OnOK( ); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CSListView::ExportList( CListExportDlg * pDlg ) { ASSERT( pDlg ); if( NULL == pDlg ) return; int nColumnCount = m_Grid.GetColumnCount(); ASSERT( nColumnCount > 0 ); if( nColumnCount <= 0 ) return; CStockContainer & container = AfxGetSListStockContainer(); // Get Current StockList Time DWORD dwDate; CSPTime sptime; CSPTime time; if( container.GetCurrentType( NULL, NULL, &dwDate ) && (-1 != dwDate || container.GetLatestTechDate(&dwDate)) && sptime.FromStockTimeDay( dwDate ) ) time = CSPTime( sptime.GetTime() ); // Set Column CStringArray astrColumn; CUIntArray anWidth; CUIntArray anParams; for(int nCol = 0; nCol < nColumnCount; nCol ++ ) { astrColumn.Add( m_Grid.GetItemText(0,nCol) ); anWidth.Add( m_Grid.GetColumnWidth(nCol) ); anParams.Add( m_Grid.GetItemData(0,nCol) ); } if( ! pDlg->ExportBegin( astrColumn, anWidth, TRUE ) || ! pDlg->ExportOpenTable( time, TRUE ) ) return; container.Lock(); // set Item int nCount = 0, nTotalCount = 0; if( pDlg->m_bItemAll ) { nTotalCount = m_Grid.GetRowCount()-1; pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } else if( pDlg->m_bItemSelected ) { nTotalCount = m_Grid.GetSelectedCount(); pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=1; nRow<m_Grid.GetRowCount(); nRow++ ) { BOOL bSelected = FALSE; for( nCol=0; nCol<m_Grid.GetColumnCount(); nCol ++ ) bSelected |= ( m_Grid.GetItemState(nRow,nCol) & GVIS_SELECTED ); if( !bSelected ) continue; CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } else if( pDlg->m_bItemDefine ) { nTotalCount = min(m_Grid.GetRowCount()-1,pDlg->m_nItemEnd) - max(1,pDlg->m_nItemBegin) + 1; pDlg->SetProgressRange( 0, nTotalCount ); for( int nRow=max(1,pDlg->m_nItemBegin); nRow<=min(m_Grid.GetRowCount()-1,pDlg->m_nItemEnd); nRow++ ) { CStringArray astrItemText; astrItemText.SetSize( 0, nColumnCount+1 ); LPARAM id = m_Grid.GetItemData(nRow,0); CStockInfo & info = container.GetStockInfoByID(id); for(nCol=0; nCol<anParams.GetSize(); nCol++ ) { astrItemText.Add( m_Grid.GetItemText( nRow, nCol ) ); } pDlg->ExportAddItem( astrItemText ); nCount ++; pDlg->SetProgress( nCount ); } } container.UnLock(); pDlg->ExportFinish( ); }