잡다한 에러수정
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user