개발중
This commit is contained in:
31
MainForm.Designer.cs
generated
31
MainForm.Designer.cs
generated
@@ -50,6 +50,7 @@
|
||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
||||
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
|
||||
this.btLogDump = new System.Windows.Forms.Button();
|
||||
this.btMATest = new System.Windows.Forms.Button();
|
||||
this.btTimeSync = new System.Windows.Forms.Button();
|
||||
this.cbStart = new System.Windows.Forms.CheckBox();
|
||||
@@ -62,7 +63,7 @@
|
||||
this.statusBar1 = new System.Windows.Forms.StatusBar();
|
||||
this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
|
||||
this.statusBarPanel2 = new System.Windows.Forms.StatusBarPanel();
|
||||
this.btLogDump = new System.Windows.Forms.Button();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
this.splitContainer1.Panel2.SuspendLayout();
|
||||
@@ -288,6 +289,7 @@
|
||||
//
|
||||
// splitContainer2.Panel2
|
||||
//
|
||||
this.splitContainer2.Panel2.Controls.Add(this.button1);
|
||||
this.splitContainer2.Panel2.Controls.Add(this.btLogDump);
|
||||
this.splitContainer2.Panel2.Controls.Add(this.btMATest);
|
||||
this.splitContainer2.Panel2.Controls.Add(this.btTimeSync);
|
||||
@@ -330,6 +332,16 @@
|
||||
this.splitContainer3.SplitterDistance = 256;
|
||||
this.splitContainer3.TabIndex = 0;
|
||||
//
|
||||
// btLogDump
|
||||
//
|
||||
this.btLogDump.Location = new System.Drawing.Point(21, 555);
|
||||
this.btLogDump.Name = "btLogDump";
|
||||
this.btLogDump.Size = new System.Drawing.Size(75, 35);
|
||||
this.btLogDump.TabIndex = 25;
|
||||
this.btLogDump.Text = "Dump Log";
|
||||
this.btLogDump.UseVisualStyleBackColor = true;
|
||||
this.btLogDump.Click += new System.EventHandler(this.btLogDump_Click);
|
||||
//
|
||||
// btMATest
|
||||
//
|
||||
this.btMATest.Location = new System.Drawing.Point(122, 421);
|
||||
@@ -443,15 +455,15 @@
|
||||
this.statusBarPanel2.Name = "statusBarPanel2";
|
||||
this.statusBarPanel2.Width = 120;
|
||||
//
|
||||
// btLogDump
|
||||
// button1
|
||||
//
|
||||
this.btLogDump.Location = new System.Drawing.Point(22, 555);
|
||||
this.btLogDump.Name = "btLogDump";
|
||||
this.btLogDump.Size = new System.Drawing.Size(75, 23);
|
||||
this.btLogDump.TabIndex = 25;
|
||||
this.btLogDump.Text = "Dump Log";
|
||||
this.btLogDump.UseVisualStyleBackColor = true;
|
||||
this.btLogDump.Click += new System.EventHandler(this.btLogDump_Click);
|
||||
this.button1.Location = new System.Drawing.Point(118, 555);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(75, 35);
|
||||
this.button1.TabIndex = 25;
|
||||
this.button1.Text = "Dump Simulation";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
@@ -516,6 +528,7 @@
|
||||
private System.Windows.Forms.Label lbCacheBalance;
|
||||
private System.Windows.Forms.Label lbEvalProfit;
|
||||
private System.Windows.Forms.Button btLogDump;
|
||||
private System.Windows.Forms.Button button1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
91
MainForm.cs
91
MainForm.cs
@@ -4,6 +4,7 @@ using System.Collections;
|
||||
using System.Reflection;
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace upper_limit_crawler
|
||||
{
|
||||
@@ -23,7 +24,7 @@ namespace upper_limit_crawler
|
||||
{
|
||||
ArrayList m_TraceList = new ArrayList();
|
||||
|
||||
Timer m_MainTimer = new Timer();
|
||||
System.Windows.Forms.Timer m_MainTimer = new System.Windows.Forms.Timer();
|
||||
int m_iLastTime = 0;
|
||||
|
||||
static ULDataMgr m_DataMgr = new ULDataMgr();
|
||||
@@ -233,20 +234,71 @@ namespace upper_limit_crawler
|
||||
|
||||
|
||||
List<string> aCodeList = new List<string> {
|
||||
"064240",
|
||||
"090410",
|
||||
"208860",
|
||||
"044180",
|
||||
"127160",
|
||||
"123570",
|
||||
"A064240",
|
||||
"A090410",
|
||||
"A208860",
|
||||
"A044180",
|
||||
"A127160",
|
||||
"A123570",
|
||||
"A039420",
|
||||
"A015020",
|
||||
"A090850",
|
||||
"A007660",
|
||||
"A017180",
|
||||
"A036810",
|
||||
"A049950",
|
||||
"A044480",
|
||||
"A047310",
|
||||
"A115610",
|
||||
"A086060",
|
||||
"A118000",
|
||||
"A037400",
|
||||
"A027580",
|
||||
"A100090",
|
||||
"A103130",
|
||||
"A032790",
|
||||
"A226350",
|
||||
"A024800",
|
||||
"A002630",
|
||||
"A109740",
|
||||
"A077970",
|
||||
"A040350",
|
||||
"A092870",
|
||||
"A001140",
|
||||
"A065130",
|
||||
"A043340",
|
||||
"A038010",
|
||||
"A099410",
|
||||
"A115440",
|
||||
"A115960",
|
||||
"A098120",
|
||||
"A004380",
|
||||
"A007120",
|
||||
"A025820",
|
||||
"A005980",
|
||||
"A011810",
|
||||
"A131100",
|
||||
"A059090",
|
||||
"A083470",
|
||||
"A051170",
|
||||
"A096350",
|
||||
"A131400",
|
||||
"A122800",
|
||||
"A043910",
|
||||
"A089590",
|
||||
"A067990",
|
||||
"A091970",
|
||||
"A058450",
|
||||
"A104040",
|
||||
"A003070",
|
||||
};
|
||||
string strPrevDate = "20160729";
|
||||
string strDate = "20160801";
|
||||
string strPrevDate = "20160801";
|
||||
string strDate = "20160802";
|
||||
int iTotalProfit = 0;
|
||||
|
||||
foreach (string code in aCodeList)
|
||||
{
|
||||
string strCode = "A" + code;
|
||||
string strCode = code[0] == 'A' ? code : "A"+code;
|
||||
string strCodeName = ULUtil.GetCodeName(strCode);
|
||||
|
||||
Console.WriteLine("{0}({1})", strCodeName, strCode);
|
||||
@@ -263,7 +315,7 @@ namespace upper_limit_crawler
|
||||
stockChart.SetInputValue(4, 1);
|
||||
stockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, 6, 10, 37 });
|
||||
stockChart.SetInputValue(6, 'T');
|
||||
stockChart.BlockRequest2(1);
|
||||
ULUtil.BlockRequest(stockChart);
|
||||
int iTimeTest = (int)stockChart.GetDataValue(1, 0);
|
||||
int iPrevClosing = stockChart.GetDataValue(5, 0);
|
||||
|
||||
@@ -274,7 +326,7 @@ namespace upper_limit_crawler
|
||||
stockChart.SetInputValue(4, 0);
|
||||
stockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, 6, 10, 37 });
|
||||
stockChart.SetInputValue(6, 'T');
|
||||
stockChart.BlockRequest2(1);
|
||||
ULUtil.BlockRequest(stockChart);
|
||||
|
||||
int iFieldCnt = stockChart.GetHeaderValue(1);
|
||||
string[] astrFieldName = stockChart.GetHeaderValue(2);
|
||||
@@ -294,7 +346,7 @@ namespace upper_limit_crawler
|
||||
}
|
||||
|
||||
if(stockChart.Continue == 1)
|
||||
stockChart.BlockRequest2(1);
|
||||
ULUtil.BlockRequest(stockChart);
|
||||
else
|
||||
break;
|
||||
}
|
||||
@@ -352,7 +404,7 @@ namespace upper_limit_crawler
|
||||
Console.WriteLine("[{0}] [{1}] 조건 매수 {2}원 ({3}) (5MA slop:{4})", iTime, WatchItem.m_strCodeName, WatchItem.m_iCurPrice, fCompRate.ToString("0.00%"), f5MASlope.ToString("0.00%"));
|
||||
ULUtil.TraceCSV(iTime, "[시뮬레이션] 조건 매수", WatchItem.m_strCodeName, WatchItem.m_iCurPrice, fCompRate.ToString("0.00%"), f5MASlope.ToString("0.00%"));
|
||||
|
||||
m_DataMgr.AddBidLog(strCode, WatchItem.m_strCodeName, iTime, WatchItem.m_iCurPrice, f5MASlope);
|
||||
m_DataMgr.AddBidLog(strCode, WatchItem.m_strCodeName, iTime, WatchItem.m_iCurPrice, f5MASlope, false);
|
||||
|
||||
int iBidCnt = (int)m_DataMgr.m_Setting.m_fBidAmount / iCurPrice;
|
||||
|
||||
@@ -379,7 +431,7 @@ namespace upper_limit_crawler
|
||||
|
||||
Console.WriteLine("[{0}] [{1}] 손절 {2}원 ({3}:{4})", iTime, OwnItem.m_strCodeName, iCurPrice, iProfit, fProfitRate.ToString("0.00%"));
|
||||
ULUtil.TraceCSV(iTime, "[시뮬레이션] 손절", OwnItem.m_strCodeName, iCurPrice, fProfitRate.ToString("0.00%"));
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, float.NaN, true, iProfit, fProfitRate);
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, float.NaN, true, iProfit, fProfitRate, false);
|
||||
|
||||
iTotalAskPrice += iCurPrice * OwnItem.m_iConclusionBalanceCnt;
|
||||
OwnItem.m_iUnitBEP = 0;
|
||||
@@ -408,7 +460,7 @@ namespace upper_limit_crawler
|
||||
|
||||
Console.WriteLine("[{0}] [{1}] 트레일링 매도 {2}원 ({3}:{4}) (5MA slop:{5})", iTime, OwnItem.m_strCodeName, iCurPrice, iProfit, fProfitRate.ToString("0.00%"), f5MASlope.ToString("0.00%"));
|
||||
ULUtil.TraceCSV(iTime, "[시뮬레이션] 트레일링 매도", OwnItem.m_strCodeName, iCurPrice, iProfit, fProfitRate.ToString("0.00%"), f5MASlope.ToString("0.00%"));
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, f5MASlope, false, iProfit, fProfitRate);
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, f5MASlope, false, iProfit, fProfitRate, false);
|
||||
|
||||
iTotalAskPrice += iCurPrice * OwnItem.m_iConclusionBalanceCnt;
|
||||
OwnItem.m_iUnitBEP = 0;
|
||||
@@ -462,7 +514,12 @@ namespace upper_limit_crawler
|
||||
|
||||
private void btLogDump_Click(object sender, EventArgs e)
|
||||
{
|
||||
m_DataMgr.DumpLog();
|
||||
m_DataMgr.DumpLog(true);
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
m_DataMgr.DumpLog(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
120
ULBalanceDlg.cs
120
ULBalanceDlg.cs
@@ -38,7 +38,7 @@ namespace upper_limit_crawler
|
||||
|
||||
List<OWN_ITEM> m_OwnList = new List<OWN_ITEM>();
|
||||
|
||||
Timer m_MainTimer = new Timer();
|
||||
System.Windows.Forms.Timer m_MainTimer = new System.Windows.Forms.Timer();
|
||||
int m_iLastTime = 0;
|
||||
int m_iBalanceDelay = BALANCE_DELAY;
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace upper_limit_crawler
|
||||
{
|
||||
m_Td6033.SetInputValue(0, m_DataMgr.GetAccount());
|
||||
m_Td6033.SetInputValue(2, 50);
|
||||
m_Td6033.BlockRequest2(1);
|
||||
ULUtil.BlockRequest(m_Td6033);
|
||||
|
||||
|
||||
//object[] datalist = new object[]
|
||||
@@ -177,24 +177,16 @@ namespace upper_limit_crawler
|
||||
private void RefreshCurPrice()
|
||||
{
|
||||
Dictionary<string, ULWatchItem> WatchList = m_DataMgr.GetWatchList();
|
||||
foreach (ListViewItem lvItem in lvBalance.Items)
|
||||
{
|
||||
string strCode = lvItem.SubItems[chCode.Index].Text;
|
||||
int iTime = ULUtil.GetCurTimeInt();
|
||||
|
||||
if (WatchList.ContainsKey(strCode) == true)
|
||||
foreach(KeyValuePair<string, ULWatchItem> WatchPair in WatchList)
|
||||
{
|
||||
ULWatchItem WatchItem = WatchList[strCode];
|
||||
string strCode = WatchPair.Key;
|
||||
ULWatchItem WatchItem = WatchPair.Value;
|
||||
OWN_ITEM OwnItem = m_OwnList.Find(itemFind => itemFind.m_strCode == strCode);
|
||||
if(OwnItem == null)
|
||||
continue;
|
||||
|
||||
int iDisplayCurPrice = 0;
|
||||
if (lvItem.SubItems[chCurPrice.Index].Text.Length > 0)
|
||||
iDisplayCurPrice = int.Parse(Regex.Replace(lvItem.SubItems[chCurPrice.Index].Text, @"\D", ""));
|
||||
|
||||
if (WatchItem.m_iCurPrice != iDisplayCurPrice)
|
||||
{
|
||||
int iTime = WatchItem.m_iCurTime;
|
||||
int iCurPrice = WatchItem.m_iCurPrice;
|
||||
int iComp = iCurPrice - (int)OwnItem.m_iUnitBEP; // or OwnItem.m_dConclusionUnitPrice
|
||||
|
||||
@@ -202,25 +194,9 @@ namespace upper_limit_crawler
|
||||
OwnItem.m_iEvaluationPrice = iCurPrice * OwnItem.m_iConclusionBalanceCnt;
|
||||
OwnItem.m_iEvaluationProfit = iComp * OwnItem.m_iConclusionBalanceCnt;
|
||||
OwnItem.m_dProfitRate = iComp / (float)OwnItem.m_iUnitBEP;
|
||||
|
||||
lvItem.SubItems[chCurPrice.Index].Text = iCurPrice.ToString("###,###,##0");
|
||||
lvItem.SubItems[chEvaluationPrice.Index].Text = OwnItem.m_iEvaluationPrice.ToString("###,###,##0");
|
||||
lvItem.SubItems[chEvaluationProfit.Index].Text = OwnItem.m_iEvaluationProfit.ToString("###,###,##0");
|
||||
if (OwnItem.m_iEvaluationProfit > 0)
|
||||
lvItem.SubItems[chEvaluationProfit.Index].ForeColor = Color.Red;
|
||||
else
|
||||
lvItem.SubItems[chEvaluationProfit.Index].ForeColor = Color.Blue;
|
||||
lvItem.SubItems[chEvaluationPrice.Index].Text = OwnItem.m_iEvaluationPrice.ToString("###,###,##0");
|
||||
lvItem.SubItems[chProfitRate.Index].Text = OwnItem.m_dProfitRate.ToString("#,##0.00%");
|
||||
lvItem.SubItems[chHighestPrice.Index].Text = WatchItem.m_iHighestPrice.ToString("#,##0.00%");
|
||||
if (OwnItem.m_dProfitRate > 0)
|
||||
lvItem.SubItems[chProfitRate.Index].ForeColor = Color.Red;
|
||||
else
|
||||
lvItem.SubItems[chProfitRate.Index].ForeColor = Color.Blue;
|
||||
|
||||
|
||||
OwnItem.m_iMaxPrice = Math.Max(iCurPrice, OwnItem.m_iMaxPrice);
|
||||
|
||||
|
||||
// loss cut
|
||||
if(iCurPrice <= OwnItem.m_iUnitBEP * (1.0f - m_DataMgr.m_Setting.m_fLossCut))
|
||||
{
|
||||
@@ -234,7 +210,7 @@ namespace upper_limit_crawler
|
||||
|
||||
ULUtil.Trace("[{0}] 손절 {1}원 ({2}) {3}", OwnItem.m_strCodeName, iCurPrice, fProfitRate.ToString("0.00%"), WatchItem.m_iHighestPrice);
|
||||
ULUtil.TraceCSV("손절", OwnItem.m_strCodeName, iCurPrice, fProfitRate.ToString("0.00%"), WatchItem.m_iHighestPrice);
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, float.NaN, true, iProfit, fProfitRate);
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, float.NaN, true, iProfit, fProfitRate, true);
|
||||
|
||||
// own에서 삭제하고 미체결 리스트에 넣고, watch에서도 뺀다
|
||||
|
||||
@@ -246,7 +222,7 @@ namespace upper_limit_crawler
|
||||
float f5MASlope = WatchItem.GetPrev5MASlope(iTime);
|
||||
if(float.IsNaN(f5MASlope) || f5MASlope > -0.0100f)
|
||||
{
|
||||
//Console.WriteLine(string.Format("[{0}] [{1}] 트레일링 매도 대기. 5ma 상승 중 {2}원 ({3})", iTime, OwnItem.m_strCodeName, iCurPrice, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%")));
|
||||
Console.WriteLine(string.Format("[{0}] [{1}] 트레일링 매도 대기. 5ma 상승 중 {2}원 ({3})", iTime, OwnItem.m_strCodeName, iCurPrice, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%")));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -265,10 +241,79 @@ namespace upper_limit_crawler
|
||||
f5MASlope.ToString("0.00%"),
|
||||
WatchItem.m_iHighestPrice);
|
||||
ULUtil.TraceCSV("트레일링 매도", OwnItem.m_strCodeName, iCurPrice, iCurPrice - OwnItem.m_iUnitBEP, fProfitRate.ToString("0.00%"), f5MASlope.ToString("0.00%"), WatchItem.m_iHighestPrice);
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, f5MASlope, false, iProfit, fProfitRate);
|
||||
m_DataMgr.AddAskLog(strCode, WatchItem.m_strCodeName, iTime, iCurPrice, f5MASlope, false, iProfit, fProfitRate, true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ListViewItem lvItem = lvBalance.FindItemWithText(strCode);
|
||||
if(lvItem != null)
|
||||
{
|
||||
lvItem.SubItems[chCurPrice.Index].Text = iCurPrice.ToString("###,###,##0");
|
||||
lvItem.SubItems[chEvaluationPrice.Index].Text = OwnItem.m_iEvaluationPrice.ToString("###,###,##0");
|
||||
lvItem.SubItems[chEvaluationProfit.Index].Text = OwnItem.m_iEvaluationProfit.ToString("###,###,##0");
|
||||
if(OwnItem.m_iEvaluationProfit > 0)
|
||||
lvItem.SubItems[chEvaluationProfit.Index].ForeColor = Color.Red;
|
||||
else
|
||||
lvItem.SubItems[chEvaluationProfit.Index].ForeColor = Color.Blue;
|
||||
lvItem.SubItems[chEvaluationPrice.Index].Text = OwnItem.m_iEvaluationPrice.ToString("###,###,##0");
|
||||
lvItem.SubItems[chProfitRate.Index].Text = OwnItem.m_dProfitRate.ToString("#,##0.00%");
|
||||
lvItem.SubItems[chHighestPrice.Index].Text = WatchItem.m_iHighestPrice.ToString("###,###,##0");
|
||||
if(OwnItem.m_dProfitRate > 0)
|
||||
lvItem.SubItems[chProfitRate.Index].ForeColor = Color.Red;
|
||||
else
|
||||
lvItem.SubItems[chProfitRate.Index].ForeColor = Color.Blue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//foreach (ListViewItem lvItem in lvBalance.Items)
|
||||
//{
|
||||
// string strCode = lvItem.SubItems[chCode.Index].Text;
|
||||
// int iTime = ULUtil.GetCurTimeInt();
|
||||
|
||||
// if (WatchList.ContainsKey(strCode) == true)
|
||||
// {
|
||||
// ULWatchItem WatchItem = WatchList[strCode];
|
||||
// OWN_ITEM OwnItem = m_OwnList.Find(itemFind => itemFind.m_strCode == strCode);
|
||||
// if (OwnItem == null)
|
||||
// continue;
|
||||
|
||||
// int iDisplayCurPrice = 0;
|
||||
// if (lvItem.SubItems[chCurPrice.Index].Text.Length > 0)
|
||||
// iDisplayCurPrice = int.Parse(Regex.Replace(lvItem.SubItems[chCurPrice.Index].Text, @"\D", ""));
|
||||
|
||||
// if (WatchItem.m_iCurPrice != iDisplayCurPrice)
|
||||
// {
|
||||
// int iCurPrice = WatchItem.m_iCurPrice;
|
||||
// int iComp = iCurPrice - (int)OwnItem.m_iUnitBEP; // or OwnItem.m_dConclusionUnitPrice
|
||||
|
||||
// OwnItem.m_iCurPrice = iCurPrice;
|
||||
// OwnItem.m_iEvaluationPrice = iCurPrice * OwnItem.m_iConclusionBalanceCnt;
|
||||
// OwnItem.m_iEvaluationProfit = iComp * OwnItem.m_iConclusionBalanceCnt;
|
||||
// OwnItem.m_dProfitRate = iComp / (float)OwnItem.m_iUnitBEP;
|
||||
|
||||
// lvItem.SubItems[chCurPrice.Index].Text = iCurPrice.ToString("###,###,##0");
|
||||
// lvItem.SubItems[chEvaluationPrice.Index].Text = OwnItem.m_iEvaluationPrice.ToString("###,###,##0");
|
||||
// lvItem.SubItems[chEvaluationProfit.Index].Text = OwnItem.m_iEvaluationProfit.ToString("###,###,##0");
|
||||
// if (OwnItem.m_iEvaluationProfit > 0)
|
||||
// lvItem.SubItems[chEvaluationProfit.Index].ForeColor = Color.Red;
|
||||
// else
|
||||
// lvItem.SubItems[chEvaluationProfit.Index].ForeColor = Color.Blue;
|
||||
// lvItem.SubItems[chEvaluationPrice.Index].Text = OwnItem.m_iEvaluationPrice.ToString("###,###,##0");
|
||||
// lvItem.SubItems[chProfitRate.Index].Text = OwnItem.m_dProfitRate.ToString("#,##0.00%");
|
||||
// lvItem.SubItems[chHighestPrice.Index].Text = WatchItem.m_iHighestPrice.ToString("#,##0.00%");
|
||||
// if (OwnItem.m_dProfitRate > 0)
|
||||
// lvItem.SubItems[chProfitRate.Index].ForeColor = Color.Red;
|
||||
// else
|
||||
// lvItem.SubItems[chProfitRate.Index].ForeColor = Color.Blue;
|
||||
|
||||
|
||||
// OwnItem.m_iMaxPrice = Math.Max(iCurPrice, OwnItem.m_iMaxPrice);
|
||||
|
||||
|
||||
// }
|
||||
|
||||
// steadiness
|
||||
//if (WatchItem.GetAvgDiff(iTime) < WatchItem.m_iPrevClosing*0.01)
|
||||
//{
|
||||
@@ -284,8 +329,8 @@ namespace upper_limit_crawler
|
||||
// WatchItem.m_iHighestPrice);
|
||||
// ULUtil.TraceCSV("보합 처리", OwnItem.m_strCodeName, WatchItem.m_iCurPrice, WatchItem.m_iCurPrice - OwnItem.m_iUnitBEP, (WatchItem.m_iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%"), WatchItem.m_iHighestPrice);
|
||||
//}
|
||||
}
|
||||
}
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
private void RefreshData(object sender, EventArgs e)
|
||||
@@ -299,8 +344,7 @@ namespace upper_limit_crawler
|
||||
|
||||
int iDeltaT = iCurTime-m_iLastTime;
|
||||
m_iBalanceDelay-=iDeltaT;
|
||||
if((m_DataMgr.GetTrader().HasConclusion() == true || m_iBalanceDelay<=0)
|
||||
&& ULUtil.GetLimitRemainCountRQ() > 20)
|
||||
if(m_DataMgr.GetTrader().HasConclusion() == true || m_iBalanceDelay<=0)
|
||||
{
|
||||
RefreshBalance();
|
||||
m_iBalanceDelay=BALANCE_DELAY;
|
||||
|
||||
66
ULDataMgr.cs
66
ULDataMgr.cs
@@ -73,6 +73,9 @@ namespace upper_limit_crawler
|
||||
List<BID_LOG> m_BidLogs = new List<BID_LOG>();
|
||||
List<ASK_LOG> m_AskLogs = new List<ASK_LOG>();
|
||||
|
||||
List<BID_LOG> m_BidLogsSimul = new List<BID_LOG>();
|
||||
List<ASK_LOG> m_AskLogsSimul = new List<ASK_LOG>();
|
||||
|
||||
long m_iCacheBalance = 0;
|
||||
long m_iEvalProfit = 0;
|
||||
|
||||
@@ -86,8 +89,10 @@ namespace upper_limit_crawler
|
||||
else
|
||||
m_AvailableList = new List<string>();
|
||||
|
||||
m_BidLogs = GetBidLog(m_strToday);
|
||||
m_AskLogs = GetAskLog(m_strToday);
|
||||
m_BidLogs = GetBidLog(m_strToday, true);
|
||||
m_AskLogs = GetAskLog(m_strToday, true);
|
||||
m_BidLogsSimul = GetBidLog(m_strToday, false);
|
||||
m_AskLogsSimul = GetAskLog(m_strToday, false);
|
||||
}
|
||||
|
||||
public void Init()
|
||||
@@ -223,9 +228,9 @@ namespace upper_limit_crawler
|
||||
}
|
||||
}
|
||||
|
||||
public void AddBidLog(string strCode, string strCodeName, int iTime, int iBidPrice, float f5MAslope)
|
||||
public void AddBidLog(string strCode, string strCodeName, int iTime, int iBidPrice, float f5MAslope, bool bReal)
|
||||
{
|
||||
string strKey = "bid-"+m_strToday;
|
||||
string strKey = bReal ? "bid-"+m_strToday : "bid-simul-"+m_strToday;
|
||||
|
||||
BID_LOG log = new BID_LOG();
|
||||
log.m_strCode = strCode;
|
||||
@@ -233,23 +238,31 @@ namespace upper_limit_crawler
|
||||
log.m_iTime = iTime;
|
||||
log.m_iBidPrice = iBidPrice;
|
||||
log.m_f5MAslope = f5MAslope;
|
||||
m_BidLogs.Add(log);
|
||||
|
||||
if(bReal == true)
|
||||
{
|
||||
m_BidLogs.Add(log);
|
||||
m_DB.Insert(strKey, m_BidLogs);
|
||||
}
|
||||
|
||||
List<BID_LOG> GetBidLog(string strDate)
|
||||
else
|
||||
{
|
||||
string strKey = "bid-"+strDate;
|
||||
m_BidLogsSimul.Add(log);
|
||||
m_DB.Insert(strKey, m_BidLogsSimul);
|
||||
}
|
||||
}
|
||||
|
||||
List<BID_LOG> GetBidLog(string strDate, bool bReal)
|
||||
{
|
||||
string strKey = bReal ? "bid-"+m_strToday : "bid-simul-"+m_strToday;
|
||||
if(m_DB.IsExist(strKey) == true)
|
||||
return m_DB.Get<List<BID_LOG>>(strKey);
|
||||
else
|
||||
return new List<BID_LOG>();
|
||||
}
|
||||
|
||||
public void AddAskLog(string strCode, string strCodeName, int iTime, int iAskPrice, float f5MAslope, bool bLosscut, int iProfit, float fProfitRate)
|
||||
public void AddAskLog(string strCode, string strCodeName, int iTime, int iAskPrice, float f5MAslope, bool bLosscut, int iProfit, float fProfitRate, bool bReal)
|
||||
{
|
||||
string strKey = "ask-"+m_strToday;
|
||||
string strKey = bReal ? "ask-"+m_strToday : "ask-simul-"+m_strToday;
|
||||
|
||||
ASK_LOG log = new ASK_LOG();
|
||||
log.m_strCode = strCode;
|
||||
@@ -260,33 +273,52 @@ namespace upper_limit_crawler
|
||||
log.m_bLosscut = bLosscut;
|
||||
log.m_iProfit = iProfit;
|
||||
log.m_fProfitRate = fProfitRate;
|
||||
m_AskLogs.Add(log);
|
||||
|
||||
if(bReal == true)
|
||||
{
|
||||
m_AskLogs.Add(log);
|
||||
m_DB.Insert(strKey, m_AskLogs);
|
||||
}
|
||||
|
||||
List<ASK_LOG> GetAskLog(string strDate)
|
||||
else
|
||||
{
|
||||
string strKey = "ask-"+strDate;
|
||||
m_AskLogsSimul.Add(log);
|
||||
m_DB.Insert(strKey, m_AskLogsSimul);
|
||||
}
|
||||
}
|
||||
|
||||
List<ASK_LOG> GetAskLog(string strDate, bool bReal)
|
||||
{
|
||||
string strKey = bReal ? "ask-"+m_strToday : "ask-simul-"+m_strToday;
|
||||
|
||||
if(m_DB.IsExist(strKey) == true)
|
||||
return m_DB.Get<List<ASK_LOG>>(strKey);
|
||||
else
|
||||
return new List<ASK_LOG>();
|
||||
}
|
||||
|
||||
public void DumpLog()
|
||||
public void DumpLog(bool bReal)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
foreach(string strCode in m_AvailableList)
|
||||
sb.AppendLine(strCode+",");
|
||||
sb.AppendLine("\"" +strCode+ "\",");
|
||||
|
||||
if(bReal == true)
|
||||
{
|
||||
foreach(BID_LOG log in m_BidLogs)
|
||||
sb.AppendFormat("매수, {0}, {1}, {2}, {3}"+Environment.NewLine, log.m_iTime, log.m_strCodeName, log.m_iBidPrice, log.m_f5MAslope.ToString("0.00%"));
|
||||
foreach(ASK_LOG log in m_AskLogs)
|
||||
sb.AppendFormat("매도, {0}, {1}, {2}, {3}, {4}, {5}"+Environment.NewLine, log.m_iTime, log.m_strCodeName, log.m_iAskPrice, log.m_f5MAslope.ToString("0.00%"), log.m_iProfit, log.m_fProfitRate.ToString("0.00%"));
|
||||
|
||||
System.IO.File.WriteAllText(ULUtil.GetLogDir()+"dblog-"+m_strToday+".csv", sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(BID_LOG log in m_BidLogsSimul)
|
||||
sb.AppendFormat("매수, {0}, {1}, {2}, {3}"+Environment.NewLine, log.m_iTime, log.m_strCodeName, log.m_iBidPrice, log.m_f5MAslope.ToString("0.00%"));
|
||||
foreach(ASK_LOG log in m_AskLogsSimul)
|
||||
sb.AppendFormat("매도, {0}, {1}, {2}, {3}, {4}, {5}"+Environment.NewLine, log.m_iTime, log.m_strCodeName, log.m_iAskPrice, log.m_f5MAslope.ToString("0.00%"), log.m_iProfit, log.m_fProfitRate.ToString("0.00%"));
|
||||
System.IO.File.WriteAllText(ULUtil.GetLogDir()+"dblog-simul-"+m_strToday+".csv", sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace upper_limit_crawler
|
||||
|
||||
ULDataMgr m_DataMgr;
|
||||
CPSYSDIBLib.CpSvrNew7043 m_7043 = null;
|
||||
Timer m_Timer = new Timer();
|
||||
System.Windows.Forms.Timer m_Timer = new System.Windows.Forms.Timer();
|
||||
int m_iMonitorDelay = 0;
|
||||
int m_iLastTime = 0;
|
||||
bool m_bRequesting = false;
|
||||
@@ -62,13 +62,13 @@ namespace upper_limit_crawler
|
||||
|
||||
bool RefreshMonitorItem()
|
||||
{
|
||||
if (m_bRequesting == true || ULUtil.GetLimitRemainCountRQ() < 30)
|
||||
if (m_bRequesting == true)
|
||||
return false;
|
||||
|
||||
m_bRequesting = true;
|
||||
m_7043.SetInputValue(7, (short)(m_DataMgr.m_Setting.m_fSearchMin * 100));
|
||||
m_7043.SetInputValue(8, (short)((m_DataMgr.m_Setting.m_fSearchMax + 0.009) * 100));
|
||||
int iResult = m_7043.BlockRequest2(1);
|
||||
int iResult = ULUtil.BlockRequest(m_7043);
|
||||
|
||||
lvWatch.Items.Clear();
|
||||
int iIdx = 1;
|
||||
@@ -121,8 +121,8 @@ namespace upper_limit_crawler
|
||||
}
|
||||
|
||||
bContinue = (m_7043.Continue == 1);
|
||||
if (bContinue == true && ULUtil.GetLimitRemainCountRQ() >= 30)
|
||||
iResult = m_7043.BlockRequest2(1);
|
||||
if (bContinue == true)
|
||||
iResult = ULUtil.BlockRequest(m_7043);
|
||||
}
|
||||
|
||||
//foreach (ColumnHeader col in lvWatch.Columns)
|
||||
@@ -181,7 +181,7 @@ namespace upper_limit_crawler
|
||||
|
||||
// bid and add to black list
|
||||
m_DataMgr.GetTrader().Buy(strCode, item.m_iCurPrice, (int)m_DataMgr.m_Setting.m_fBidAmount);
|
||||
m_DataMgr.AddBidLog(strCode, item.m_strCodeName, iTime, item.m_iCurPrice, f5MASlope);
|
||||
m_DataMgr.AddBidLog(strCode, item.m_strCodeName, iTime, item.m_iCurPrice, f5MASlope, true);
|
||||
m_DataMgr.AddPostphoneItem(iTime, strCode);
|
||||
|
||||
ULUtil.Trace("[{0}] 조건 매수 {1}원 ({2}) (5MA slop:{3})",
|
||||
|
||||
25
ULTrader.cs
25
ULTrader.cs
@@ -143,10 +143,6 @@ namespace upper_limit_crawler
|
||||
|
||||
public void Buy(string strCode, int iUnitPrice, int iBidAmount)
|
||||
{
|
||||
//lock(lockBuy)
|
||||
{
|
||||
while (ULUtil.GetLimitRemainCountRQ() <= 0) ;
|
||||
|
||||
int iCnt = iBidAmount / iUnitPrice;
|
||||
|
||||
CPTRADELib.CpTd0311 Td0311Bid = new CPTRADELib.CpTd0311();
|
||||
@@ -158,17 +154,11 @@ namespace upper_limit_crawler
|
||||
Td0311Bid.SetInputValue(7, "0");
|
||||
Td0311Bid.SetInputValue(8, "03");
|
||||
|
||||
Td0311Bid.BlockRequest2(1);
|
||||
}
|
||||
ULUtil.BlockRequest(Td0311Bid);
|
||||
}
|
||||
|
||||
public void Sell(string strCode, int iUnitPrice, int iCnt)
|
||||
{
|
||||
//lock (lockSell)
|
||||
{
|
||||
//long iCnt = (long)Math.Floor(fAskAmount/fCurPrice);
|
||||
//iCnt=1;
|
||||
|
||||
while (ULUtil.GetLimitRemainCountRQ() <= 0) ;
|
||||
|
||||
CPTRADELib.CpTd0311 Td0311Ask = new CPTRADELib.CpTd0311();
|
||||
@@ -181,19 +171,11 @@ namespace upper_limit_crawler
|
||||
Td0311Ask.SetInputValue(7, "0");
|
||||
Td0311Ask.SetInputValue(8, "03");
|
||||
|
||||
Td0311Ask.BlockRequest2(1);
|
||||
}
|
||||
ULUtil.BlockRequest(Td0311Ask);
|
||||
}
|
||||
|
||||
public void SellCurPrice(string strCode, int iCnt)
|
||||
{
|
||||
//lock (lockSell)
|
||||
{
|
||||
//long iCnt = (long)Math.Floor(fAskAmount/fCurPrice);
|
||||
//iCnt=1;
|
||||
|
||||
while (ULUtil.GetLimitRemainCountRQ() <= 0);
|
||||
|
||||
CPTRADELib.CpTd0311 Td0311Ask = new CPTRADELib.CpTd0311();
|
||||
|
||||
Td0311Ask.SetInputValue(0, "1");
|
||||
@@ -204,8 +186,7 @@ namespace upper_limit_crawler
|
||||
Td0311Ask.SetInputValue(7, "0");
|
||||
Td0311Ask.SetInputValue(8, "03");
|
||||
|
||||
Td0311Ask.BlockRequest2(1);
|
||||
}
|
||||
ULUtil.BlockRequest(Td0311Ask);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
15
UlUtil.cs
15
UlUtil.cs
@@ -5,6 +5,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
@@ -282,5 +283,19 @@ namespace upper_limit_crawler
|
||||
|
||||
return (iTotalSec2 >= iTotalSec1 && iTotalSec2 - iTotalSec1 <= iMinDiff * 60);
|
||||
}
|
||||
|
||||
public static short BlockRequest(CPTRADELib.ICpTdDib obj)
|
||||
{
|
||||
while(GetLimitRemainCountRQ() < 1)
|
||||
Thread.Sleep(500);
|
||||
return obj.BlockRequest2(1);
|
||||
}
|
||||
|
||||
public static short BlockRequest(CPSYSDIBLib.ISysDib obj)
|
||||
{
|
||||
while(GetLimitRemainCountRQ() < 1)
|
||||
Thread.Sleep(500);
|
||||
return obj.BlockRequest2(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user