⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simuview.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
	// SellLimit
	opparam.m_nSellLimit	=	m_comboSellLimit.GetItemData(m_comboSellLimit.GetCurSel());

	// StoreDiv
	opparam.m_nStoreDiv		=	m_comboStoreDiv.GetItemData(m_comboStoreDiv.GetCurSel());

	// Buy and Sell Multi
	if( IsNumber(m_strBuyMulti,FALSE) )
		opparam.m_dBuyMulti		=	atof(m_strBuyMulti) / 100.;
	if( IsNumber(m_strSellMulti,FALSE) )
		opparam.m_dSellMulti	=	atof(m_strSellMulti) / 100.;

	// Start Amount
	opparam.m_nStartAmount	=	m_nStartAmount*10000;

	// Time
	m_tmBegin	=	CSPTime(m_tmBegin.GetYear(),m_tmBegin.GetMonth(),m_tmBegin.GetDay(),0,0,0,0);
	m_tmEnd		=	CSPTime(m_tmEnd.GetYear(),m_tmEnd.GetMonth(),m_tmEnd.GetDay(),23,59,59,0);
	opparam.m_atmBegin.RemoveAll();
	opparam.m_atmEnd.RemoveAll();
	opparam.m_atmBegin.Add( CSPTime(m_tmBegin.GetTime()) );
	opparam.m_atmEnd.Add( CSPTime(m_tmEnd.GetTime()) );

	// TIMEZONES

	if( !opparam.IsValid() || !IsNumber(m_strBuyMulti,FALSE) || !IsNumber(m_strSellMulti,FALSE) )
	{
		CString	strMsg;
		strMsg.LoadString( IDS_SIMUVIEW_INVALIDDATA );
		strMsg	=	(LPCTSTR)pStrategy->GetName() + CString("  ") + strMsg;
		if( IDYES == AfxMessageBox( strMsg, MB_YESNO ) )
		{
			if( !IsNumber(m_strBuyMulti,FALSE) )
				opparam.m_dBuyMulti	=	0;
			if( !IsNumber(m_strSellMulti,FALSE) )
				opparam.m_dSellMulti	=	0;
			opparam.SetDefaultOfInvalidMember( );
			pStrategy->DoFileSave( );
			LoadFromStrategy( );
			return TRUE;
		}
		return FALSE;
	}
	else
	{
		pStrategy->DoFileSave( );
		return TRUE;
	}
}

void CSimuView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSimuView)
	DDX_Control(pDX, IDC_SELLMULTI, m_editSellMulti);
	DDX_Control(pDX, IDC_ADVANCED, m_btnAdvanced);
	DDX_Control(pDX, IDC_STOCKTECH, m_editStockTech);
	DDX_Control(pDX, IDC_SELLLOGIC, m_comboSellLogic);
	DDX_Control(pDX, IDC_BUYLOGIC, m_comboBuyLogic);
	DDX_Control(pDX, IDC_STOP, m_btnStop);
	DDX_Control(pDX, IDC_STARTAMOUNT, m_editStartAmount);
	DDX_Control(pDX, IDC_STATICYIELD2, m_staticYield2);
	DDX_Control(pDX, IDC_STATICYIELD, m_staticYield);
	DDX_Control(pDX, IDC_TIME_BEGIN, m_tmctrlBegin);
	DDX_Control(pDX, IDC_TIME_END, m_tmctrlEnd);
	DDX_Control(pDX, IDC_STOREDIV, m_comboStoreDiv);
	DDX_Control(pDX, IDC_SELLLIMIT, m_comboSellLimit);
	DDX_Control(pDX, IDC_BUYMULTI, m_editBuyMulti);
	DDX_Control(pDX, IDC_BUYLIMIT, m_comboBuyLimit);
	DDX_Control(pDX, IDC_MAINDATATYPE, m_comboMaindataType);
	DDX_Control(pDX, IDC_STATICWARNING, m_staticWarning);
	DDX_Control(pDX, IDC_STATICTITLE, m_staticTitle);
	DDX_Control(pDX, IDC_REALOP, m_btnRealOp);
	DDX_Control(pDX, IDC_SETRULE, m_btnSetRule);
	DDX_Control(pDX, IDC_SETRATE, m_btnSetRate);
	DDX_Control(pDX, IDC_SETPRPT, m_btnSetPrpt);
	DDX_Control(pDX, IDC_REPORT, m_btnReport);
	DDX_Control(pDX, IDC_SELECTSTK, m_btnSelectStk);
	DDX_Control(pDX, IDC_START, m_btnStart);
	DDX_Control(pDX, IDC_PROGRESS, m_progress);
	DDX_Control(pDX, IDC_KTYPE, m_comboKType);
	DDX_Text(pDX, IDC_BUYMULTI, m_strBuyMulti);
	DDX_DateTimeCtrl(pDX, IDC_TIME_BEGIN, m_tmBegin);
	DDX_DateTimeCtrl(pDX, IDC_TIME_END, m_tmEnd);
	DDX_Text(pDX, IDC_STARTAMOUNT, m_nStartAmount);
	DDX_Text(pDX, IDC_SELLMULTI, m_strSellMulti);
	//}}AFX_DATA_MAP
}

