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

📄 drawtech.cpp

📁 股软 通达信行情接收接口, 包括美元汇率
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			if( rect.left+m_nWidthSubtitle+m_nWidthParameter < rect.right )
				pDC->TextOut( rect.left+m_nWidthSubtitle, rect.top+1, strText );
		}
		pDC->SelectObject( pOldFont );
	}

	// Draw
	int	yNow;
	BOOL	bHasLast = FALSE;
	double	dNow = dMin;
	int	yZero	=	int( rect.bottom - (rect.Height()-m_nHeightSubtitle) * (0-dMin) / (dMax-dMin) );
	for( int nIndex=m_nIndexStart; nIndex<=m_nIndexEnd; nIndex++ )
	{
		// Prepare Rect 
		CRect	rectK;
		long	xMedium	=	0;
		if( !GetOneKLineRect( nIndex, &rectK, NULL, NULL, &xMedium ) )
			continue;

		// Draw
		if( m_techparam.cv.Calculate( &dNow, nIndex, bHasLast ) )
		{
			yNow	=	int( rect.bottom - (rect.Height()-m_nHeightSubtitle) * (dNow  - dMin) / (dMax-dMin) );
			if( bHasLast )
			{
				if( yNow > rect.bottom || yNow < rect.top+m_nHeightSubtitle )
					continue;
				
				CPen	pen( PS_SOLID, 1, (yNow-yZero)<0 ? clrRise : clrFall );
				CPen * pOldPen = pDC->SelectObject( &pen );
				pDC->MoveTo( xMedium, yZero );
				pDC->LineTo( xMedium, yNow );
				pDC->SelectObject( pOldPen );
			}
			bHasLast	=	TRUE;
		}
	}
}

void CStockGraph::DrawTechARBR( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.arbr.AttachParameters( AfxGetProfile().GetTechParameters().arbr );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.arbr.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 0 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_ARBR, &(m_techparam.arbr), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"AR", "BR" );
}

void CStockGraph::DrawTechCR( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.cr.AttachParameters( AfxGetProfile().GetTechParameters().cr );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.cr.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 0 ) )
		return;
	
	DrawTechUtil5(	pDC, rect, bDrawTitle, dMin, dMax, STT_CR, &(m_techparam.cr), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					AfxGetProfile().GetColor(CColorClass::clrLine3),
					AfxGetProfile().GetColor(CColorClass::clrLine4),
					AfxGetProfile().GetColor(CColorClass::clrLine5),
					"CR", "A", "B", "C", "D" );
}

void CStockGraph::DrawTechOSC( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.osc.AttachParameters( AfxGetProfile().GetTechParameters().osc );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.osc.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_OSC, &(m_techparam.osc), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"OSC", "MA" );
}

void CStockGraph::DrawTechUOS( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.uos.AttachParameters( AfxGetProfile().GetTechParameters().uos );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.uos.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_UOS, &(m_techparam.uos), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"UOS", "MA" );
}

void CStockGraph::DrawTechMAOSC( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.maosc.AttachParameters( AfxGetProfile().GetTechParameters().maosc );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.maosc.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_MAOSC, &(m_techparam.maosc), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"MAOSC", "MA" );
}

void CStockGraph::DrawTech3_6BIAS( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.bias36.AttachParameters( AfxGetProfile().GetTechParameters().bias36 );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.bias36.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil1(	pDC, rect, bDrawTitle, dMin, dMax, STT_36BIAS, &(m_techparam.bias36), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1), drawtechtype_line );
}

void CStockGraph::DrawTechDPO( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.dpo.AttachParameters( AfxGetProfile().GetTechParameters().dpo );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.dpo.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_DPO, &(m_techparam.dpo), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"DPO", "MA" );
}

void CStockGraph::DrawTechKST( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.kst.AttachParameters( AfxGetProfile().GetTechParameters().kst );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.kst.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_KST, &(m_techparam.kst), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"KST", "MA" );
}

void CStockGraph::DrawTechREI( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.rei.AttachParameters( AfxGetProfile().GetTechParameters().rei );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.rei.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil1(	pDC, rect, bDrawTitle, dMin, dMax, STT_REI, &(m_techparam.rei), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1), drawtechtype_line );
}

