개발중
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.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||||
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
||||||
this.splitContainer3 = 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.btMATest = new System.Windows.Forms.Button();
|
||||||
this.btTimeSync = new System.Windows.Forms.Button();
|
this.btTimeSync = new System.Windows.Forms.Button();
|
||||||
this.cbStart = new System.Windows.Forms.CheckBox();
|
this.cbStart = new System.Windows.Forms.CheckBox();
|
||||||
@@ -62,7 +63,7 @@
|
|||||||
this.statusBar1 = new System.Windows.Forms.StatusBar();
|
this.statusBar1 = new System.Windows.Forms.StatusBar();
|
||||||
this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
|
this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
|
||||||
this.statusBarPanel2 = 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();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||||
this.splitContainer1.Panel1.SuspendLayout();
|
this.splitContainer1.Panel1.SuspendLayout();
|
||||||
this.splitContainer1.Panel2.SuspendLayout();
|
this.splitContainer1.Panel2.SuspendLayout();
|
||||||
@@ -288,6 +289,7 @@
|
|||||||
//
|
//
|
||||||
// splitContainer2.Panel2
|
// splitContainer2.Panel2
|
||||||
//
|
//
|
||||||
|
this.splitContainer2.Panel2.Controls.Add(this.button1);
|
||||||
this.splitContainer2.Panel2.Controls.Add(this.btLogDump);
|
this.splitContainer2.Panel2.Controls.Add(this.btLogDump);
|
||||||
this.splitContainer2.Panel2.Controls.Add(this.btMATest);
|
this.splitContainer2.Panel2.Controls.Add(this.btMATest);
|
||||||
this.splitContainer2.Panel2.Controls.Add(this.btTimeSync);
|
this.splitContainer2.Panel2.Controls.Add(this.btTimeSync);
|
||||||
@@ -330,6 +332,16 @@
|
|||||||
this.splitContainer3.SplitterDistance = 256;
|
this.splitContainer3.SplitterDistance = 256;
|
||||||
this.splitContainer3.TabIndex = 0;
|
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
|
// btMATest
|
||||||
//
|
//
|
||||||
this.btMATest.Location = new System.Drawing.Point(122, 421);
|
this.btMATest.Location = new System.Drawing.Point(122, 421);
|
||||||
@@ -443,15 +455,15 @@
|
|||||||
this.statusBarPanel2.Name = "statusBarPanel2";
|
this.statusBarPanel2.Name = "statusBarPanel2";
|
||||||
this.statusBarPanel2.Width = 120;
|
this.statusBarPanel2.Width = 120;
|
||||||
//
|
//
|
||||||
// btLogDump
|
// button1
|
||||||
//
|
//
|
||||||
this.btLogDump.Location = new System.Drawing.Point(22, 555);
|
this.button1.Location = new System.Drawing.Point(118, 555);
|
||||||
this.btLogDump.Name = "btLogDump";
|
this.button1.Name = "button1";
|
||||||
this.btLogDump.Size = new System.Drawing.Size(75, 23);
|
this.button1.Size = new System.Drawing.Size(75, 35);
|
||||||
this.btLogDump.TabIndex = 25;
|
this.button1.TabIndex = 25;
|
||||||
this.btLogDump.Text = "Dump Log";
|
this.button1.Text = "Dump Simulation";
|
||||||
this.btLogDump.UseVisualStyleBackColor = true;
|
this.button1.UseVisualStyleBackColor = true;
|
||||||
this.btLogDump.Click += new System.EventHandler(this.btLogDump_Click);
|
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||||
//
|
//
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
@@ -516,6 +528,7 @@
|
|||||||
private System.Windows.Forms.Label lbCacheBalance;
|
private System.Windows.Forms.Label lbCacheBalance;
|
||||||
private System.Windows.Forms.Label lbEvalProfit;
|
private System.Windows.Forms.Label lbEvalProfit;
|
||||||
private System.Windows.Forms.Button btLogDump;
|
private System.Windows.Forms.Button btLogDump;
|
||||||
|
private System.Windows.Forms.Button button1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
93
MainForm.cs
93
MainForm.cs
@@ -4,6 +4,7 @@ using System.Collections;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace upper_limit_crawler
|
namespace upper_limit_crawler
|
||||||
{
|
{
|
||||||
@@ -23,7 +24,7 @@ namespace upper_limit_crawler
|
|||||||
{
|
{
|
||||||
ArrayList m_TraceList = new ArrayList();
|
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;
|
int m_iLastTime = 0;
|
||||||
|
|
||||||
static ULDataMgr m_DataMgr = new ULDataMgr();
|
static ULDataMgr m_DataMgr = new ULDataMgr();
|
||||||
@@ -233,20 +234,71 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
|
|
||||||
List<string> aCodeList = new List<string> {
|
List<string> aCodeList = new List<string> {
|
||||||
"064240",
|
"A064240",
|
||||||
"090410",
|
"A090410",
|
||||||
"208860",
|
"A208860",
|
||||||
"044180",
|
"A044180",
|
||||||
"127160",
|
"A127160",
|
||||||
"123570",
|
"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 strPrevDate = "20160801";
|
||||||
string strDate = "20160801";
|
string strDate = "20160802";
|
||||||
int iTotalProfit = 0;
|
int iTotalProfit = 0;
|
||||||
|
|
||||||
foreach (string code in aCodeList)
|
foreach (string code in aCodeList)
|
||||||
{
|
{
|
||||||
string strCode = "A" + code;
|
string strCode = code[0] == 'A' ? code : "A"+code;
|
||||||
string strCodeName = ULUtil.GetCodeName(strCode);
|
string strCodeName = ULUtil.GetCodeName(strCode);
|
||||||
|
|
||||||
Console.WriteLine("{0}({1})", strCodeName, strCode);
|
Console.WriteLine("{0}({1})", strCodeName, strCode);
|
||||||
@@ -263,7 +315,7 @@ namespace upper_limit_crawler
|
|||||||
stockChart.SetInputValue(4, 1);
|
stockChart.SetInputValue(4, 1);
|
||||||
stockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, 6, 10, 37 });
|
stockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, 6, 10, 37 });
|
||||||
stockChart.SetInputValue(6, 'T');
|
stockChart.SetInputValue(6, 'T');
|
||||||
stockChart.BlockRequest2(1);
|
ULUtil.BlockRequest(stockChart);
|
||||||
int iTimeTest = (int)stockChart.GetDataValue(1, 0);
|
int iTimeTest = (int)stockChart.GetDataValue(1, 0);
|
||||||
int iPrevClosing = stockChart.GetDataValue(5, 0);
|
int iPrevClosing = stockChart.GetDataValue(5, 0);
|
||||||
|
|
||||||
@@ -274,7 +326,7 @@ namespace upper_limit_crawler
|
|||||||
stockChart.SetInputValue(4, 0);
|
stockChart.SetInputValue(4, 0);
|
||||||
stockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, 6, 10, 37 });
|
stockChart.SetInputValue(5, new int[] { 0, 1, 2, 3, 4, 5, 6, 10, 37 });
|
||||||
stockChart.SetInputValue(6, 'T');
|
stockChart.SetInputValue(6, 'T');
|
||||||
stockChart.BlockRequest2(1);
|
ULUtil.BlockRequest(stockChart);
|
||||||
|
|
||||||
int iFieldCnt = stockChart.GetHeaderValue(1);
|
int iFieldCnt = stockChart.GetHeaderValue(1);
|
||||||
string[] astrFieldName = stockChart.GetHeaderValue(2);
|
string[] astrFieldName = stockChart.GetHeaderValue(2);
|
||||||
@@ -293,8 +345,8 @@ namespace upper_limit_crawler
|
|||||||
DataList.Add(new chart_data(iTime, iCurPrice));
|
DataList.Add(new chart_data(iTime, iCurPrice));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stockChart.Continue == 1)
|
if(stockChart.Continue == 1)
|
||||||
stockChart.BlockRequest2(1);
|
ULUtil.BlockRequest(stockChart);
|
||||||
else
|
else
|
||||||
break;
|
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%"));
|
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%"));
|
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;
|
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%"));
|
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%"));
|
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;
|
iTotalAskPrice += iCurPrice * OwnItem.m_iConclusionBalanceCnt;
|
||||||
OwnItem.m_iUnitBEP = 0;
|
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%"));
|
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%"));
|
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;
|
iTotalAskPrice += iCurPrice * OwnItem.m_iConclusionBalanceCnt;
|
||||||
OwnItem.m_iUnitBEP = 0;
|
OwnItem.m_iUnitBEP = 0;
|
||||||
@@ -462,7 +514,12 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
private void btLogDump_Click(object sender, EventArgs e)
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
224
ULBalanceDlg.cs
224
ULBalanceDlg.cs
@@ -38,7 +38,7 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
List<OWN_ITEM> m_OwnList = new List<OWN_ITEM>();
|
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_iLastTime = 0;
|
||||||
int m_iBalanceDelay = BALANCE_DELAY;
|
int m_iBalanceDelay = BALANCE_DELAY;
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ namespace upper_limit_crawler
|
|||||||
{
|
{
|
||||||
m_Td6033.SetInputValue(0, m_DataMgr.GetAccount());
|
m_Td6033.SetInputValue(0, m_DataMgr.GetAccount());
|
||||||
m_Td6033.SetInputValue(2, 50);
|
m_Td6033.SetInputValue(2, 50);
|
||||||
m_Td6033.BlockRequest2(1);
|
ULUtil.BlockRequest(m_Td6033);
|
||||||
|
|
||||||
|
|
||||||
//object[] datalist = new object[]
|
//object[] datalist = new object[]
|
||||||
@@ -177,98 +177,143 @@ namespace upper_limit_crawler
|
|||||||
private void RefreshCurPrice()
|
private void RefreshCurPrice()
|
||||||
{
|
{
|
||||||
Dictionary<string, ULWatchItem> WatchList = m_DataMgr.GetWatchList();
|
Dictionary<string, ULWatchItem> WatchList = m_DataMgr.GetWatchList();
|
||||||
foreach (ListViewItem lvItem in lvBalance.Items)
|
|
||||||
|
foreach(KeyValuePair<string, ULWatchItem> WatchPair in WatchList)
|
||||||
{
|
{
|
||||||
string strCode = lvItem.SubItems[chCode.Index].Text;
|
string strCode = WatchPair.Key;
|
||||||
int iTime = ULUtil.GetCurTimeInt();
|
ULWatchItem WatchItem = WatchPair.Value;
|
||||||
|
OWN_ITEM OwnItem = m_OwnList.Find(itemFind => itemFind.m_strCode == strCode);
|
||||||
|
if(OwnItem == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (WatchList.ContainsKey(strCode) == true)
|
int iTime = WatchItem.m_iCurTime;
|
||||||
|
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;
|
||||||
|
OwnItem.m_iMaxPrice = Math.Max(iCurPrice, OwnItem.m_iMaxPrice);
|
||||||
|
|
||||||
|
|
||||||
|
// loss cut
|
||||||
|
if(iCurPrice <= OwnItem.m_iUnitBEP * (1.0f - m_DataMgr.m_Setting.m_fLossCut))
|
||||||
{
|
{
|
||||||
ULWatchItem WatchItem = WatchList[strCode];
|
m_DataMgr.GetTrader().SellCurPrice(OwnItem.m_strCode, OwnItem.m_iPayBalance);
|
||||||
OWN_ITEM OwnItem = m_OwnList.Find(itemFind => itemFind.m_strCode == strCode);
|
m_OwnList.Remove(OwnItem);
|
||||||
if (OwnItem == null)
|
m_DataMgr.RemoveWatch(strCode);
|
||||||
continue;
|
m_DataMgr.AddLosscutItem(strCode);
|
||||||
|
|
||||||
int iDisplayCurPrice = 0;
|
int iProfit = iCurPrice-(int)OwnItem.m_iUnitBEP;
|
||||||
if (lvItem.SubItems[chCurPrice.Index].Text.Length > 0)
|
float fProfitRate = iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f;
|
||||||
iDisplayCurPrice = int.Parse(Regex.Replace(lvItem.SubItems[chCurPrice.Index].Text, @"\D", ""));
|
|
||||||
|
|
||||||
if (WatchItem.m_iCurPrice != iDisplayCurPrice)
|
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, true);
|
||||||
|
|
||||||
|
// own에서 삭제하고 미체결 리스트에 넣고, watch에서도 뺀다
|
||||||
|
|
||||||
|
// 미체결 잔량 취소
|
||||||
|
}
|
||||||
|
// trailing
|
||||||
|
else if(iCurPrice <= OwnItem.m_iMaxPrice - OwnItem.m_iUnitBEP * m_DataMgr.m_Setting.m_fTrailing)
|
||||||
|
{
|
||||||
|
float f5MASlope = WatchItem.GetPrev5MASlope(iTime);
|
||||||
|
if(float.IsNaN(f5MASlope) || f5MASlope > -0.0100f)
|
||||||
{
|
{
|
||||||
int iCurPrice = WatchItem.m_iCurPrice;
|
Console.WriteLine(string.Format("[{0}] [{1}] 트레일링 매도 대기. 5ma 상승 중 {2}원 ({3})", iTime, OwnItem.m_strCodeName, iCurPrice, (iCurPrice / (float)OwnItem.m_iUnitBEP - 1.0f).ToString("0.00%")));
|
||||||
int iComp = iCurPrice - (int)OwnItem.m_iUnitBEP; // or OwnItem.m_dConclusionUnitPrice
|
continue;
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
// loss cut
|
|
||||||
if (iCurPrice <= OwnItem.m_iUnitBEP * (1.0f - m_DataMgr.m_Setting.m_fLossCut))
|
|
||||||
{
|
|
||||||
m_DataMgr.GetTrader().SellCurPrice(OwnItem.m_strCode, OwnItem.m_iPayBalance);
|
|
||||||
m_OwnList.Remove(OwnItem);
|
|
||||||
m_DataMgr.RemoveWatch(strCode);
|
|
||||||
m_DataMgr.AddLosscutItem(strCode);
|
|
||||||
|
|
||||||
int iProfit = iCurPrice-(int)OwnItem.m_iUnitBEP;
|
|
||||||
float fProfitRate = iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f;
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
// own에서 삭제하고 미체결 리스트에 넣고, watch에서도 뺀다
|
|
||||||
|
|
||||||
// 미체결 잔량 취소
|
|
||||||
}
|
|
||||||
// trailing
|
|
||||||
else if (iCurPrice <= OwnItem.m_iMaxPrice - OwnItem.m_iUnitBEP * m_DataMgr.m_Setting.m_fTrailing)
|
|
||||||
{
|
|
||||||
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%")));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_DataMgr.GetTrader().SellCurPrice(OwnItem.m_strCode, OwnItem.m_iPayBalance);
|
|
||||||
m_OwnList.Remove(OwnItem);
|
|
||||||
m_DataMgr.RemoveWatch(strCode);
|
|
||||||
|
|
||||||
int iProfit = iCurPrice-(int)OwnItem.m_iUnitBEP;
|
|
||||||
float fProfitRate = iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f;
|
|
||||||
|
|
||||||
ULUtil.Trace("[{0}] 트레일링 매도 {1}원 ({2}:{3}) (5MA slop:{4}) {5}",
|
|
||||||
OwnItem.m_strCodeName,
|
|
||||||
iCurPrice,
|
|
||||||
iCurPrice - OwnItem.m_iUnitBEP,
|
|
||||||
(iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f).ToString("0.00%"),
|
|
||||||
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.GetTrader().SellCurPrice(OwnItem.m_strCode, OwnItem.m_iPayBalance);
|
||||||
|
m_OwnList.Remove(OwnItem);
|
||||||
|
m_DataMgr.RemoveWatch(strCode);
|
||||||
|
|
||||||
|
int iProfit = iCurPrice-(int)OwnItem.m_iUnitBEP;
|
||||||
|
float fProfitRate = iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f;
|
||||||
|
|
||||||
|
ULUtil.Trace("[{0}] 트레일링 매도 {1}원 ({2}:{3}) (5MA slop:{4}) {5}",
|
||||||
|
OwnItem.m_strCodeName,
|
||||||
|
iCurPrice,
|
||||||
|
iCurPrice - OwnItem.m_iUnitBEP,
|
||||||
|
(iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f).ToString("0.00%"),
|
||||||
|
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, 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
|
// steadiness
|
||||||
//if (WatchItem.GetAvgDiff(iTime) < WatchItem.m_iPrevClosing*0.01)
|
//if (WatchItem.GetAvgDiff(iTime) < WatchItem.m_iPrevClosing*0.01)
|
||||||
//{
|
//{
|
||||||
@@ -284,8 +329,8 @@ namespace upper_limit_crawler
|
|||||||
// WatchItem.m_iHighestPrice);
|
// 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);
|
// 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)
|
private void RefreshData(object sender, EventArgs e)
|
||||||
@@ -299,8 +344,7 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
int iDeltaT = iCurTime-m_iLastTime;
|
int iDeltaT = iCurTime-m_iLastTime;
|
||||||
m_iBalanceDelay-=iDeltaT;
|
m_iBalanceDelay-=iDeltaT;
|
||||||
if((m_DataMgr.GetTrader().HasConclusion() == true || m_iBalanceDelay<=0)
|
if(m_DataMgr.GetTrader().HasConclusion() == true || m_iBalanceDelay<=0)
|
||||||
&& ULUtil.GetLimitRemainCountRQ() > 20)
|
|
||||||
{
|
{
|
||||||
RefreshBalance();
|
RefreshBalance();
|
||||||
m_iBalanceDelay=BALANCE_DELAY;
|
m_iBalanceDelay=BALANCE_DELAY;
|
||||||
|
|||||||
78
ULDataMgr.cs
78
ULDataMgr.cs
@@ -73,6 +73,9 @@ namespace upper_limit_crawler
|
|||||||
List<BID_LOG> m_BidLogs = new List<BID_LOG>();
|
List<BID_LOG> m_BidLogs = new List<BID_LOG>();
|
||||||
List<ASK_LOG> m_AskLogs = new List<ASK_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_iCacheBalance = 0;
|
||||||
long m_iEvalProfit = 0;
|
long m_iEvalProfit = 0;
|
||||||
|
|
||||||
@@ -86,9 +89,11 @@ namespace upper_limit_crawler
|
|||||||
else
|
else
|
||||||
m_AvailableList = new List<string>();
|
m_AvailableList = new List<string>();
|
||||||
|
|
||||||
m_BidLogs = GetBidLog(m_strToday);
|
m_BidLogs = GetBidLog(m_strToday, true);
|
||||||
m_AskLogs = GetAskLog(m_strToday);
|
m_AskLogs = GetAskLog(m_strToday, true);
|
||||||
}
|
m_BidLogsSimul = GetBidLog(m_strToday, false);
|
||||||
|
m_AskLogsSimul = GetAskLog(m_strToday, false);
|
||||||
|
}
|
||||||
|
|
||||||
public void Init()
|
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();
|
BID_LOG log = new BID_LOG();
|
||||||
log.m_strCode = strCode;
|
log.m_strCode = strCode;
|
||||||
@@ -233,23 +238,31 @@ namespace upper_limit_crawler
|
|||||||
log.m_iTime = iTime;
|
log.m_iTime = iTime;
|
||||||
log.m_iBidPrice = iBidPrice;
|
log.m_iBidPrice = iBidPrice;
|
||||||
log.m_f5MAslope = f5MAslope;
|
log.m_f5MAslope = f5MAslope;
|
||||||
m_BidLogs.Add(log);
|
|
||||||
|
|
||||||
m_DB.Insert(strKey, m_BidLogs);
|
if(bReal == true)
|
||||||
|
{
|
||||||
|
m_BidLogs.Add(log);
|
||||||
|
m_DB.Insert(strKey, m_BidLogs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_BidLogsSimul.Add(log);
|
||||||
|
m_DB.Insert(strKey, m_BidLogsSimul);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<BID_LOG> GetBidLog(string strDate)
|
List<BID_LOG> GetBidLog(string strDate, bool bReal)
|
||||||
{
|
{
|
||||||
string strKey = "bid-"+strDate;
|
string strKey = bReal ? "bid-"+m_strToday : "bid-simul-"+m_strToday;
|
||||||
if(m_DB.IsExist(strKey) == true)
|
if(m_DB.IsExist(strKey) == true)
|
||||||
return m_DB.Get<List<BID_LOG>>(strKey);
|
return m_DB.Get<List<BID_LOG>>(strKey);
|
||||||
else
|
else
|
||||||
return new List<BID_LOG>();
|
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();
|
ASK_LOG log = new ASK_LOG();
|
||||||
log.m_strCode = strCode;
|
log.m_strCode = strCode;
|
||||||
@@ -260,33 +273,52 @@ namespace upper_limit_crawler
|
|||||||
log.m_bLosscut = bLosscut;
|
log.m_bLosscut = bLosscut;
|
||||||
log.m_iProfit = iProfit;
|
log.m_iProfit = iProfit;
|
||||||
log.m_fProfitRate = fProfitRate;
|
log.m_fProfitRate = fProfitRate;
|
||||||
m_AskLogs.Add(log);
|
|
||||||
|
|
||||||
m_DB.Insert(strKey, m_AskLogs);
|
if(bReal == true)
|
||||||
|
{
|
||||||
|
m_AskLogs.Add(log);
|
||||||
|
m_DB.Insert(strKey, m_AskLogs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_AskLogsSimul.Add(log);
|
||||||
|
m_DB.Insert(strKey, m_AskLogsSimul);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ASK_LOG> GetAskLog(string strDate)
|
List<ASK_LOG> GetAskLog(string strDate, bool bReal)
|
||||||
{
|
{
|
||||||
string strKey = "ask-"+strDate;
|
string strKey = bReal ? "ask-"+m_strToday : "ask-simul-"+m_strToday;
|
||||||
|
|
||||||
if(m_DB.IsExist(strKey) == true)
|
if(m_DB.IsExist(strKey) == true)
|
||||||
return m_DB.Get<List<ASK_LOG>>(strKey);
|
return m_DB.Get<List<ASK_LOG>>(strKey);
|
||||||
else
|
else
|
||||||
return new List<ASK_LOG>();
|
return new List<ASK_LOG>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DumpLog()
|
public void DumpLog(bool bReal)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
foreach(string strCode in m_AvailableList)
|
foreach(string strCode in m_AvailableList)
|
||||||
sb.AppendLine(strCode+",");
|
sb.AppendLine("\"" +strCode+ "\",");
|
||||||
|
|
||||||
foreach(BID_LOG log in m_BidLogs)
|
if(bReal == true)
|
||||||
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)
|
foreach(BID_LOG log in m_BidLogs)
|
||||||
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%"));
|
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)
|
||||||
System.IO.File.WriteAllText(ULUtil.GetLogDir()+"dblog-"+m_strToday+".csv", sb.ToString(), Encoding.UTF8);
|
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;
|
ULDataMgr m_DataMgr;
|
||||||
CPSYSDIBLib.CpSvrNew7043 m_7043 = null;
|
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_iMonitorDelay = 0;
|
||||||
int m_iLastTime = 0;
|
int m_iLastTime = 0;
|
||||||
bool m_bRequesting = false;
|
bool m_bRequesting = false;
|
||||||
@@ -62,13 +62,13 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
bool RefreshMonitorItem()
|
bool RefreshMonitorItem()
|
||||||
{
|
{
|
||||||
if (m_bRequesting == true || ULUtil.GetLimitRemainCountRQ() < 30)
|
if (m_bRequesting == true)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_bRequesting = true;
|
m_bRequesting = true;
|
||||||
m_7043.SetInputValue(7, (short)(m_DataMgr.m_Setting.m_fSearchMin * 100));
|
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));
|
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();
|
lvWatch.Items.Clear();
|
||||||
int iIdx = 1;
|
int iIdx = 1;
|
||||||
@@ -121,8 +121,8 @@ namespace upper_limit_crawler
|
|||||||
}
|
}
|
||||||
|
|
||||||
bContinue = (m_7043.Continue == 1);
|
bContinue = (m_7043.Continue == 1);
|
||||||
if (bContinue == true && ULUtil.GetLimitRemainCountRQ() >= 30)
|
if (bContinue == true)
|
||||||
iResult = m_7043.BlockRequest2(1);
|
iResult = ULUtil.BlockRequest(m_7043);
|
||||||
}
|
}
|
||||||
|
|
||||||
//foreach (ColumnHeader col in lvWatch.Columns)
|
//foreach (ColumnHeader col in lvWatch.Columns)
|
||||||
@@ -181,7 +181,7 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
// bid and add to black list
|
// bid and add to black list
|
||||||
m_DataMgr.GetTrader().Buy(strCode, item.m_iCurPrice, (int)m_DataMgr.m_Setting.m_fBidAmount);
|
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);
|
m_DataMgr.AddPostphoneItem(iTime, strCode);
|
||||||
|
|
||||||
ULUtil.Trace("[{0}] 조건 매수 {1}원 ({2}) (5MA slop:{3})",
|
ULUtil.Trace("[{0}] 조건 매수 {1}원 ({2}) (5MA slop:{3})",
|
||||||
|
|||||||
77
ULTrader.cs
77
ULTrader.cs
@@ -143,69 +143,50 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
public void Buy(string strCode, int iUnitPrice, int iBidAmount)
|
public void Buy(string strCode, int iUnitPrice, int iBidAmount)
|
||||||
{
|
{
|
||||||
//lock(lockBuy)
|
int iCnt = iBidAmount / iUnitPrice;
|
||||||
{
|
|
||||||
while (ULUtil.GetLimitRemainCountRQ() <= 0) ;
|
|
||||||
|
|
||||||
int iCnt = iBidAmount / iUnitPrice;
|
CPTRADELib.CpTd0311 Td0311Bid = new CPTRADELib.CpTd0311();
|
||||||
|
Td0311Bid.SetInputValue(0, "2");
|
||||||
|
Td0311Bid.SetInputValue(1, m_astrAccounts[0]);
|
||||||
|
Td0311Bid.SetInputValue(3, strCode);
|
||||||
|
Td0311Bid.SetInputValue(4, iCnt); // 수량
|
||||||
|
Td0311Bid.SetInputValue(5, 0); // 단가
|
||||||
|
Td0311Bid.SetInputValue(7, "0");
|
||||||
|
Td0311Bid.SetInputValue(8, "03");
|
||||||
|
|
||||||
CPTRADELib.CpTd0311 Td0311Bid = new CPTRADELib.CpTd0311();
|
ULUtil.BlockRequest(Td0311Bid);
|
||||||
Td0311Bid.SetInputValue(0, "2");
|
|
||||||
Td0311Bid.SetInputValue(1, m_astrAccounts[0]);
|
|
||||||
Td0311Bid.SetInputValue(3, strCode);
|
|
||||||
Td0311Bid.SetInputValue(4, iCnt); // 수량
|
|
||||||
Td0311Bid.SetInputValue(5, 0); // 단가
|
|
||||||
Td0311Bid.SetInputValue(7, "0");
|
|
||||||
Td0311Bid.SetInputValue(8, "03");
|
|
||||||
|
|
||||||
Td0311Bid.BlockRequest2(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Sell(string strCode, int iUnitPrice, int iCnt)
|
public void Sell(string strCode, int iUnitPrice, int iCnt)
|
||||||
{
|
{
|
||||||
//lock (lockSell)
|
while (ULUtil.GetLimitRemainCountRQ() <= 0) ;
|
||||||
{
|
|
||||||
//long iCnt = (long)Math.Floor(fAskAmount/fCurPrice);
|
|
||||||
//iCnt=1;
|
|
||||||
|
|
||||||
while (ULUtil.GetLimitRemainCountRQ() <= 0) ;
|
CPTRADELib.CpTd0311 Td0311Ask = new CPTRADELib.CpTd0311();
|
||||||
|
|
||||||
CPTRADELib.CpTd0311 Td0311Ask = new CPTRADELib.CpTd0311();
|
Td0311Ask.SetInputValue(0, "1");
|
||||||
|
Td0311Ask.SetInputValue(1, m_astrAccounts[0]);
|
||||||
|
Td0311Ask.SetInputValue(3, strCode);
|
||||||
|
Td0311Ask.SetInputValue(4, iCnt); // 수량
|
||||||
|
Td0311Ask.SetInputValue(5, iUnitPrice); // 단가
|
||||||
|
Td0311Ask.SetInputValue(7, "0");
|
||||||
|
Td0311Ask.SetInputValue(8, "03");
|
||||||
|
|
||||||
Td0311Ask.SetInputValue(0, "1");
|
ULUtil.BlockRequest(Td0311Ask);
|
||||||
Td0311Ask.SetInputValue(1, m_astrAccounts[0]);
|
|
||||||
Td0311Ask.SetInputValue(3, strCode);
|
|
||||||
Td0311Ask.SetInputValue(4, iCnt); // 수량
|
|
||||||
Td0311Ask.SetInputValue(5, iUnitPrice); // 단가
|
|
||||||
Td0311Ask.SetInputValue(7, "0");
|
|
||||||
Td0311Ask.SetInputValue(8, "03");
|
|
||||||
|
|
||||||
Td0311Ask.BlockRequest2(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SellCurPrice(string strCode, int iCnt)
|
public void SellCurPrice(string strCode, int iCnt)
|
||||||
{
|
{
|
||||||
//lock (lockSell)
|
CPTRADELib.CpTd0311 Td0311Ask = new CPTRADELib.CpTd0311();
|
||||||
{
|
|
||||||
//long iCnt = (long)Math.Floor(fAskAmount/fCurPrice);
|
|
||||||
//iCnt=1;
|
|
||||||
|
|
||||||
while (ULUtil.GetLimitRemainCountRQ() <= 0);
|
Td0311Ask.SetInputValue(0, "1");
|
||||||
|
Td0311Ask.SetInputValue(1, m_astrAccounts[0]);
|
||||||
|
Td0311Ask.SetInputValue(3, strCode);
|
||||||
|
Td0311Ask.SetInputValue(4, iCnt); // 수량
|
||||||
|
Td0311Ask.SetInputValue(5, 0); // 단가
|
||||||
|
Td0311Ask.SetInputValue(7, "0");
|
||||||
|
Td0311Ask.SetInputValue(8, "03");
|
||||||
|
|
||||||
CPTRADELib.CpTd0311 Td0311Ask = new CPTRADELib.CpTd0311();
|
ULUtil.BlockRequest(Td0311Ask);
|
||||||
|
|
||||||
Td0311Ask.SetInputValue(0, "1");
|
|
||||||
Td0311Ask.SetInputValue(1, m_astrAccounts[0]);
|
|
||||||
Td0311Ask.SetInputValue(3, strCode);
|
|
||||||
Td0311Ask.SetInputValue(4, iCnt); // 수량
|
|
||||||
Td0311Ask.SetInputValue(5, 0); // 단가
|
|
||||||
Td0311Ask.SetInputValue(7, "0");
|
|
||||||
Td0311Ask.SetInputValue(8, "03");
|
|
||||||
|
|
||||||
Td0311Ask.BlockRequest2(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
UlUtil.cs
15
UlUtil.cs
@@ -5,6 +5,7 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
@@ -282,5 +283,19 @@ namespace upper_limit_crawler
|
|||||||
|
|
||||||
return (iTotalSec2 >= iTotalSec1 && iTotalSec2 - iTotalSec1 <= iMinDiff * 60);
|
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