222 lines
6.5 KiB
C#
222 lines
6.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace upper_limit_crawler
|
|
{
|
|
public partial class ULBalanceDlg : Form
|
|
{
|
|
const int BALANCE_DELAY = 10000;
|
|
const int PRICE_DELAY = 500;
|
|
|
|
public class OWN_ITEM
|
|
{
|
|
public string m_strCodeName;
|
|
public int m_iPayBalance;
|
|
public int m_iPayUnitPrice;
|
|
public int m_iConclusionBalanceCnt;
|
|
public long m_iEvaluationPrice;
|
|
public long m_iEvaluationProfit;
|
|
public double m_dReturn;
|
|
public string m_strCode;
|
|
public int m_iAskableCnt;
|
|
public double m_dConclusionUnitPrice;
|
|
public long m_iUnitBEP;
|
|
|
|
public int m_iCurPrice;
|
|
};
|
|
|
|
|
|
List<OWN_ITEM> m_OwnList = new List<OWN_ITEM>();
|
|
DSCBO1Lib.StockMst2 m_StockMst2 = new DSCBO1Lib.StockMst2();
|
|
|
|
Timer m_MainTimer = new Timer();
|
|
int m_iLastTime = 0;
|
|
int m_iBalanceDelay = BALANCE_DELAY;
|
|
int m_iPriceDelay = PRICE_DELAY;
|
|
|
|
ULDataMgr m_DataMgr = null;
|
|
|
|
CPTRADELib.CpTd6033 m_Td6033 = new CPTRADELib.CpTd6033();
|
|
|
|
public ULBalanceDlg(ULDataMgr DataMgr)
|
|
{
|
|
m_DataMgr = DataMgr;
|
|
|
|
InitializeComponent();
|
|
MainForm.SetDoubleBuffered(lvBalance);
|
|
btSell.Enabled = false;
|
|
|
|
RefreshBalance();
|
|
|
|
m_MainTimer.Interval=15;
|
|
m_MainTimer.Tick+=RefreshData;
|
|
m_MainTimer.Start();
|
|
}
|
|
|
|
private void RefreshBalance()
|
|
{
|
|
m_Td6033.SetInputValue(0, m_DataMgr.GetAccount());
|
|
m_Td6033.SetInputValue(2, 50);
|
|
|
|
m_Td6033.BlockRequest2(1);
|
|
|
|
lvBalance.Items.Clear();
|
|
m_OwnList.Clear();
|
|
|
|
int iCnt = m_Td6033.GetHeaderValue(7);
|
|
for(int i = 0; i<iCnt; i++)
|
|
{
|
|
string strCodeName = m_Td6033.GetDataValue(0, i);
|
|
int iPayBalance = m_Td6033.GetDataValue(3, i); // 결제 잔고수량
|
|
int iPayUnitPrice = m_Td6033.GetDataValue(4, i); // 결제 장부단가
|
|
int iConclusionBalanceCnt = m_Td6033.GetDataValue(7, i); // 체결 잔고수량
|
|
long iEvaluationPrice = m_Td6033.GetDataValue(9, i); // 평가금액 : 보유수량x현재가
|
|
long iEvaluationProfit = m_Td6033.GetDataValue(10, i); // 평가손익
|
|
double dReturn = m_Td6033.GetDataValue(11, i); // 수익률
|
|
string strCode = m_Td6033.GetDataValue(12, i);
|
|
int iAskableCnt = m_Td6033.GetDataValue(15, i); // 매도 가능 수량
|
|
double dConclusionUnitPrice = m_Td6033.GetDataValue(17, i); // 체결 장부단가
|
|
long iUnitBEP = m_Td6033.GetDataValue(18, i); // 손익단가 : 수수료 포함 순익 분기점 Break-Even Point
|
|
|
|
int iCurPrice = (int)(iEvaluationPrice/iConclusionBalanceCnt);
|
|
|
|
OWN_ITEM item = new OWN_ITEM();
|
|
item.m_strCodeName = strCodeName;
|
|
item.m_iPayBalance = iPayBalance;
|
|
item.m_iPayUnitPrice = iPayUnitPrice;
|
|
item.m_iConclusionBalanceCnt = iConclusionBalanceCnt;
|
|
item.m_iEvaluationPrice = iEvaluationPrice;
|
|
item.m_iEvaluationProfit = iEvaluationProfit;
|
|
item.m_dReturn = dReturn;
|
|
item.m_strCode = strCode;
|
|
item.m_iAskableCnt = iAskableCnt;
|
|
item.m_dConclusionUnitPrice = dConclusionUnitPrice;
|
|
item.m_iUnitBEP = iUnitBEP;
|
|
item.m_iCurPrice = iCurPrice;
|
|
m_OwnList.Add(item);
|
|
|
|
string[] row = { strCode, strCodeName, dConclusionUnitPrice.ToString("###,###,##0"),
|
|
iUnitBEP.ToString("###,###,##0"), iCurPrice.ToString("###,###,##0"),
|
|
iEvaluationProfit.ToString("###,###,##0"), iConclusionBalanceCnt.ToString("###,###,##0"),
|
|
iEvaluationPrice.ToString("###,###,##0"), dReturn.ToString("#,##0.00")+"%" };
|
|
var listViewItem = new ListViewItem(row);
|
|
lvBalance.Items.Add(listViewItem);
|
|
|
|
UlUtil.Trace(string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}",
|
|
strCodeName, iPayBalance, iPayUnitPrice,
|
|
iConclusionBalanceCnt, iEvaluationPrice, iEvaluationProfit,
|
|
dReturn, strCode, iAskableCnt, dConclusionUnitPrice, iUnitBEP));
|
|
}
|
|
|
|
foreach(ColumnHeader col in lvBalance.Columns)
|
|
col.Width=-2;
|
|
}
|
|
|
|
private void RefreshCurPrice()
|
|
{
|
|
if (m_OwnList.Count <= 0)
|
|
return;
|
|
|
|
string strPriceList = "";
|
|
foreach(OWN_ITEM item in m_OwnList)
|
|
{
|
|
if (strPriceList.Length > 0)
|
|
strPriceList += ",";
|
|
strPriceList += item.m_strCode;
|
|
}
|
|
|
|
m_StockMst2.SetInputValue(0, strPriceList);
|
|
m_StockMst2.BlockRequest2(1);
|
|
|
|
int iCnt = m_StockMst2.GetHeaderValue(0);
|
|
for(int i=0; i<iCnt; i++)
|
|
{
|
|
string strCode = m_StockMst2.GetDataValue(0, i);
|
|
int iCurPrice = m_StockMst2.GetDataValue(3, i);
|
|
|
|
OWN_ITEM listItem = m_OwnList.First(item => item.m_strCode == strCode);
|
|
if (listItem != null)
|
|
listItem.m_iCurPrice = iCurPrice;
|
|
|
|
ListViewItem lvItem = lvBalance.FindItemWithText(strCode);
|
|
if (lvItem != null)
|
|
{
|
|
lvItem.SubItems[chCurPrice.Index].Text = iCurPrice.ToString("###,###,##0");
|
|
lvItem.SubItems[chUnitProfit.Index].Text = (iCurPrice - listItem.m_iUnitBEP).ToString("###,###,##0");
|
|
lvItem.SubItems[chEvaluationPrice.Index].Text = (iCurPrice*listItem.m_iConclusionBalanceCnt).ToString("###,###,##0");
|
|
lvItem.SubItems[chProfitRate.Index].Text = (iCurPrice / (float)listItem.m_iUnitBEP - 1.0f).ToString("#,##0.00%");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void RefreshData(object sender, EventArgs e)
|
|
{
|
|
int iCurTime = Environment.TickCount;
|
|
if(m_iLastTime==0)
|
|
{
|
|
m_iLastTime=iCurTime;
|
|
return;
|
|
}
|
|
|
|
int iDeltaT = iCurTime-m_iLastTime;
|
|
m_iBalanceDelay-=iDeltaT;
|
|
if(m_iBalanceDelay<=0 && UlUtil.GetLimitRemainCountRQ() > 20)
|
|
{
|
|
RefreshBalance();
|
|
m_iBalanceDelay=BALANCE_DELAY;
|
|
}
|
|
|
|
m_iPriceDelay -= iDeltaT;
|
|
if(m_iPriceDelay<= 0 && UlUtil.GetLimitRemainCountRQ() >= m_OwnList.Count)
|
|
{
|
|
RefreshCurPrice();
|
|
m_iPriceDelay = PRICE_DELAY;
|
|
}
|
|
|
|
|
|
m_iLastTime=iCurTime;
|
|
}
|
|
|
|
private void btRefresh_Click(object sender, EventArgs e)
|
|
{
|
|
RefreshBalance();
|
|
}
|
|
|
|
private void btSell_Click(object sender, EventArgs e)
|
|
{
|
|
foreach(ListViewItem item in lvBalance.SelectedItems)
|
|
{
|
|
string strCode = item.SubItems[chCode.Index].Text;
|
|
int iCnt = int.Parse(item.SubItems[chBalance.Index].Text);
|
|
m_DataMgr.GetTrader().SellCurPrice(strCode, iCnt);
|
|
|
|
UlUtil.Trace("");
|
|
}
|
|
}
|
|
|
|
private void btSellAll_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (ListViewItem item in lvBalance.Items)
|
|
{
|
|
string strCode = item.SubItems[chCode.Index].Text;
|
|
int iCnt = int.Parse(item.SubItems[chBalance.Index].Text);
|
|
m_DataMgr.GetTrader().SellCurPrice(strCode, iCnt);
|
|
|
|
UlUtil.Trace("");
|
|
}
|
|
}
|
|
|
|
private void lvBalance_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
|
|
{
|
|
btSell.Enabled = (lvBalance.SelectedItems.Count > 0);
|
|
}
|
|
}
|
|
}
|