This commit is contained in:
2013-10-20 10:04:24 +00:00
parent b7306cb084
commit d63efb5f21
5 changed files with 163 additions and 68 deletions

View File

@@ -36,8 +36,29 @@ void CCondition::Finalize()
m_arrManual.RemoveAll();
}
void CCondition::LoadSysnonyms(const CString& FileName)
{
FILE* fp = fopen(FileName.GetString(), "rt");
if(fp == NULL)
return;
m_SynonymList.clear();
char szNameFrom[100];
char szNameTo[100];
while(!feof(fp))
{
fscanf(fp, "%s %s\n", szNameFrom, szNameTo);
m_SynonymList[szNameFrom] = szNameTo;
}
fclose(fp);
}
BOOL CCondition::Refresh()
{
LoadSysnonyms("기업_동의어.txt");
if( Init_Item_Multi( m_arrTextNot, "공시_부정문구.txt" ) )
if( Init_Item_Multi( m_arrTextAnd, "공시_긍정문구.txt" ) )
if( Init_Item_Multi( m_arrNewsPlusAnd_Special, "뉴스플러스_특별용_긍정문구.txt" ) )
@@ -241,14 +262,14 @@ enum HM_CONDITION_TYPE CCondition::DetectConditionTitle( CString & strTitle, int
{
if( ! SearchNot( m_arrNewsPlusNot, strTitle ) ) // [뉴스플러스_부정문구]를 찾는다.
{
if ( SearchAnd( m_arrManual, strTitle ) ) // [뉴스플러스_수동문구]를 찾는다.
return HM_CONDITION_TYPE_MANUAL;
if( SearchAnd( m_arrNewsPlusAnd_Special, strTitle ) ) // [뉴스플러스_특별용_긍정문구]를 찾는다.
return HM_CONDITION_TYPE_SPECIAL;
if ( SearchAnd( m_arrNewsPlusAnd_Normal, strTitle ) ) // [뉴스플러스_일반용_긍정문구]를 찾는다.
return HM_CONDITION_TYPE_NORMAL;
if ( SearchAnd( m_arrManual, strTitle ) ) // [뉴스플러스_수동문구]를 찾는다.
return HM_CONDITION_TYPE_MANUAL;
}
}
else // TK, IM, 7121 공통.

View File

@@ -9,6 +9,11 @@
#pragma once
#endif // _MSC_VER > 1000
#include <map>
#include <string>
enum HM_CONDITION_TYPE
{
HM_CONDITION_TYPE_FALSE = -1,
@@ -33,6 +38,8 @@ public:
///////////////////////////////////////////////////////////
// 공시 문장분석 : 긍정/부정.
enum HM_CONDITION_TYPE DetectConditionTitle( CString & strTitle, int nSrcType );
std::map<std::string, std::string> m_SynonymList;
private:
BOOL Init_Item_Single( CStringArray &array, CString strFile );
@@ -43,7 +50,8 @@ private:
// Not 검색기능.
BOOL SearchNot( CStringArray &array, CString &strSource );
private:
void LoadSysnonyms(const CString& FileName);
CStringArray m_arrTextNot; // 공시 부정문구.
CStringArray m_arrTextAnd; // 공시 긍정문구.
@@ -53,6 +61,8 @@ private:
CStringArray m_arrNewsPlusNot; // 뉴스플러스_부정문구.
CStringArray m_arrManual; // 수동 문구.
};
#endif // !defined(AFX_CONDITION_H__44C2F7E9_C1A6_4017_9143_69C3C4FC9E54__INCLUDED_)

View File

@@ -324,6 +324,7 @@ BOOL CHookMsgDlg::OnInitDialog()
CDialog::OnInitDialog();
m_bInitSuccess = TRUE;
///////////////////////////////////////////////////////////////////
TraceMsg( "[초기화] 환경파일 검사중..." );
CFileFind _file;
@@ -1414,26 +1415,31 @@ BOOL CHookMsgDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
memset(m_szTitle, NULL, MAX_RECEIVE_LEN);
memcpy(m_szTitle, cpData.ExtraData, strlen((char*)cpData.ExtraData) );
} else {
}
else
{
DWORD dwWritten;
switch(cpData.lParam) {
switch(cpData.lParam)
{
// 시간
case 1:
memcpy(m_szWnd3_Time, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1);
m_szWnd3_Title[0] = NULL;
m_szWnd3_Name[0] = NULL;
break;
// 타이틀
case 2:
memcpy(m_szWnd3_Title, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1);
TRACE("[2]%s\n",m_szWnd3_Title);
TRACE("[2]%s(%s)\n", m_szWnd3_Title, m_szWnd3_Name);
break;
// 종목명
case 3:
TRACE("[3]%s\n",m_szWnd3_Title);
memcpy(m_szWnd3_Name, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1);
TRACE("[3]%s(%s)\n", m_szWnd3_Title, m_szWnd3_Name);
if(m_szWnd3_Name[0] != 0) {
if(m_szWnd3_Name[0] != 0)
{
WriteFile(hFile,m_szWnd3_Time,strlen(m_szWnd3_Time),&dwWritten,NULL);
WriteFile(hFile,"\n",1,&dwWritten,NULL);
WriteFile(hFile,m_szWnd3_Title,strlen(m_szWnd3_Title),&dwWritten,NULL);
@@ -1483,7 +1489,8 @@ BOOL CHookMsgDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
}
else
{
if(RetrieveNewsData()) {
if(RetrieveNewsData())
{
m_pWorkEvent2->SetEvent();
m_pWorkEvent->SetEvent();
}
@@ -1562,6 +1569,49 @@ BOOL CHookMsgDlg::_ExtractJCode( int nSrcType, CString & _strTitle, CString & st
//~!
strJCode = (LPCSTR)objStockCode->NameToCode( m_szWnd3_Name );
// 제목에서 코드 찾기
{
CString Name = "";
CString Code = "";
CString strTitleTmp = m_szWnd3_Title;
int iCommaPos = strTitleTmp.Find(",");
if(iCommaPos >= 0)
{
Name = GetLastWord(strTitleTmp.Left(iCommaPos));
}
else
{
int iSpacePos = strTitleTmp.Find(" ");
Name = strTitleTmp.Left(iSpacePos);
}
ICpStockCodePtr objStockCode;
objStockCode.CreateInstance( CLSID_CpStockCode );
Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name);
if(Code[0] != NULL)
{
strJCode = Code;
strJName = Name;
}
else if(g_Condition.m_SynonymList[Name.GetString()] != "")
{
Name = g_Condition.m_SynonymList[Name.GetString()].data();
Code = (LPCSTR)objStockCode->NameToCode((bstr_t)Name.GetString());
if(Code[0] != NULL)
{
strJCode = Code;
strJName = Name;
}
}
objStockCode.Release();
}
bRet = TRUE;
}
else if( nSrcType == UM_SRC_INFOTICKER )
@@ -1810,6 +1860,21 @@ void CHookMsgDlg::_WorkThreadProc(UINT ThreadType)
//////////////////////////////////////////////////////////////////////
// 제목만으로 조건검색을 진행함!
HM_CONDITION_TYPE ConditionType = g_Condition.DetectConditionTitle( g_strTitle, _nSourceFrom );
//////////////////////////////////////////////////////
// 종목코드 자동입력.
if( WORD_THREAD_WITH_HOGA == ThreadType && (bSuccess || InputCodeTypeStatus(_nSourceFrom)) )
{
TraceMsg( strSrc + "[종목코드 자동입력] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE );
AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) );
if( g_AppEnv.bJInputAndStop2 ) // 2003-11-15 코드삭제. 2004.4.28 추가변경.
{
OnMonitorPause();
}
}
if( ConditionType != HM_CONDITION_TYPE_FALSE )
{
try
@@ -2168,19 +2233,6 @@ _LAST_JOB_:
//////////////////////////////////////////////////////
// 무조건 한번 나온 종목은 [중복종목]에 등록함!
g_pStockData->AddRepeatedCode( g_strJCode );
//////////////////////////////////////////////////////
// 종목코드 자동입력.
if( WORD_THREAD_WITH_HOGA == ThreadType && (bSuccess || InputCodeTypeStatus(_nSourceFrom)) )
{
TraceMsg( strSrc + "[종목코드 자동입력] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE );
AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) );
if( g_AppEnv.bJInputAndStop2 ) // 2003-11-15 코드삭제. 2004.4.28 추가변경.
{
OnMonitorPause();
}
}
return;
}
@@ -2699,19 +2751,20 @@ LRESULT CHookMsgDlg::OnTickerSocketReceive(WPARAM wParam, LPARAM lClient)
return 0;
}
CString GetLastWord(const CString& strSource)
CString CHookMsgDlg::GetLastWord(const CString& strSource) const
{
CString strTmp = strSource;
int iPos = 0;
CString strRes1 = "";
CString strRes2 = "";
CString szToken = "\"\')]\t ";
strRes2 = strTmp.Tokenize(")]\t ", iPos);
strRes2 = strTmp.Tokenize(szToken, iPos);
while (strRes2 != "")
{
strRes1 = strRes2;
strRes2 = strTmp.Tokenize(")]\t ", iPos);
strRes2 = strTmp.Tokenize(szToken, iPos);
}
return strRes1;
@@ -2728,39 +2781,41 @@ bool CHookMsgDlg::RetrieveNewsData()
// 타이틀 정보 저장
if(m_nSourceFrom == UM_HOOKOK_WND1 || m_nSourceFrom == UM_HOOKOK_WND2)
{
n_strTitle = m_szTitle;
}
else if(m_nSourceFrom == UM_HOOKOK_WND3)
{
// 종목명이 없는 정보는 무시한다.
if(m_szWnd3_Name[0] == 0)
{
CString Name;
//// 종목명이 없는 정보는 무시한다.
//if(m_szWnd3_Name[0] == 0)
//{
// CString Name;
// CString strTitleTmp = m_szWnd3_Title;
//
// int iCommaPos = strTitleTmp.Find(",");
// if(iCommaPos >= 0)
// {
// Name = GetLastWord(strTitleTmp.Left(iCommaPos));
// }
// else
// {
// int iSpacePos = strTitleTmp.Find(" ");
// Name = strTitleTmp.Left(iSpacePos);
// }
CString strTitleTmp = m_szWnd3_Title;
int iCommaPos = strTitleTmp.Find(",");
if(iCommaPos >= 0)
{
Name = GetLastWord(strTitleTmp.Left(iCommaPos));
}
else
{
int iSpacePos = strTitleTmp.Find(" ");
Name = strTitleTmp.Left(iSpacePos);
}
// ICpStockCodePtr objStockCode;
// objStockCode.CreateInstance( CLSID_CpStockCode );
// CString Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name);
// objStockCode.Release();
ICpStockCodePtr objStockCode;
objStockCode.CreateInstance( CLSID_CpStockCode );
CString Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name);
objStockCode.Release();
// if(Code[0] == NULL)
// return false;
if(Code[0] == NULL)
return false;
strcpy(m_szWnd3_Title, Name.GetString());
}
n_strTitle = m_szWnd3_Title;
n_strJName = m_szWnd3_Name;
// strcpy(m_szWnd3_Name, Name.GetString());
// n_strJCode = Code;
//}
//n_strTitle = m_szWnd3_Title;
//n_strJName = m_szWnd3_Name;
}
//////////////////////////////////////////////////////////////////////
@@ -2769,13 +2824,16 @@ bool CHookMsgDlg::RetrieveNewsData()
// NewsPlus -> 7001
if(m_nSourceFrom == UM_HOOKOK_WND3 &&
g_nSourceFrom == UM_HOOKOK_WND2 &&
!n_strTitle.Compare(g_strTitle.Right(g_strTitle.GetLength()-6))) {
!n_strTitle.Compare(g_strTitle.Right(g_strTitle.GetLength()-6)))
{
TraceMsg(n_strTitle+"[NewsPLus->7001,동일뉴스 스킵]", CXListBox::Red, CXListBox::Yellow, TRUE );
return false;
// 7001 -> NewsPlus
} else if(m_nSourceFrom == UM_HOOKOK_WND2 &&
}
else if(m_nSourceFrom == UM_HOOKOK_WND2 &&
g_nSourceFrom == UM_HOOKOK_WND3 &&
!g_strTitle.Compare(n_strTitle.Right(n_strTitle.GetLength()-6))) {
!g_strTitle.Compare(n_strTitle.Right(n_strTitle.GetLength()-6)))
{
TraceMsg(n_strTitle+"[7001->NewsPLus,동일뉴스 스킵]", CXListBox::Red, CXListBox::Yellow, TRUE );
return false;
}
@@ -2787,6 +2845,11 @@ bool CHookMsgDlg::RetrieveNewsData()
// TraceMsg( "[종목코드없음] : " + g_strTitle, CXListBox::White, CXListBox::Red );
return false;
}
if(n_strJCode[0] == NULL)
return false;
dwRetEnd = ::GetTickCount();
CString strTime;

View File

@@ -17,6 +17,9 @@
#include "TickerSocket.h"
#include <map>
#include <string>
#define WM_ICON_NOTIFY WM_USER+10
@@ -112,7 +115,9 @@ private:
void HLStockWindowShow( CString strJCode, CString strExtraData = "" );
void ShowHideLockControlDlg( BOOL bShow );
CLockControlDlg * m_pLCDlg;
CString GetLastWord(const CString& strSource) const;
CLockControlDlg* m_pLCDlg;
CFont m_LockUnlockBtnFont;

View File

@@ -1,12 +1,8 @@
14:21
우진
우진
09:00
농심, 3Q 실적 부진..라면 점유율 개선 지연-한국
농심
14:21
키움증권, 달러선물, 국채선물 수수료 무료 이벤트
키움증권
14:21
우진
우진
09:00
솔브레인, 대표이사 50만주 장내 매도
솔브레인