This commit is contained in:
@@ -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 공통.
|
||||
|
||||
@@ -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_)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
14:21
|
||||
우진
|
||||
우진
|
||||
09:00
|
||||
농심, 3Q 실적 부진..라면 점유율 개선 지연-한국
|
||||
농심
|
||||
|
||||
14:21
|
||||
키움증권, 달러선물, 국채선물 수수료 무료 이벤트
|
||||
키움증권
|
||||
|
||||
14:21
|
||||
우진
|
||||
우진
|
||||
09:00
|
||||
솔브레인, 대표이사 50만주 장내 매도
|
||||
솔브레인
|
||||
|
||||
|
||||
Reference in New Issue
Block a user