버그 수정

This commit is contained in:
2017-01-18 11:07:30 +09:00
parent 211d7065a2
commit df0ee31d18
12 changed files with 1578 additions and 1992 deletions

View File

@@ -82,6 +82,8 @@ namespace NewsCrawler
void MakeList()
{
CPUTILLib.CpCodeMgr CodeMgr = new CPUTILLib.CpCodeMgr();
int iCnt = m_StockCode.GetCount();
for(short i = 0; i<iCnt; i++)
{
@@ -90,8 +92,16 @@ namespace NewsCrawler
Code.m_strCode = m_StockCode.GetData(0, i);
Code.m_strName = m_StockCode.GetData(1, i);
if(Code.m_strCode[0] == 'A')
var CodeMarketKind = CodeMgr.GetStockMarketKind(Code.m_strCode);
var CodeSectionKind = CodeMgr.GetStockSectionKind(Code.m_strCode);
if(Code.m_strCode[0] == 'A' &&
(CodeMarketKind != CPUTILLib.CPE_MARKET_KIND.CPC_MARKET_FREEBOARD) &&
(CodeSectionKind == CPUTILLib.CPE_KSE_SECTION_KIND.CPC_KSE_SECTION_KIND_NULL ||
CodeSectionKind == CPUTILLib.CPE_KSE_SECTION_KIND.CPC_KSE_SECTION_KIND_ST))
{
m_CodeList.Add(Code);
}
}
m_CodeList.Sort((a, b) => b.m_strName.Length-a.m_strName.Length);

View File

@@ -20,6 +20,8 @@ namespace NewsCrawler
public Crawler(NewsForm Listener)
{
m_Listener = Listener;
Test();
}
@@ -33,6 +35,14 @@ namespace NewsCrawler
public string m_strAuthKey = "";
};
void Test()
{
if(Util.IsDebugging() == false)
return;
ReadSupplyContract(false, "강스템바이오텍", "http://m.dart.fss.or.kr/viewer/main.st?rcpNo=20170111900149");
}
void ResponseAsiaE(IAsyncResult result)
{
REQUEST_STATUS State = (REQUEST_STATUS)result.AsyncState;
@@ -850,18 +860,25 @@ namespace NewsCrawler
string strXPath = "//div[@class='categoryList']//li";
var lists = doc.DocumentNode.SelectNodes(strXPath);
foreach(var item in lists)
try
{
string strTitle = item.SelectNodes(".//a")[1].InnerText;
string strDateTime = item.SelectSingleNode(".//span[@class='category_date']").InnerText;
string strURL = strServerURL+item.SelectNodes(".//a")[1].GetAttributeValue("href", "");
foreach(var item in lists)
{
string strTitle = item.SelectNodes(".//a")[1].InnerText;
string strDateTime = item.SelectSingleNode(".//span[@class='category_date']").InnerText;
string strURL = strServerURL+item.SelectNodes(".//a")[1].GetAttributeValue("href", "");
DateTime Time;
DateTime.TryParseExact(strDateTime, "yyyy.MM.dd HH:mm", CultureInfo.CurrentCulture, DateTimeStyles.None, out Time);
if(Time.DayOfYear < m_Today.DayOfYear)
break;
DateTime Time;
DateTime.TryParseExact(strDateTime, "yyyy.MM.dd HH:mm", CultureInfo.CurrentCulture, DateTimeStyles.None, out Time);
if(Time.DayOfYear < m_Today.DayOfYear)
break;
m_Listener.InsertItem(strTitle, "", "", Time, DateTime.Now, strURL, "파이낸셜뉴스", State.m_Timer.Elapsed.TotalMilliseconds, bInitial);
m_Listener.InsertItem(strTitle, "", "", Time, DateTime.Now, strURL, "파이낸셜뉴스", State.m_Timer.Elapsed.TotalMilliseconds, bInitial);
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
}

View File

@@ -105,10 +105,13 @@ namespace NewsCrawler
while(GetLimitRemainCountRQ() < 1)
Thread.Sleep(100);
m_CPStockMst.SetInputValue(0, Code.m_strCode);
m_CPStockMst.BlockRequest2(0);
int iCurPrice = m_CPStockMst.GetHeaderValue(11);
return iCurPrice;
lock(m_CPStockMst)
{
m_CPStockMst.SetInputValue(0, Code.m_strCode);
m_CPStockMst.BlockRequest2(0);
int iCurPrice = m_CPStockMst.GetHeaderValue(11);
return iCurPrice;
}
}
public void GetLowHighPrice(CodeList.CODE_VALUE Code, DateTime StartTime, int iAfterMin, out int iPriceLow, out int iPriceHigh)
@@ -119,40 +122,43 @@ namespace NewsCrawler
if(GetLimitRemainCountRQ() < 5)
return;
string strTime = StartTime.ToString("yyyyMMdd");
m_StockChart.SetInputValue(0, Code.m_strCode);
m_StockChart.SetInputValue(1, '1');
m_StockChart.SetInputValue(2, strTime);
m_StockChart.SetInputValue(3, strTime);
m_StockChart.SetInputValue(4, 20);
m_StockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, });
m_StockChart.SetInputValue(6, 'm');
m_StockChart.SetInputValue(7, 1);
m_StockChart.BlockRequest2(0);
int iTimeStart;
int.TryParse(StartTime.ToString("HHmm"), out iTimeStart);
int iCount = m_StockChart.GetHeaderValue(3);
for(int i=0; i<iCount; i++)
lock(m_StockChart)
{
uint uiDate = m_StockChart.GetDataValue(0, i);
long iTime = m_StockChart.GetDataValue(1, i);
string strTime = StartTime.ToString("yyyyMMdd");
if(iTime >= iTimeStart && iTime <= iTimeStart+iAfterMin)
m_StockChart.SetInputValue(0, Code.m_strCode);
m_StockChart.SetInputValue(1, '1');
m_StockChart.SetInputValue(2, strTime);
m_StockChart.SetInputValue(3, strTime);
m_StockChart.SetInputValue(4, 20);
m_StockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, });
m_StockChart.SetInputValue(6, 'm');
m_StockChart.SetInputValue(7, 1);
m_StockChart.BlockRequest2(0);
int iTimeStart;
int.TryParse(StartTime.ToString("HHmm"), out iTimeStart);
int iCount = m_StockChart.GetHeaderValue(3);
for(int i=0; i<iCount; i++)
{
long iPriceStartLocal = m_StockChart.GetDataValue(2, i);
long iPriceHighLocal = m_StockChart.GetDataValue(3, i);
long iPriceLowLocal = m_StockChart.GetDataValue(4, i);
long iPriceEndLocal = m_StockChart.GetDataValue(5, i);
uint uiDate = m_StockChart.GetDataValue(0, i);
long iTime = m_StockChart.GetDataValue(1, i);
iPriceLow = Math.Min(iPriceLow, (int)iPriceLowLocal);
iPriceHigh = Math.Max(iPriceLow, (int)iPriceHighLocal);
if(iTime >= iTimeStart && iTime <= iTimeStart+iAfterMin)
{
long iPriceStartLocal = m_StockChart.GetDataValue(2, i);
long iPriceHighLocal = m_StockChart.GetDataValue(3, i);
long iPriceLowLocal = m_StockChart.GetDataValue(4, i);
long iPriceEndLocal = m_StockChart.GetDataValue(5, i);
iPriceLow = Math.Min(iPriceLow, (int)iPriceLowLocal);
iPriceHigh = Math.Max(iPriceLow, (int)iPriceHighLocal);
}
if(iTime < iTimeStart)
break;
}
if(iTime < iTimeStart)
break;
}
}
@@ -164,20 +170,27 @@ namespace NewsCrawler
return;
}
int iCurPrice = GetCurPrice(Code);
int iCount = iMaxPrice/iCurPrice;
try
{
int iCurPrice = GetCurPrice(Code);
int iCount = iMaxPrice/iCurPrice;
m_CP0311.SetInputValue(0, 2);
m_CP0311.SetInputValue(1, Config.GetAccount());
m_CP0311.SetInputValue(2, Config.GetSubAccount());
m_CP0311.SetInputValue(3, Code.m_strCode);
m_CP0311.SetInputValue(4, iCount);
m_CP0311.SetInputValue(5, 0);
m_CP0311.SetInputValue(7, "0");
m_CP0311.SetInputValue(8, "03");
m_CP0311.BlockRequest2(0);
m_CP0311.SetInputValue(0, 2);
m_CP0311.SetInputValue(1, Config.GetAccount());
m_CP0311.SetInputValue(2, Config.GetSubAccount());
m_CP0311.SetInputValue(3, Code.m_strCode);
m_CP0311.SetInputValue(4, iCount);
m_CP0311.SetInputValue(5, 0);
m_CP0311.SetInputValue(7, "0");
m_CP0311.SetInputValue(8, "03");
m_CP0311.BlockRequest2(0);
Util.Log(Util.LOG_TYPE.BUY, string.Format("code:{0} {1}주 현재가 {2}원, 시장가 매수", Code.ToString(), iCount, iCurPrice));
Util.Log(Util.LOG_TYPE.BUY, string.Format("code:{0} {1}주 현재가 {2}원, 시장가 매수", Code.ToString(), iCount, iCurPrice));
}
catch(Exception ex)
{
Util.Log(Util.LOG_TYPE.ERROR, ex.Message+Environment.NewLine+ex.StackTrace);
}
}
}
}