BOOL CSimuView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CSimuView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	// GetParentFrame()->RecalcLayout();
	// ResizeParentToFit();

	// TODO: Add extra initialization here
	OnActiveStrategyChanged( );
}

void CSimuView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
	if( UPDATE_HINT_SIMUVIEW != lHint && UPDATE_HINT_SIMUVIEW_REREALRUN != lHint )
		return;
	if( IsWindowVisible() )
		SetFocus( );

	LoadFromStrategy( );

	if( m_pStrategy )
	{
		if( UPDATE_HINT_SIMUVIEW_REREALRUN == lHint )
		{
			CWaitDlg	wait( AfxGetMainWnd(), FALSE );
			wait.SetProgressRange( 0, STRATEGY_MAX_PROGRESS );

			m_pStrategy->ClearCache();
			m_pStrategy->RealRun( RealRunCallback, wait.GetSafeHwnd() );

			wait.DestroyWindow();
		}

		if( m_pStrategy->RealGetNextOp().GetSize() > 0 )
		{
			CString	strWarning;
			strWarning.LoadString( IDS_SIMUVIEW_REALHASNEXTOP );
			m_staticWarning.SetWindowText( strWarning );
		}
		else
			m_staticWarning.SetWindowText( "" );
	}
}

/////////////////////////////////////////////////////////////////////////////
// CSimuView diagnostics

#ifdef _DEBUG
void CSimuView::AssertValid() const
{
	CFormView::AssertValid();
}

void CSimuView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSimuView message handlers

int CSimuView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	SetTimer( SIMUVIEW_TIMER_WARNING, 250, NULL );
	return 0;
}

void CSimuView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if( SIMUVIEW_TIMER_WARNING == nIDEvent )
	{
		// 显示当前实战操作是否有操作
		static int timercount	=	0;
		timercount	++;
		if( timercount % 4 == 0 )
		{
			m_staticWarning.SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE );
		}
		else
		{
			m_staticWarning.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE );
		}
	}
	
	CFormView::OnTimer(nIDEvent);
}

void CSimuView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
{
	// TODO: Add your specialized code here and/or call the base class
	CFormView::OnActivateView(bActivate, pActivateView, pDeactiveView);

	if( bActivate )
		EnableControls( );
}

void CSimuView::OnSize(UINT nType, int cx, int cy) 
{
	// CSize	sizeTotal( cx, cy );
	// SetScaleToFitSize( sizeTotal );

	CFormView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
}

void CSimuView::OnSetFocus(CWnd* pOldWnd) 
{
	CFormView::OnSetFocus(pOldWnd);
	
	// TODO: Add your message handler code here
}

