コード例 #1
0
ファイル: SpTime.cpp プロジェクト: amikey/tradingstrategyking
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;
}
コード例 #2
0
/***
	手动改变拥有股票数量
*/
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;
	}
}
コード例 #3
0
/***
	手动移除拥有股票
*/
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 );
	}
}
コード例 #4
0
/***
	手动加入拥有股票
*/
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;
	}
}
コード例 #5
0
ファイル: SpTime.cpp プロジェクト: amikey/tradingstrategyking
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;
}
コード例 #6
0
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
}
コード例 #7
0
ファイル: SpTime.cpp プロジェクト: amikey/tradingstrategyking
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;
	}
}