📄 simuview.cpp.svn-base
字号:
// 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 + -