개발중
This commit is contained in:
224
ULBalanceDlg.cs
224
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,98 +177,143 @@ namespace upper_limit_crawler
|
||||
private void RefreshCurPrice()
|
||||
{
|
||||
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;
|
||||
int iTime = ULUtil.GetCurTimeInt();
|
||||
string strCode = WatchPair.Key;
|
||||
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];
|
||||
OWN_ITEM OwnItem = m_OwnList.Find(itemFind => itemFind.m_strCode == strCode);
|
||||
if (OwnItem == null)
|
||||
continue;
|
||||
m_DataMgr.GetTrader().SellCurPrice(OwnItem.m_strCode, OwnItem.m_iPayBalance);
|
||||
m_OwnList.Remove(OwnItem);
|
||||
m_DataMgr.RemoveWatch(strCode);
|
||||
m_DataMgr.AddLosscutItem(strCode);
|
||||
|
||||
int iDisplayCurPrice = 0;
|
||||
if (lvItem.SubItems[chCurPrice.Index].Text.Length > 0)
|
||||
iDisplayCurPrice = int.Parse(Regex.Replace(lvItem.SubItems[chCurPrice.Index].Text, @"\D", ""));
|
||||
int iProfit = iCurPrice-(int)OwnItem.m_iUnitBEP;
|
||||
float fProfitRate = iCurPrice/(float)OwnItem.m_iUnitBEP-1.0f;
|
||||
|
||||
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;
|
||||
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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
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, 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;
|
||||
|
||||
Reference in New Issue
Block a user