잡다한 에러수정

This commit is contained in:
kyh
2022-11-04 15:18:54 +09:00
parent 7a53c9b8d1
commit e482ef1708
8 changed files with 122 additions and 40 deletions

View File

@@ -412,7 +412,7 @@ namespace Million_Buyer
sw.Stop(); sw.Stop();
if (sw.Elapsed.TotalSeconds > 1) if (sw.Elapsed.TotalSeconds > 1)
InsertLog("Execute 계산 시간 : " + sw.Elapsed.ToString()); InsertLog("Execute 계산 시간 : " + sw.Elapsed.ToString());
var minDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Min(); var minDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Min();
var maxDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Max().AddHours(1); var maxDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Max().AddHours(1);
@@ -425,9 +425,24 @@ namespace Million_Buyer
#region 사고 파는 로직 #region 사고 파는 로직
//최신 데이터 가져오기 //최신 데이터 가져오기
var recentlyData = dic[MCandleTimeType.M1][dic[MCandleTimeType.M1].Count - 1]; var recentlyDataList = dic[MCandleTimeType.M1].Where(t=>t.RecentlyDataFlag).ToList();
if (recentlyDataList.Count == 0)
continue;
var maxTime = recentlyDataList.Select(t => t.DateTime).Max();
var recentlyData = recentlyDataList.FirstOrDefault(t => t.DateTime == maxTime);
if (recentlyData == null) if (recentlyData == null)
continue; continue;
// Parent Recently Data는 indicator에 따라 달라질수 있으므로 전부다 처리한 후 초기화
foreach (var data in dic)
{
var recentlyList = data.Value.Where(t => t.RecentlyDataFlag).ToList();
foreach (var recentlyItem in recentlyList)
recentlyItem.RecentlyDataFlag = false;
}
/* /*
* 로직 설명 * 로직 설명
* 1. Buy List에 있는지 확인 * 1. Buy List에 있는지 확인
@@ -473,6 +488,11 @@ namespace Million_Buyer
{ {
recentlyData.BuyCount = Math.Round(cycleBuyMoney / recentlyData.BuyValue, 8); recentlyData.BuyCount = Math.Round(cycleBuyMoney / recentlyData.BuyValue, 8);
buyData.Uuid = OrderBuy(buyData.ConGoodsData.CoinFullName, recentlyData.BuyCount, recentlyData.BuyValue); buyData.Uuid = OrderBuy(buyData.ConGoodsData.CoinFullName, recentlyData.BuyCount, recentlyData.BuyValue);
if (buyData.Uuid == "")
{
InsertLog("Return Data 가 에러라서 구매 불가. Log 확인 바람");
continue;
}
buyCycleCount++; buyCycleCount++;
} }
@@ -783,6 +803,7 @@ namespace Million_Buyer
InsertLog("------------------------------------"); InsertLog("------------------------------------");
InsertLog("Buy Return Data : " + JsonConvert.SerializeObject(returnData)); InsertLog("Buy Return Data : " + JsonConvert.SerializeObject(returnData));
InsertLog("------------------------------------"); InsertLog("------------------------------------");
if (returnData == null) return "";
return returnData.Uuid; return returnData.Uuid;
} }

View File

@@ -158,9 +158,9 @@ namespace Million_Prototype
//사고 파는 rex 데이터 가져오는 부분 //사고 파는 rex 데이터 가져오는 부분
var buyRex = savedResultData.BuyRegularExpression; var buyRex = savedResultData.BuyRegularExpression;
var sellRex = savedResultData.SellRegularExpression; var sellRex = savedResultData.SellRegularExpression;
var buyScript = new InteratorScripter(); var buyScript = new InteratorScripter("");
buyScript.regularExpressionString = buyRex; buyScript.regularExpressionString = buyRex;
var sellScript = new InteratorScripter(); var sellScript = new InteratorScripter("");
sellScript.regularExpressionString = sellRex; sellScript.regularExpressionString = sellRex;
//save 데이터 //save 데이터
@@ -844,7 +844,7 @@ namespace Million_Prototype
ss123 = aa1.Except(aa4); ss123 = aa1.Except(aa4);
InteratorScripter ss = new InteratorScripter(); InteratorScripter ss = new InteratorScripter("");
ss.regularExpressionString = aa; ss.regularExpressionString = aa;
ss.DicExcuteScript(aa1); ss.DicExcuteScript(aa1);

View File

@@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -118,5 +120,51 @@ namespace Million.Data.Upbit
/// </summary> /// </summary>
public DateTime LowstPriceDateOf52Week { get; set; } public DateTime LowstPriceDateOf52Week { get; set; }
public object DeepClone(object obj)
{
object objResult = null;
using (var ms = new MemoryStream())
{
var bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
objResult = bf.Deserialize(ms);
}
return objResult;
}
public Ticker Clone()
{
var ticker = new Ticker();
ticker.DateTime = DateTime;
ticker.CoinFullName = CoinFullName;
ticker.TradeDateTime = TradeDateTime;
ticker.OpeningPrice = OpeningPrice;
ticker.HighPrice = HighPrice;
ticker.LowPrice = LowPrice;
ticker.TradePrice = TradePrice;
ticker.BeforeDayClosePrice = BeforeDayClosePrice;
ticker.TrendType = TrendType;
ticker.AbsoluteChangePrice = AbsoluteChangePrice;
ticker.AbsoluteChangeRate = AbsoluteChangeRate;
ticker.SignedChangePrice = SignedChangePrice;
ticker.SignedChangeRate = SignedChangeRate;
ticker.TradeVolume = TradeVolume;
ticker.AccumulateTradePrice = AccumulateTradePrice;
ticker.AccumulateTradePrice24 = AccumulateTradePrice24;
ticker.AccumulateTradeVolume = AccumulateTradeVolume;
ticker.AccumulateTradeVolume24 = AccumulateTradeVolume24;
ticker.HighstPriceOf52Week = HighstPriceOf52Week;
ticker.HighstPriceDateOf52Week = HighstPriceDateOf52Week;
ticker.LowstPriceOf52Week = LowstPriceOf52Week;
ticker.LowstPriceDateOf52Week = LowstPriceDateOf52Week;
return ticker;
}
} }
} }

View File

@@ -346,7 +346,7 @@ namespace Million.Manager
//단순비교 //단순비교
else if (setUp.SubIndicatorSetupType == SubIndicatorSetupType.단순비교) else if (setUp.SubIndicatorSetupType == SubIndicatorSetupType.단순비교)
{ {
SimpleComparison(setUp, parentCandleDataList, childrenCandleDataList, recentlyDataFlag); SimpleComparison(setUp, parentCandleDataList, childrenCandleDataList, recentlyDataFlag, coinFullName);
} }
//최초돌파 //최초돌파
else if (setUp.SubIndicatorSetupType == SubIndicatorSetupType.최초돌파) else if (setUp.SubIndicatorSetupType == SubIndicatorSetupType.최초돌파)
@@ -603,6 +603,10 @@ namespace Million.Manager
{ {
var dic = parent.CalculateFlag; var dic = parent.CalculateFlag;
var val = GetValueData(subIndi, parent, subKey);
//Sub 조건 만족 여부 //Sub 조건 만족 여부
if (subScript.DicExcuteScript(dic)) if (subScript.DicExcuteScript(dic))
{ {
@@ -613,6 +617,11 @@ namespace Million.Manager
subFlag = false; subFlag = false;
var str = ""; var str = "";
if(val < parent.EndValue)
{
}
if (recentlyDataFlag) if (recentlyDataFlag)
{ {
if (!subManagement[coinFullName]) if (!subManagement[coinFullName])
@@ -835,7 +844,7 @@ namespace Million.Manager
/// <param name="setUp"></param> /// <param name="setUp"></param>
/// <param name="list"></param> /// <param name="list"></param>
/// <returns></returns> /// <returns></returns>
public static void SimpleComparison(IndicatorCoditionSetup setUp, List<CandleData> parentCandleDataList, List<CandleData> childrenCandleDataList, bool recentlyDataFlag) public static void SimpleComparison(IndicatorCoditionSetup setUp, List<CandleData> parentCandleDataList, List<CandleData> childrenCandleDataList, bool recentlyDataFlag, string coinFullName)
{ {
//비교할 데이터 Key 설정 //비교할 데이터 Key 설정
var key = GetKeyData(setUp); var key = GetKeyData(setUp);
@@ -871,9 +880,10 @@ namespace Million.Manager
{ {
compareFlag = CompareSettingValueOfTranspierce(setUp.IndicatorOver, overlapData, value); compareFlag = CompareSettingValueOfTranspierce(setUp.IndicatorOver, overlapData, value);
} }
if (compareFlag) if (compareFlag)
{ {
item.CalculateFlag[setUp.IndexString] = true;
var childList = new List<CandleData>(); var childList = new List<CandleData>();
if (item.CandleTimeType == (int)MCandleTimeType.M1) if (item.CandleTimeType == (int)MCandleTimeType.M1)
{ {
@@ -971,6 +981,7 @@ namespace Million.Manager
if (flag) if (flag)
{ {
child.CalculateFlag[setUp.IndexString] = true; child.CalculateFlag[setUp.IndexString] = true;
} }
} }
} }
@@ -1014,7 +1025,7 @@ namespace Million.Manager
} }
} }
} }
item.CalculateFlag[setUp.IndexString] = true;
} }
} }
} }

View File

@@ -97,7 +97,7 @@ namespace Million.Manager
// Sub Indicator Class // Sub Indicator Class
var subIndicator = totalIndicators.Where(t => subIndStringList.Any(u => u == t.IndexString)).ToList(); var subIndicator = totalIndicators.Where(t => subIndStringList.Any(u => u == t.IndexString)).ToList();
// 선처리 // 선처리
CalculateManager.GetCalculateIndicator(totalIndicators, subIndStringList, null, startDate, CalculateManager.GetCalculateIndicator(totalIndicators, subIndStringList, null, startDate,
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, upperMainIndicatorFlag, coinFullName); endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, upperMainIndicatorFlag, coinFullName);
@@ -110,19 +110,7 @@ namespace Million.Manager
// 후처리 // 후처리
CalculateManager.GetCalculateIndicator(totalIndicators, totalIndi, null, startDate, CalculateManager.GetCalculateIndicator(totalIndicators, totalIndi, null, startDate,
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, upperMainIndicatorFlag, coinFullName); endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, upperMainIndicatorFlag, coinFullName);
// Parent Recently Data는 indicator에 따라 달라질수 있으므로 전부다 처리한 후 초기화
if (recentlyDataFlag)
foreach (var data in dic)
{
var recentlyList = data.Value.Where(t => t.RecentlyDataFlag).ToList();
foreach (var recentlyItem in recentlyList)
recentlyItem.RecentlyDataFlag = false;
}
return dic; return dic;
} }
} }

View File

@@ -108,7 +108,7 @@ namespace Million.Manager
this.tc = new TimerCallback(TimerEvent); // 이벤트 발생 처리 루틴 this.tc = new TimerCallback(TimerEvent); // 이벤트 발생 처리 루틴
//0.5초 마다 쌓는거 진행 -> DB데이터 가지고와서 부터 데이터 처리 //0.5초 마다 쌓는거 진행 -> DB데이터 가지고와서 부터 데이터 처리
this.timer = new System.Threading.Timer(tc, null, 0, 1000); this.timer = new System.Threading.Timer(tc, null, 0, 500);
flag = true; flag = true;
} }
@@ -158,23 +158,31 @@ namespace Million.Manager
var candleList = candleDatas[type]; var candleList = candleDatas[type];
//Parallel.ForEach(candleList, item => //Parallel.ForEach(candleList, item =>
//{ //{
var tickList = new List<Ticker>();
var cloneTickList = new List<Ticker>();
lock (obj)
{
try
{
foreach (var item in tickerList)
{
cloneTickList.Add(item.Clone());
}
}
catch (Exception e)
{
LogManager.WriteLog(e.Message);
}
}
foreach (var item in candleList) foreach (var item in candleList)
{ {
if (item.CandleDataLists_Im.Count > 0) if (item.CandleDataLists_Im.Count > 0)
basicDateTime = item.CandleDataLists_Im.Select(t => t.DateTime).Max(); basicDateTime = item.CandleDataLists_Im.Select(t => t.DateTime).Max();
var coinFullName = item.ConGoodsData.CoinFullName; var coinFullName = item.ConGoodsData.CoinFullName;
List<Ticker> tickList = null;
lock (obj) tickList = cloneTickList.Where(t => t.CoinFullName == coinFullName).ToList();
{
try
{
tickList = tickerList.Where(t => t.CoinFullName == coinFullName && basicDateTime < t.DateTime).OrderBy(t => t.DateTime).ToList();
}
catch (Exception e) {
LogManager.WriteLog(e.Message);
}
}
// 호출 당시 시, 분, 초 // 호출 당시 시, 분, 초
var callH = basicDateTime.Hour; var callH = basicDateTime.Hour;

View File

@@ -232,6 +232,9 @@ namespace Million.WebMangement.Upbit
if (price != 0) if (price != 0)
namevalCollection.Add("price", price.ToString()); namevalCollection.Add("price", price.ToString());
var logStr = coinFullName + " 주문 금액 : " + price.ToString() + ", 주문량 : " + volume.ToString() + "\r\n";
LogManager.WriteLog(logStr, coinFullName);
var resResult = process.CallAPI(url, HttpMethod.Post, namevalCollection); var resResult = process.CallAPI(url, HttpMethod.Post, namevalCollection);
Order returnData; Order returnData;
@@ -251,7 +254,7 @@ namespace Million.WebMangement.Upbit
if (cnt == 10) if (cnt == 10)
{ {
insertLog("Try Order Count 넘어감 -> CNT : " + cnt); insertLog("Try Order Count 넘어감 -> CNT : " + cnt);
var logStr = coinFullName + " 주문 에러!! 주문 returnData : " + JsonConvert.SerializeObject(returnData) + "\r\n" logStr = coinFullName + " 주문 에러!! 주문 returnData : " + JsonConvert.SerializeObject(returnData) + "\r\n"
+ "resResult : " + resResult; + "resResult : " + resResult;
LogManager.WriteLog(logStr, coinFullName); LogManager.WriteLog(logStr, coinFullName);
break; break;

View File

@@ -279,7 +279,7 @@ namespace Million.WebServices
{ {
var returnData = new List<Ticker>(); var returnData = new List<Ticker>();
var datas = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resResult.ToString()); var datas = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resResult.ToString());
var dateTimeData = DateTime.Now;
foreach (var item in datas) foreach (var item in datas)
{ {
double.TryParse(item["opening_price"]?.ToString(), out var opening_price); double.TryParse(item["opening_price"]?.ToString(), out var opening_price);
@@ -301,11 +301,14 @@ namespace Million.WebServices
double.TryParse(item["timestamp"]?.ToString(), out var timeStamp); double.TryParse(item["timestamp"]?.ToString(), out var timeStamp);
var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(timeStamp); dateTime = dateTime.AddMilliseconds(timeStamp);
dateTime = dateTime.AddHours(9);
var dateStr = item["trade_date"]?.ToString() + item["trade_time"]?.ToString(); var dateStr = item["trade_date"]?.ToString() + item["trade_time"]?.ToString();
if(!(dateTime.Day == DateTime.Now.Day && dateTime.Hour == DateTime.Now.Hour && dateTime.Minute == DateTime.Now.Minute))
{
continue;
}
var data = new Ticker(); var data = new Ticker();
data.CoinFullName = item["market"]?.ToString(); data.CoinFullName = item["market"]?.ToString();
data.TradeDateTime = DateTime.ParseExact(dateStr, "yyyyMMddHHmmss", null); data.TradeDateTime = DateTime.ParseExact(dateStr, "yyyyMMddHHmmss", null);