View File

@@ -11,29 +11,15 @@ namespace NewsCrawler
{
public class ExcelHandler
{
bool m_bAvailable = false;
bool m_bAvailable = true;
string m_strFileName = "";
string m_strToday = DateTime.Now.ToString("yyyy-MM-dd");
Excel.Application m_App = null;
public ExcelHandler(string strFileName)
{
m_App = new Excel.Application();
if(m_App == null)
{
Util.Log(Util.LOG_TYPE.ERROR, "엑셀이 설치되지 않음");
m_bAvailable = false;
return;
}
m_strFileName = strFileName;
}
~ExcelHandler()
{
Marshal.ReleaseComObject(m_App);
}
public bool IsAvailable()
{
return m_bAvailable;
@@ -41,57 +27,93 @@ namespace NewsCrawler
private void Create()
{
Excel._Workbook Workbook = m_App.Workbooks.Add(Missing.Value);
Excel._Worksheet Worksheet = Workbook.ActiveSheet;
try
{
Excel.Application App = new Excel.Application();
if(App == null)
{
Util.Log(Util.LOG_TYPE.ERROR, "엑셀이 설치되지 않음");
m_bAvailable = false;
return;
}
Worksheet.Cells[1, 1] = "날짜";
Worksheet.Cells[1, 2] = "기사 시간";
Worksheet.Cells[1, 3] = "받은 시간";
Worksheet.Cells[1, 4] = "출처";
Worksheet.Cells[1, 5] = "제목";
Worksheet.Cells[1, 6] = "요청 시간";
Worksheet.Cells[1, 7] = "시가";
Worksheet.Cells[1, 8] = "저가";
Worksheet.Cells[1, 9] = "대비";
Worksheet.Cells[1, 10] = "고가";
Worksheet.Cells[1, 11] = "대비";
Worksheet.Cells[1, 12] = "링크";
Excel._Workbook Workbook = App.Workbooks.Add(Missing.Value);
Excel._Worksheet Worksheet = Workbook.ActiveSheet;
Workbook.SaveAs(m_strFileName, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value,
Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange,
Excel.XlSaveConflictResolution.xlUserResolution, true,
Missing.Value, Missing.Value, Missing.Value);
Workbook.Close();
Worksheet.Cells[1, 1] = "날짜";
Worksheet.Cells[1, 2] = "기사 시간";
Worksheet.Cells[1, 3] = "받은 시간";
Worksheet.Cells[1, 4] = "출처";
Worksheet.Cells[1, 5] = "제목";
Worksheet.Cells[1, 6] = "요청 시간";
Worksheet.Cells[1, 7] = "시가";
Worksheet.Cells[1, 8] = "저가";
Worksheet.Cells[1, 9] = "대비";
Worksheet.Cells[1, 10] = "고가";
Worksheet.Cells[1, 11] = "대비";
Worksheet.Cells[1, 12] = "링크";
Workbook.SaveAs(m_strFileName, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value,
Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange,
Excel.XlSaveConflictResolution.xlUserResolution, true,
Missing.Value, Missing.Value, Missing.Value);
Workbook.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
public void AddRow(string strNewsTime, string strResTime, string strRef, string strTitle, float fReqTime, int iPriceS, int iPriceLow, float fPriceLowP, int iPriceHigh, float fPriceHighP, string strLink)
public bool AddRow(string strNewsTime, string strResTime, string strRef, string strTitle, float fReqTime, int iPriceS, int iPriceLow, float fPriceLowP, int iPriceHigh, float fPriceHighP, string strLink)
{
if(m_bAvailable == false)
return;
lock(this)
{
if(m_bAvailable == false)
return false;
if(File.Exists(m_strFileName) == false)
Create();
if(File.Exists(m_strFileName) == false)
Create();
try
{
Excel.Application App = new Excel.Application();
if(App == null)
{
Util.Log(Util.LOG_TYPE.ERROR, "엑셀이 설치되지 않음");
m_bAvailable = false;
return false;
}
App.DisplayAlerts = false;
Excel._Workbook Workbook = m_App.Workbooks.Open(m_strFileName);
Excel._Worksheet Worksheet = Workbook.ActiveSheet;
Excel._Workbook Workbook = App.Workbooks.Open(m_strFileName);
Excel._Worksheet Worksheet = Workbook.ActiveSheet;
int iRow = Worksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row+1;
Worksheet.Cells[iRow, 1] = m_strToday;
Worksheet.Cells[iRow, 2] = strNewsTime;
Worksheet.Cells[iRow, 3] = strResTime;
Worksheet.Cells[iRow, 4] = strRef;
Worksheet.Cells[iRow, 5] = strTitle;
Worksheet.Cells[iRow, 6] = fReqTime;
Worksheet.Cells[iRow, 7] = iPriceS;
Worksheet.Cells[iRow, 8] = iPriceLow;
Worksheet.Cells[iRow, 9] = fPriceLowP;
Worksheet.Cells[iRow, 10] = iPriceHigh;
Worksheet.Cells[iRow, 11] = fPriceHighP;
Worksheet.Cells[iRow, 12] = strLink;
int iRow = Worksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row+1;
Worksheet.Cells[iRow, 1] = m_strToday;
Worksheet.Cells[iRow, 2] = strNewsTime;
Worksheet.Cells[iRow, 3] = strResTime;
Worksheet.Cells[iRow, 4] = strRef;
Worksheet.Cells[iRow, 5] = strTitle;
Worksheet.Cells[iRow, 6] = fReqTime;
Worksheet.Cells[iRow, 7] = iPriceS;
Worksheet.Cells[iRow, 8] = iPriceLow;
Worksheet.Cells[iRow, 9] = fPriceLowP;
Worksheet.Cells[iRow, 10] = iPriceHigh;
Worksheet.Cells[iRow, 11] = fPriceHighP;
Worksheet.Cells[iRow, 12] = strLink;
Workbook.Save();
Workbook.Close();
Workbook.Save();
Workbook.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
return false;
}
}
return true;
}
}
}

2
NewsForm.Designer.cs generated
View File

@@ -290,6 +290,8 @@
// cbPriceCheck
//
this.cbPriceCheck.AutoSize = true;
this.cbPriceCheck.Checked = true;
this.cbPriceCheck.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbPriceCheck.Location = new System.Drawing.Point(274, 4);
this.cbPriceCheck.Name = "cbPriceCheck";
this.cbPriceCheck.Size = new System.Drawing.Size(76, 16);

View File

@@ -57,6 +57,7 @@ namespace NewsCrawler
public int m_iPriceHigh = 0;
public DateTime m_StartTime;
public int m_iTryCnt = 0;
public bool m_bLog = false;
public NEWS_ITEM m_NewsItem;
}
@@ -66,6 +67,9 @@ namespace NewsCrawler
TextCondition m_Condition = null;
ConfigForm m_ConfigForm = null;
DateTime m_StartTime;
DateTime m_EndTime;
System.Timers.Timer m_CrawlTimer = new System.Timers.Timer();
int m_iCrawlInterval = 500;
bool m_bBuy = false;
@@ -95,6 +99,9 @@ namespace NewsCrawler
{
InitializeComponent();
m_StartTime = DateTime.ParseExact("09:00", "HH:mm", CultureInfo.CurrentCulture);
m_EndTime = DateTime.ParseExact("15:30", "HH:mm", CultureInfo.CurrentCulture);
Config.Init();
Util.SetLogView(tbLog);
m_CodeList = new CodeList();
@@ -103,6 +110,8 @@ namespace NewsCrawler
m_Crawler = new Crawler(this);
m_fSupplyContractRate = Config.GetSupplyContractRate();
Util.Log(Util.LOG_TYPE.VERVOSE, "========== NewsCrawler 실행 ==========");
//MessageBox.Show("Keywords : \n\n" + m_Condition.GetKeywordsCnt());
m_InsertListViewDelegate = new InsertListView(this.InsertItem);
@@ -159,6 +168,8 @@ namespace NewsCrawler
m_PriceCheckTimer.Elapsed += PriceCheckTimer_Elapsed;
m_PriceCheckTimer.Start();
m_bBuy = true;
Test();
}
@@ -201,7 +212,7 @@ namespace NewsCrawler
void CheckPrice(NEWS_ITEM NewsItem)
{
if(DateTime.Now.Hour < 9 || DateTime.Now.Hour >= 15)
if(DateTime.Now < m_StartTime || DateTime.Now >= m_EndTime)
return;
PRICE_CHECK_DATA CheckData = new PRICE_CHECK_DATA();
@@ -241,17 +252,20 @@ namespace NewsCrawler
{
Util.Log(Util.LOG_TYPE.MANUAL_CODE, string.Format("[{0}] {1} (keyword:{2}, code:{3})", NewsItem.m_strRef, NewsItem.m_strTitle, MatchResult.m_strKeyword, Code.ToString()));
ModelessPopup ManualPopup = new ModelessPopup(this);
ManualPopup.SetMessage(string.Format("{0}\n[{1}] {2}\n(keyword:{3}, code:{4})\n\n매수하시겠습니까?",
DateTime.Now.ToString("[hh:mm:ss]"),
NewsItem.m_strRef, NewsItem.m_strTitle, MatchResult.m_strKeyword, Code), Code);
ManualPopup.TopMost = true;
ManualPopup.Show();
if(m_bBuy == true)
{
ModelessPopup ManualPopup = new ModelessPopup(this);
ManualPopup.SetMessage(string.Format("{0}\n[{1}] {2}\n(keyword:{3}, code:{4})\n\n매수하시겠습니까?",
DateTime.Now.ToString("[hh:mm:ss]"),
NewsItem.m_strRef, NewsItem.m_strTitle, MatchResult.m_strKeyword, Code), Code);
ManualPopup.TopMost = true;
ManualPopup.Show();
}
}
else
{
Util.Log(Util.LOG_TYPE.POSITIVE, string.Format("[{0}] {1} (keyword:{2}, code:{3})", NewsItem.m_strRef, NewsItem.m_strTitle, MatchResult.m_strKeyword, Code.ToString()));
BuyItem(Code);
Util.Log(Util.LOG_TYPE.POSITIVE, string.Format("[{0}] {1} (keyword:{2}, code:{3})", NewsItem.m_strRef, NewsItem.m_strTitle, MatchResult.m_strKeyword, Code.ToString()));
}
m_CodeList.AddDuplicatedList(Code.m_strCode, Code.m_strName);
@@ -319,8 +333,8 @@ namespace NewsCrawler
}
else
{
Util.Log(Util.LOG_TYPE.POSITIVE, string.Format("[{0}] {1}", strRef, strTitle));
BuyItem(Code);
Util.Log(Util.LOG_TYPE.POSITIVE, string.Format("[{0}] {1}", strRef, strTitle));
}
m_CodeList.AddDuplicatedList(Code.m_strCode, Code.m_strName);
@@ -332,10 +346,13 @@ namespace NewsCrawler
Config.SetSupplyContractRate(fRate);
}
delegate bool IsDuplicatedURLDelegate(string strURL);
public bool IsDuplicatedURL(string strURL)
{
return (strURL != "" && m_URLs.Any(s => s == strURL));
if(strURL == "")
return false;
lock(m_URLs)
return m_URLs.Any(s => s == strURL);
}
public void InsertItem(string strTitle, string strName, string strCode, DateTime time, DateTime ResTime, string strURL, string strRef, double dElapseT, bool bInitial)
@@ -370,7 +387,8 @@ namespace NewsCrawler
"",
strURL }));
m_URLs.Add(strURL);
lock(m_URLs)
m_URLs.Add(strURL);
if(bInitial == false)
lvList.Sort();
@@ -493,12 +511,6 @@ namespace NewsCrawler
lvList.Columns[chPriceHighP.Index].Width = -1;
lvList.Columns[chPriceLowP.Index].Width = -1;
}
m_Excel.AddRow(Data.m_NewsItem.m_NewsTime.ToString("HH:mm:ss:fff"), Data.m_NewsItem.m_ResTime.ToString("HH:mm:ss:fff"), Data.m_NewsItem.m_strRef, Data.m_NewsItem.m_strTitle, Data.m_NewsItem.m_fElapseT,
Data.m_iPriceStart,
Data.m_iPriceLow, (Data.m_iPriceLow-Data.m_iPriceStart)*100/(float)Data.m_iPriceStart,
Data.m_iPriceHigh, (Data.m_iPriceHigh-Data.m_iPriceStart)*100/(float)Data.m_iPriceStart,
Data.m_NewsItem.m_strURL);
}
private void PriceCheckTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
@@ -527,14 +539,26 @@ namespace NewsCrawler
while(m_PriceCheckList.Count > 0)
{
PRICE_CHECK_DATA data;
if(m_PriceCheckList.TryPeek(out data) == false)
PRICE_CHECK_DATA Data;
if(m_PriceCheckList.TryPeek(out Data) == false)
break;
if(data.m_iTryCnt < 3 && data.m_iPriceHigh == 0)
if(Data.m_iTryCnt < 3 && Data.m_iPriceHigh == 0)
break;
m_PriceCheckList.TryDequeue(out data);
if(Data.m_bLog == false)
{
Data.m_bLog = m_Excel.AddRow(Data.m_NewsItem.m_NewsTime.ToString("HH:mm:ss:fff"), Data.m_NewsItem.m_ResTime.ToString("HH:mm:ss:fff"), Data.m_NewsItem.m_strRef, Data.m_NewsItem.m_strTitle, Data.m_NewsItem.m_fElapseT,
Data.m_iPriceStart,
Data.m_iPriceLow, (Data.m_iPriceLow-Data.m_iPriceStart)*100/(float)Data.m_iPriceStart,
Data.m_iPriceHigh, (Data.m_iPriceHigh-Data.m_iPriceStart)*100/(float)Data.m_iPriceStart,
Data.m_NewsItem.m_strURL);
}
if(Data.m_bLog == false)
break;
m_PriceCheckList.TryDequeue(out Data);
}

View File

@@ -14,9 +14,16 @@ namespace NewsCrawler
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new NewsForm());
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new NewsForm());
}
catch(Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -64,3 +64,15 @@ TPC
인콘
한국전력
우리은행
SK텔레콤
TIGER 일본(합성 H)
아이엠
아모레퍼시픽
KODEX 단기채권
에스엠코어
포스코대우
미래에셋대우
신한제2호SPAC
강스템바이오텍
금호타이어
아이진

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,6 @@
위젠솔라 = 뉴프라이드
한토신 = 한국토지신탁
테바 = 한독
신성FA = 신성에프에이
무림에스피 = 무림SP
SK이노 = SK이노베이션
디지털옵틱 = 디지탈옵틱

View File

@@ -1,8 +1,8 @@
manual-price=100000
buy-price=100000
account=138115810
supply-contract-rate=50
account=335261568
sub-account=10
supply-contract-rate=100
dart-api-key1=840943e5370eb9037057beab35f4468fa9a6ce5c
dart-api-key2=eba07099d81474c17af615f995d94a517db2c426
dart-api-key3=6fcea963a04a6c5b4c4c74a6eee126ce371d47ef