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