LRESULT CSimuView::OnGetViewTitle(WPARAM wParam, LPARAM lParam)
{
	CString	strTitle;
	strTitle.LoadString( IDS_TITLE_SIMUVIEW );

	lstrcpyn((LPTSTR)lParam, (LPCTSTR)strTitle, wParam);
	if ((int)wParam > strTitle.GetLength())
		wParam = strTitle.GetLength();
	return wParam;
}

LRESULT CSimuView::OnGetViewCmdid(WPARAM wParam, LPARAM lParam)
{
	if( lParam )
		*((LPARAM *)lParam)	=	ID_VIEW_SIMU;
	return 0L;
}

LRESULT CSimuView::OnCanCloseView(WPARAM wParam, LPARAM lParam)
{
	if( lParam )
		*((BOOL *)lParam)	=	CanChangeActiveStrategy( );

	return 0L;
}

LRESULT CSimuView::OnColorChange(WPARAM wParam, LPARAM lParam)
{
	Invalidate( );
	return 0L;
}

HBRUSH CSimuView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	if( pDC )
		pDC->SetTextColor( AfxGetProfile().GetColor( CColorClass::clrSimuText ) );
	if( nCtlColor == CTLCOLOR_DLG
		|| nCtlColor == CTLCOLOR_STATIC
		|| nCtlColor == CTLCOLOR_MSGBOX )
	{
		if( nCtlColor == CTLCOLOR_STATIC )
			pDC->SetBkMode( TRANSPARENT );

		static CBrush brushBK;
		static COLORREF	clrBKLast	=	RGB(255,255,255);
		COLORREF	clrBKNow	=	AfxGetProfile().GetColor( CColorClass::clrSimuBK );
		if( NULL == brushBK.GetSafeHandle() || clrBKLast != clrBKNow )
		{
			brushBK.DeleteObject( );
			VERIFY( brushBK.CreateSolidBrush( clrBKNow ) );
		}
		clrBKLast	=	clrBKNow;
		return (HBRUSH)brushBK.GetSafeHandle();
	}
	return CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
}

/***
	设定策略属性
*/
void CSimuView::OnSetprpt() 
{
	if( !StoreToStrategy( ) )
		return;

	::PostMessage( AfxGetMainFrame()->GetSafeHwnd(), WM_COMMAND, ID_STRATEGY_PROPERTY, 0 );
}

/***
	选择策略备选股票
*/
void CSimuView::OnSelectstk() 
{
	if( !StoreToStrategy( ) )
		return;

	::PostMessage( AfxGetMainFrame()->GetSafeHwnd(), WM_COMMAND, ID_STRATEGY_STOCKS, 0 );
}

/***
	设定策略指标
*/
void CSimuView::OnSetrule() 
{
	if( !StoreToStrategy( ) )
		return;

	::PostMessage( AfxGetMainFrame()->GetSafeHwnd(), WM_COMMAND, ID_STRATEGY_SETRULE, 0 );
}

/***
	设定交易费用
*/
void CSimuView::OnSetrate() 
{
	if( !StoreToStrategy( ) )
		return;

	::PostMessage( AfxGetMainFrame()->GetSafeHwnd(), WM_COMMAND, ID_STRATEGY_SETRATE, 0 );
}

/***
	显示策略模拟结果报表
*/
void CSimuView::OnReport() 
{
	if( !StoreToStrategy( ) )
		return;

	::PostMessage( AfxGetMainFrame()->GetSafeHwnd(), WM_COMMAND, ID_STRATEGY_REPORT, 0 );
}

/***
	显示策略实战操作
*/
void CSimuView::OnRealOp() 
{
	if( !StoreToStrategy( ) )
		return;

	::PostMessage( AfxGetMainFrame()->GetSafeHwnd(), WM_COMMAND, ID_STRATEGY_REALOP, 0 );
}

/***
	策略高级条件
*/
void CSimuView::OnAdvanced() 
{
	if( !StoreToStrategy( ) )
		return;

	CStrategy	*	pStrategy	=	GetStrategy( );
	if( pStrategy )
	{
		CSimuAdvancedDlg	advanced;
		advanced.SetStrategy( pStrategy );
		advanced.DoModal();
		pStrategy->DoFileSave( );
		AfxOnStrategyUpdated( pStrategy, advanced.m_bModified );
	}
}

