1.技术指标的计算
技术指标的计算在StkLib库中。
Technique.h 技术指标类定义
分别由下面的文件来实现。
TechCL.cpp 自有技术指标
TechEnergy.cpp 能量类技术指标
TechKLine.cpp K线叠加类技术指标
Technique.cpp 技术指标基类
TechSwing.cpp 摆动类技术指标
TechTrend.cpp 趋势类技术指标
TechOther.cpp 其它类技术指标
2.画技术指标
G:\stock\TskingVS2019\src\Client\StkUI\View\DrawTech.cpp
此文件是CStockGraph的类实现的一部分,专门负责画技术指标。
在CStockGraph类中,定义的一个技术指标的变量CTechParameters m_techparam; // 指标参数
void CStockGraph::DrawTechMA( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax )
{
CKData & kdata = m_CurStock.GetKData(m_nCurKType);
m_techparam.ma.AttachParameters( AfxGetProfile().GetTechParameters().ma );
DrawTechUtil( pDC, rect, bDrawTitle, dMin, dMax, STT_MA, &(m_techparam.ma), &kdata, m_techparam.ma.m_adwMADays );
}
第二部分 技术指标对象的创建和使用
2.1 技术指标变量的声明
G:\stock\TskingVS2019\src\Client\StkLib\Include\Profile.h
技术指标变量的声明为硬编码
/////////////////////////////////////////////////////////////////////////////
// CTechParameters
/***
技术指标参数,包含所有技术指标的参数设定
*/
class STKLIB_API CTechParameters
{
public:
CTechParameters( );
void Clear( );
void SetKData( CKData * pKData );
void SetDefaultParametersAll( );
BOOL FindParameters( UINT nTech, CTechnique * pTech );
void Serialize( CSPArchive &ar );
CMA ma;
2.2 技术指标对象的创建
G:\stock\TskingVS2019\src\Client\StkLib\Src\Technique.cpp
根据技术指标对象的ID号来创建
// 创建新的技术指标对象
CTechnique * CTechnique::CreateTechnique( UINT nTech, CKData * pKData )
{
CTechnique * pTech = NULL;
switch( nTech )
{
case STT_MA: pTech = new CMA( pKData ); break;
case STT_BBI: pTech = new CBBI( pKData ); break;
case STT_BOLL: pTech = new CBOLL( pKData ); break;
case STT_PV: pTech = new CPV( pKData ); break;
case STT_SAR: pTech = new CSAR( pKData ); break;
case STT_DJ: pTech = new CDJ( pKData ); break;
case STT_CW: pTech = new CCW( pKData ); break;
2.3 技术指标的自动创建
G:\stock\TskingVS2019\src\Client\StkLib\Src\Strategy.cpp
/////////////////////////////////////////////////////////////////////////
// Cache
// 准备数据,读取K线数据,长周期K线数据,生成技术指标对象
BOOL CStrategy::PrepareData( SIMULATION_CALLBACK fnCallback, void * cookie )
{
if( m_techstocks.GetSize() == m_stocks.GetSize() )
return TRUE;
ClearCache( );
// m_techstocks.m_kdataIndex m_techstocks.m_infoIndex
if( m_opparam.m_bIndexTrend ) // 指数K线数据
{
CStockInfo infoIndex;
if( AfxGetStockContainer().GetStockInfo( STKLIB_CODE_MAIN, &infoIndex ) )
{
m_techstocks.m_infoIndex = infoIndex;
CStock stockIndex;
stockIndex.SetStockInfo( &infoIndex );
stockIndex.SetDatabase( &AfxGetDB() );
stockIndex.PrepareData( CStock::dataK, m_opparam.m_nKTypeIndex );
CKData & kdataIndex = stockIndex.GetKData(m_opparam.m_nKTypeIndex);
kdataIndex.SetMaindataType( m_opparam.m_nMaindataType );
m_techstocks.m_kdataIndex = kdataIndex;
// m_techstocks.m_techsIndex
for( int j=0; j<m_anTechsIndexTrend.GetSize(); j++ ) //创建技术指标对象
{
CTechnique * pTech = CTechnique::CreateTechnique( m_anTechsIndexTrend[j], &(m_techstocks.m_kdataIndex) );
m_paramIndexTrend.FindParameters( m_anTechsIndexTrend[j], pTech );
m_techstocks.m_techsIndex.Add( pTech );
}
}
}
G:\stock\TskingVS2019\src\Client\StkUI\View\SelectorView.cpp
/智能选股按钮
void CSelectorView::OnRunselector()
{
if( kdata.GetSize() < 1 )
continue;
CTechnique * pTech = CTechnique::CreateTechnique( nTech, &kdata ); //创建技术指标
if( NULL == pTech )
continue;
第三部份 技术指标的应用
1.鼠标右键弹出框
技术指标弹出框
根据视图界面来确定加载哪些种类的技术指标
G:\stock\TskingVS2019\src\Client\StkUI\MainFrm.cpp
//右键弹出菜单初始化 by freeman
void CMainFrame::InitMenuPopup(CMenu* pPopupMenu)
{
if (NULL == pPopupMenu || NULL == pPopupMenu->GetSafeHmenu())
return;
for (UINT nMenu = 0; nMenu < pPopupMenu->GetMenuItemCount(); nMenu++)
{
else if (ID_VIEW_TECHCLK == pPopupMenu->GetMenuItemID(nMenu)) //日K线策略为王指标加载处、右键弹出菜单初始化
{
CView* pView = AfxGetStaticDoc()->GetActiveView();
UINT nFlags = ((pView && pView->IsKindOf(RUNTIME_CLASS(CGraphView))) ? MF_BYPOSITION | MF_STRING : MF_BYPOSITION | MF_STRING | MF_GRAYED);
pPopupMenu->DeleteMenu(nMenu, MF_BYPOSITION);
for (UINT nID = STT_CLK_MAX; nID >= STT_CLK_MIN; nID--)
{
UINT nFlagsLocal = nFlags;
if (AfxGetProfile().IsGraphTechShow(nID)) nFlagsLocal |= MF_CHECKED;
pPopupMenu->InsertMenu(nMenu, nFlagsLocal, ID_VIEW_TECH_START + nID, AfxGetSTTFullName(nID));
}
}
2.主菜单-技术指标
G:\stock\TskingVS2019\src\Client\StkUI\StkUI.rc
IDR_MENU_MAINBARTECH MENU
BEGIN
POPUP "Tech"
BEGIN
POPUP "K线图指标显示(&K)" //主菜单 K线图指标显示
BEGIN
MENUITEM "K线图指标", ID_VIEW_TECHKLINE
END
POPUP "趋势类指标显示(&Q)"
BEGIN
MENUITEM "趋势类", ID_VIEW_TECHTREND
G:\stock\TskingVS2019\src\Client\StkUI\resource.h
#define ID_VIEW_TECHKLINE 33275 //K线图指标显示 id定义