void CStockGraph::DrawTechDMKI( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.dmki.AttachParameters( AfxGetProfile().GetTechParameters().dmki );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.dmki.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil1(	pDC, rect, bDrawTitle, dMin, dMax, STT_DMKI, &(m_techparam.dmki), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1), drawtechtype_line );
}

void CStockGraph::DrawTechPCNT( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.pcnt.AttachParameters( AfxGetProfile().GetTechParameters().pcnt );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.pcnt.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_PCNT, &(m_techparam.pcnt), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"PCNT", "MA" );
}

void CStockGraph::DrawTechHLC( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.hlc.AttachParameters( AfxGetProfile().GetTechParameters().hlc );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.hlc.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_HLC, &(m_techparam.hlc), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"HLC", "MA" );
}

void CStockGraph::DrawTechCDP( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.cdp.AttachParameters( AfxGetProfile().GetTechParameters().cdp );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.cdp.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil4(	pDC, rect, bDrawTitle, dMin, dMax, STT_CDP, &(m_techparam.cdp), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					AfxGetProfile().GetColor(CColorClass::clrLine3),
					AfxGetProfile().GetColor(CColorClass::clrLine4),
					"AH", "NH", "AL", "NL" );
}

void CStockGraph::DrawTechASI( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.asi.AttachParameters( AfxGetProfile().GetTechParameters().asi );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.asi.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 0 ) )
		return;
	
	DrawTechUtil1(	pDC, rect, bDrawTitle, dMin, dMax, STT_ASI, &(m_techparam.asi), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1), drawtechtype_line );
}

void CStockGraph::DrawTechATR( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.atr.AttachParameters( AfxGetProfile().GetTechParameters().atr );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.atr.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	DrawTechUtil1(	pDC, rect, bDrawTitle, dMin, dMax, STT_ATR, &(m_techparam.atr), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1), drawtechtype_line );
}

void CStockGraph::DrawTechCYO( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.cyo.AttachParameters( AfxGetProfile().GetTechParameters().cyo );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.cyo.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 0 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_CYO, &(m_techparam.cyo), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"CYO", "MA");
}

void CStockGraph::DrawTechDCYO( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.dcyo.AttachParameters( AfxGetProfile().GetTechParameters().dcyo );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.dcyo.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 0 ) )
		return;
	
	DrawTechUtil2(	pDC, rect, bDrawTitle, dMin, dMax, STT_DCYO, &(m_techparam.dcyo), &kdata,
					AfxGetProfile().GetColor(CColorClass::clrLine1),
					AfxGetProfile().GetColor(CColorClass::clrLine2),
					"DCYO", "MA");
}

void CStockGraph::DrawTechHSL( CDC * pDC, CRect rect, BOOL bDrawTitle )
{
	CHECK_NODATATODRAW
	DECLARE_COLOR_DEFINATION

	// Prepare
	CKData	& kdata	=	m_CurStock.GetKData(m_nCurKType);
	m_techparam.hsl.AttachParameters( AfxGetProfile().GetTechParameters().hsl );
	m_techparam.hsl.m_stockinfo	=	m_CurStock.GetStockInfo();
	m_techparam.volume.AttachParameters( AfxGetProfile().GetTechParameters().volume );

	double	dMin = 0, dMax = 0;
	if( !m_techparam.hsl.GetMinMaxInfo( m_nIndexStart, m_nIndexEnd, &dMin, &dMax )
		|| !DrawAxis( pDC, rect, m_nHeightSubtitle, 5, dMin, dMax, FALSE, TRUE, 2 ) )
		return;
	
	// Draw Title
	if( bDrawTitle )
	{
		DrawTechTitle( pDC, rect.left+5, rect.top+1, AfxGetSTTName(STT_HSL), TA_LEFT | TA_TOP, 14, clrBK, clrTitle );

		CFont	* pOldFont	=	AfxSelectDCFont( pDC, 12 );
		pDC->SetBkColor( clrBK );
		int	nIndexParam	=	( m_nIndexCurrent >= 0 ? m_nIndexCurrent : kdata.GetSize()-1 );
		double	dParam;
		CString	strText;
		for( int k=0; k<m_techparam.volume.m_adwMADays.GetSize(); k++ )
		{
			if( m_techparam.hsl.Calculate( &dParam, nIndexParam, m_techparam.volume.m_adwM

⌨️ 快捷键说明

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