잡다한 에러수정

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();
if (sw.Elapsed.TotalSeconds > 1)
InsertLog("Execute 계산 시간 : " + sw.Elapsed.ToString());
var minDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Min();
var maxDateTime = dic[MCandleTimeType.M1].Select(t => t.DateTime).Max().AddHours(1);
@@ -425,9 +425,24 @@ namespace Million_Buyer
#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)
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에 있는지 확인
@@ -473,6 +488,11 @@ namespace Million_Buyer
{
recentlyData.BuyCount = Math.Round(cycleBuyMoney / recentlyData.BuyValue, 8);
buyData.Uuid = OrderBuy(buyData.ConGoodsData.CoinFullName, recentlyData.BuyCount, recentlyData.BuyValue);
if (buyData.Uuid == "")
{
InsertLog("Return Data 가 에러라서 구매 불가. Log 확인 바람");
continue;
}
buyCycleCount++;
}
@@ -783,6 +803,7 @@ namespace Million_Buyer
InsertLog("------------------------------------");
InsertLog("Buy Return Data : " + JsonConvert.SerializeObject(returnData));
InsertLog("------------------------------------");
if (returnData == null) return "";
return returnData.Uuid;
}

View File

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

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
@@ -118,5 +120,51 @@ namespace Million.Data.Upbit
/// </summary>
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.단순비교)
{
SimpleComparison(setUp, parentCandleDataList, childrenCandleDataList, recentlyDataFlag);
SimpleComparison(setUp, parentCandleDataList, childrenCandleDataList, recentlyDataFlag, coinFullName);
}
//최초돌파
else if (setUp.SubIndicatorSetupType == SubIndicatorSetupType.최초돌파)
@@ -603,6 +603,10 @@ namespace Million.Manager
{
var dic = parent.CalculateFlag;
var val = GetValueData(subIndi, parent, subKey);
//Sub 조건 만족 여부
if (subScript.DicExcuteScript(dic))
{
@@ -613,6 +617,11 @@ namespace Million.Manager
subFlag = false;
var str = "";
if(val < parent.EndValue)
{
}
if (recentlyDataFlag)
{
if (!subManagement[coinFullName])
@@ -835,7 +844,7 @@ namespace Million.Manager
/// <param name="setUp"></param>
/// <param name="list"></param>
/// <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 설정
var key = GetKeyData(setUp);
@@ -871,9 +880,10 @@ namespace Million.Manager
{
compareFlag = CompareSettingValueOfTranspierce(setUp.IndicatorOver, overlapData, value);
}
if (compareFlag)
{
item.CalculateFlag[setUp.IndexString] = true;
var childList = new List<CandleData>();
if (item.CandleTimeType == (int)MCandleTimeType.M1)
{
@@ -971,6 +981,7 @@ namespace Million.Manager
if (flag)
{
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
var subIndicator = totalIndicators.Where(t => subIndStringList.Any(u => u == t.IndexString)).ToList();
// 선처리
CalculateManager.GetCalculateIndicator(totalIndicators, subIndStringList, null, startDate,
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, upperMainIndicatorFlag, coinFullName);
@@ -110,19 +110,7 @@ namespace Million.Manager
// 후처리
CalculateManager.GetCalculateIndicator(totalIndicators, totalIndi, null, startDate,
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;
}
endDate, dic[MCandleTimeType.M1], subIndicator, dic, recentlyDataFlag, upperMainIndicatorFlag, coinFullName);
return dic;
}
}

View File

@@ -108,7 +108,7 @@ namespace Million.Manager
this.tc = new TimerCallback(TimerEvent); // 이벤트 발생 처리 루틴
//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;
}
@@ -158,23 +158,31 @@ namespace Million.Manager
var candleList = candleDatas[type];
//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)
{
if (item.CandleDataLists_Im.Count > 0)
basicDateTime = item.CandleDataLists_Im.Select(t => t.DateTime).Max();
var coinFullName = item.ConGoodsData.CoinFullName;
List<Ticker> tickList = null;
lock (obj)
{
try
{
tickList = tickerList.Where(t => t.CoinFullName == coinFullName && basicDateTime < t.DateTime).OrderBy(t => t.DateTime).ToList();
}
catch (Exception e) {
LogManager.WriteLog(e.Message);
}
}
tickList = cloneTickList.Where(t => t.CoinFullName == coinFullName).ToList();
// 호출 당시 시, 분, 초
var callH = basicDateTime.Hour;

View File

@@ -232,6 +232,9 @@ namespace Million.WebMangement.Upbit
if (price != 0)
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);
Order returnData;
@@ -251,7 +254,7 @@ namespace Million.WebMangement.Upbit
if (cnt == 10)
{
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;
LogManager.WriteLog(logStr, coinFullName);
break;

View File

@@ -279,7 +279,7 @@ namespace Million.WebServices
{
var returnData = new List<Ticker>();
var datas = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resResult.ToString());
var dateTimeData = DateTime.Now;
foreach (var item in datas)
{
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);
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();
if(!(dateTime.Day == DateTime.Now.Day && dateTime.Hour == DateTime.Now.Hour && dateTime.Minute == DateTime.Now.Minute))
{
continue;
}
var data = new Ticker();
data.CoinFullName = item["market"]?.ToString();
data.TradeDateTime = DateTime.ParseExact(dateStr, "yyyyMMddHHmmss", null);