/***
	开始模拟或者暂停模拟
*/
void CSimuView::OnStart() 
{
	if( !StoreToStrategy( ) )
		return;

	CStrategy	*	pStrategy	=	GetStrategy( );
	if( NULL == pStrategy )
		return;
	pStrategy->DoFileSave();

	m_bDisableAllControls	=	TRUE;
	EnableControls( );

	if( pStrategy->SimuIsStatusPaused() )
	{
		m_simulation.Continue( );
	}
	else if( pStrategy->SimuIsStatusRunning() )
	{
		m_simulation.Pause( );
	}
	else
	{
		m_simulation.Restart( );
	}
	
	m_bDisableAllControls	=	FALSE;
	EnableControls( );
}

/***
	停止并清楚结果
*/
void CSimuView::OnStop() 
{
	// TODO: Add your control notification handler code here
	m_bDisableAllControls	=	TRUE;
	EnableControls( );
	m_simulation.Stop( );
	m_bDisableAllControls	=	FALSE;
	EnableControls( );
}

/***
	策略模拟进度消息响应
*/
LRESULT CSimuView::OnSimulationProgress(WPARAM wParam, LPARAM lParam)
{
	if( wParam < 0 )
		wParam	=	0;
	if( wParam > STRATEGY_MAX_PROGRESS )
		wParam = STRATEGY_MAX_PROGRESS;
	if( ::IsWindow( m_progress.GetSafeHwnd() ) )
		m_progress.SetPos( wParam );

	return 1;
}

/***
	策略模拟收益消息响应
*/
LRESULT CSimuView::OnSimulationYield(WPARAM wParam, LPARAM lParam)
{
	if( lParam < 0 )
		lParam	=	0;
	if( !::IsWindow( m_staticYield2.GetSafeHwnd() ) )
		return 1;

	CString	strYieldNew;
	strYieldNew.Format( "%.2f%%", 100.*(lParam-STRATEGY_BASEF_YIELD)/STRATEGY_BASEF_YIELD );
	CString	strYieldOld;
	m_staticYield2.GetWindowText( strYieldOld );
	if( 0 != strYieldNew.Compare( strYieldOld ) )
		m_staticYield2.SetWindowText( strYieldNew );
	return 1;
}

/***
	策略模拟结束消息响应
*/
LRESULT CSimuView::OnSimulationEnd(WPARAM wParam, LPARAM lParam)
{
	BOOL	bFinished	=	wParam;
	m_simulation.OnEnd( bFinished );

	if( bFinished )
	{
		if( ::IsWindow( m_progress.GetSafeHwnd() ) )
			m_progress.SetPos( STRATEGY_MAX_PROGRESS );
	}

	EnableControls( );
	return 1;
}

/***
	策略模拟开始时间选定消息响应
*/
void CSimuView::OnCloseupTimeBegin(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CSPTime	tmOld	=	m_tmBegin;
	UpdateData( );

	if( m_tmBegin >= m_tmEnd )
	{
		AfxMessageBox( IDS_SIMUVIEW_TIMEINVALID, MB_OK|MB_ICONINFORMATION );
		m_tmBegin	=	tmOld;
	}
	if( m_tmBegin >= m_tmEnd )
		m_tmBegin	=	m_tmEnd;

	UpdateData( FALSE );
	
	*pResult = 0;
}

/***
	策略模拟结束时间选定消息响应
*/
void CSimuView::OnCloseupTimeEnd(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CSPTime	tmOld	=	m_tmEnd;
	UpdateData( );

	if( m_tmEnd < m_tmBegin )
	{
		AfxMessageBox( IDS_SIMUVIEW_TIMEINVALID, MB_OK|MB_ICONINFORMATION );
		m_tmEnd	=	tmOld;
	}
	if( m_tmEnd < m_tmBegin )
		m_tmEnd	=	m_tmBegin;

	UpdateData( FALSE );

	*pResult = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -