double CSPTime::GetTimeTradeRatioOfOneDay( CSPTime tTradeLatestDay, CSPTime tNow ) { DWORD dwSecOrder = tNow.ToStockTimeSecOrder(); if( 0 == dwSecOrder ) return 1; if( tTradeLatestDay.GetYear() == tNow.GetYear() && tTradeLatestDay.GetMonth() == tNow.GetMonth() && tTradeLatestDay.GetDay() == tNow.GetDay() ) return ((double)dwSecOrder) / GetTradeSecondsOfOneDay(); return 1; }
/*** 手动改变拥有股票数量 */ 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::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 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; } }
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; }
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 }
DWORD CSPTime::GetStockTimeNext( DWORD dwDate, int ktype, DWORD dwYear ) { CSPTime sptime; if( ktype == ktypeDay ) { if( !sptime.FromStockTimeDay( dwDate ) ) return -1; if( 6 == sptime.GetDayOfWeek() ) // Friday sptime += CSPTimeSpan(3,0,0,0); else sptime += CSPTimeSpan(1,0,0,0); return sptime.ToStockTimeDay(); } else if( ktype == ktypeWeek ) { if( !sptime.FromStockTimeDay( dwDate ) ) return -1; sptime += CSPTimeSpan(7,0,0,0); return sptime.ToStockTimeDay(); } else if( ktype == ktypeMonth ) { if( !sptime.FromStockTimeDay( dwDate ) ) return -1; int nYearNew = sptime.GetYear(); int nMonthNew = sptime.GetMonth(); nYearNew = ( nMonthNew >= 12 ? nYearNew+1 : nYearNew ); nMonthNew = ( nMonthNew >= 12 ? 1 : nMonthNew+1 ); CSPTime sptime2( nYearNew, nMonthNew, sptime.GetDay(), sptime.GetHour(),sptime.GetMinute(), sptime.GetSecond() ); if( 6 == sptime2.GetDayOfWeek() ) // Friday sptime2 += CSPTimeSpan(3,0,0,0); else sptime2 += CSPTimeSpan(1,0,0,0); return sptime2.ToStockTimeDay(); } else if( ktype == ktypeMin5 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( sptime.GetHour() == 11 && sptime.GetMinute() >= 25 ) sptime += CSPTimeSpan(0,1,35,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 55 ) sptime += CSPTimeSpan(0,18,35,0); else sptime += CSPTimeSpan(0,0,5,0); return sptime.ToStockTimeMin(); } else if( ktype == ktypeMin15 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( sptime.GetHour() == 11 && sptime.GetMinute() >= 15 ) sptime += CSPTimeSpan(0,1,45,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 45 ) sptime += CSPTimeSpan(0,18,45,0); else sptime += CSPTimeSpan(0,0,15,0); return sptime.ToStockTimeMin(); } else if( ktype == ktypeMin30 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( sptime.GetHour() == 11 && sptime.GetMinute() >= 0 ) sptime += CSPTimeSpan(0,2,0,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 30 ) sptime += CSPTimeSpan(0,19,0,0); else sptime += CSPTimeSpan(0,0,30,0); return sptime.ToStockTimeMin(); } else if( ktype == ktypeMin60 ) { if( !sptime.FromStockTimeMin( dwDate ) ) return -1; if( (sptime.GetHour() == 10 && sptime.GetMinute() >= 30) || sptime.GetHour() == 11 ) sptime += CSPTimeSpan(0,2,30,0); else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 0 ) sptime += CSPTimeSpan(0,19,30,0); else sptime += CSPTimeSpan(0,1,0,0); return sptime.ToStockTimeMin(); } else { ASSERT( FALSE ); return -1; } }