- 시뮬레이션의 파라미터를 실제에서 조정할 수 있도록

- 얼마 이하의 매수, 매도 체결은 무시하도록
This commit is contained in:
2017-03-20 11:33:41 +09:00
parent 74e599d6bc
commit 24fe10afd8
5 changed files with 563 additions and 38 deletions

View File

@@ -31,21 +31,14 @@ namespace AutoSellerNS
public List<int> m_PriceList = new List<int>();
public double m_dCheckCountLimit = 5;
double m_dFastSD = 0.75;
double m_dFastUpCnt = 0.05;
double m_dFastDownCnt = 0.05;
double m_dSlowSD = 0.2;
double m_dSlowUpCnt = 0.4;
double m_dSlowDownCnt = 0.4;
int m_iTimeLimit = 5;
int m_iPrevTime = 0;
double m_dTimeSub = 0.02;
public void OnRecievedPrice()
{
bool bReal = (m_StockCur.GetHeaderValue(19) == '2');
m_iCurPrice = m_StockCur.GetHeaderValue(13);
int iTime = m_StockCur.GetHeaderValue(18); // *** 초단위 시간 확인
int iTime = m_StockCur.GetHeaderValue(18);
int iConclusionCnt = m_StockCur.GetHeaderValue(17);
int iTimeDiff = 0;
if(m_iPrevTime > 0)
@@ -57,22 +50,22 @@ namespace AutoSellerNS
double dAverage = (float)m_PriceList.Average();
double sumOfSquaresOfDifferences = m_PriceList.Select(val => Math.Pow((val-dAverage)/m_CybosHelper.GetUnitValue(val), 2)).Sum();
double dStdDev = Math.Sqrt(sumOfSquaresOfDifferences / m_PriceList.Count);
if(dStdDev >= m_dFastSD)
if(dStdDev >= Config.GetFastSD())
{
if(m_iCurPrice >= dAverage)
m_dCheckCountLimit += m_dFastUpCnt;
m_dCheckCountLimit += Config.GetFastUp();
else
m_dCheckCountLimit -= m_dFastDownCnt;
m_dCheckCountLimit -= Config.GetFastDown();
}
else if(dStdDev <= m_dSlowSD)
else if(dStdDev <= Config.GetSlowSD())
{
if(m_iCurPrice >= dAverage)
m_dCheckCountLimit += m_dSlowUpCnt;
m_dCheckCountLimit += Config.GetSlowUp();
else
m_dCheckCountLimit -= m_dSlowDownCnt;
m_dCheckCountLimit -= Config.GetSlowDown();
}
m_dCheckCountLimit -= iTimeDiff*m_dTimeSub;
m_dCheckCountLimit -= iTimeDiff*Config.GetTimeDown();
if(m_iCurPrice > m_iMaxPrice)
@@ -83,10 +76,13 @@ namespace AutoSellerNS
int iAskPrice = m_StockCur.GetHeaderValue(7);
int iBidPrice = m_StockCur.GetHeaderValue(8);
if(m_iCurPrice <= iBidPrice)
m_iCheckCount++;
else
m_iCheckCount = 0;
if(m_iCurPrice*iConclusionCnt > Config.GetIgnorePrice())
{
if(m_iCurPrice <= iBidPrice)
m_iCheckCount++;
else
m_iCheckCount = 0;
}
if(m_iCheckCount >= m_dCheckCountLimit && m_Listener.IsSelling() == true)
{
@@ -111,7 +107,7 @@ namespace AutoSellerNS
m_iMaxPrice));
}
if(iTimeDiff >= m_iTimeLimit)
if(iTimeDiff >= Config.GetTimeLimit())
{
m_CybosHelper.SellItem(m_strCode, m_Listener.GetSellableCount(m_strCode), m_aiAskPrice[0]);
Util.Log(Util.LOG_TYPE.SELL, string.Format("[시간제한 매도] {0} ({1}초) (현재가 {2:n0}원, 최고가 {3:n0}원)",