From 5b57bb31883faabeb86c770cc8749d96efb8f102 Mon Sep 17 00:00:00 2001 From: kyh <1329522@naver.com> Date: Wed, 12 Apr 2023 09:25:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Million Buyer/MainForm.cs | 97 ++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 47 deletions(-) diff --git a/Million Buyer/MainForm.cs b/Million Buyer/MainForm.cs index 385b988..fc6222e 100644 --- a/Million Buyer/MainForm.cs +++ b/Million Buyer/MainForm.cs @@ -40,13 +40,13 @@ namespace Million_Buyer bool AliveCheckor = false; private Thread thread = null; - private Thread orderThread = null; + private Thread orderThread = null; private List accounts = null; private PaymentType payment = PaymentType.KRW; private Stopwatch unlimitThreadStopWatch = new Stopwatch(); private bool unlimitChecker = false; - private long second = 0; + private long second = 0; private int cycleCount = 0; private double cycleBuyMoney = 0; @@ -64,7 +64,7 @@ namespace Million_Buyer public void Init() { InitManager.InitFunc("Upbit", PaymentType.KRW); - + _saveResultData = new SavedResultData { BuySetupList = new List(), @@ -86,7 +86,7 @@ namespace Million_Buyer /// /// private void rd_Realtime_CheckedChanged(object sender, EventArgs e) - { + { programMode = BuyerMode.BuyerRealtime; SetReadOnly(true); dt_Start.Enabled = false; @@ -99,7 +99,7 @@ namespace Million_Buyer /// /// private void rd_buyer_CheckedChanged(object sender, EventArgs e) - { + { programMode = BuyerMode.Buyer; SetReadOnly(false); dt_Start.Enabled = false; @@ -120,7 +120,7 @@ namespace Million_Buyer /// /// private void SetReadOnly(bool flag) - { + { tb_CycleCount.ReadOnly = flag; tb_CycleMoneyValue.ReadOnly = flag; } @@ -173,7 +173,7 @@ namespace Million_Buyer return; } } - + if (!ThreadFlag) { SetReadOnly(true); @@ -338,12 +338,12 @@ namespace Million_Buyer var sellExceptionScript = new InteratorScripter("Sell Exception Script"); sellExceptionScript.regularExpressionString = _saveResultData.SellExceptionRegularExpression; - var scriptDic = new Dictionary(); + var scriptDic = new Dictionary(); //TODO 모든 조건 데이터 미리 계산 필요 //save 데이터 - _saveResultData.StartDateTime = DateTime.Now; + _saveResultData.StartDateTime = DateTime.Now; //구매 후 데이터 여러개 계속 겹치는 경우 제외하기 위한 List var overlapBuyManagementList = new Dictionary(); @@ -362,7 +362,7 @@ namespace Million_Buyer if (programMode == BuyerMode.BuyerRealtime) InsertLog("실시간 검증 구동 중.."); - else if(programMode == BuyerMode.Buyer) + else if (programMode == BuyerMode.Buyer) InsertLog("Buyer 구동 중.."); else if (programMode == BuyerMode.BuyerTicker) InsertLog("Buyer Ticker 구동 중.."); @@ -381,7 +381,7 @@ namespace Million_Buyer AliveCheckor = false; InsertLog("Alive"); } - + #region 기본 데이터 Setting if (firstFlag) @@ -391,7 +391,8 @@ namespace Million_Buyer var startDateTime = DateTime.Now; var endDateTime = startDateTime; - if (programMode == BuyerMode.BuyerTicker) { + if (programMode == BuyerMode.BuyerTicker) + { startDateTime = dt_Start.DateTime; endDateTime = dt_End.DateTime; } @@ -406,7 +407,7 @@ namespace Million_Buyer if (programMode == BuyerMode.Buyer) { - buyList = InitManager.GetBuyListofAccounts(this.accounts, dataList); + buyList = InitManager.GetBuyListofAccounts(this.accounts, dataList); } this.BeginInvoke(new Action(delegate () @@ -428,14 +429,14 @@ namespace Million_Buyer })); #region TODO 이미 구매되어 있는 종목에 대한 기본 데이터 Setting 필요 - + #endregion firstFlag = false; - + sw.Stop(); - InsertLog("Deafult Data Setting 완료..\\r\n" + "Default 계산 시간 : " + sw.Elapsed.ToString()); + InsertLog("Deafult Data Setting 완료..\\r\n" + "Default 계산 시간 : " + sw.Elapsed.ToString()); LogManager.WriteLog("Default 계산 시간 : " + sw.Elapsed.ToString()); } else @@ -443,7 +444,7 @@ namespace Million_Buyer sw.Restart(); dataList = realTimeMsg.ProcessRecentlyCandleDatas(dataList, candleTypeList); - if(dataList == null) + if (dataList == null) { InsertLog("Buyer Ticker List 종료"); break; @@ -467,29 +468,29 @@ 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); var buyDataList = buyList.FirstOrDefault(t => t.ConGoodsData.CoinFullName == item); sw.Restart(); if (buyDataList != null && buyDataList.CandleDataLists_Im.Count > 0) - { + { dic = IndicatorSetupManager.CalculateIndicator(dic, totalIndicatorList, minDateTime, maxDateTime, item, true, buyDataList.CandleDataLists_Im[0]); } else { dic = IndicatorSetupManager.CalculateIndicator(dic, totalIndicatorList, minDateTime, maxDateTime, item, true); - } - + } + sw.Stop(); if (sw.Elapsed.TotalSeconds > 1) InsertLog("Indicator Calculate 계산 시간 : " + sw.Elapsed.ToString()); #endregion - + #region 사고 파는 로직 //최신 데이터 가져오기 - + var recentlyData = DataManager.GetRecentlyData(dic, MCandleTimeType.M1, true); if (recentlyData == null) @@ -536,7 +537,7 @@ namespace Million_Buyer if (programMode != BuyerMode.Buyer) { recentlyData.BuyCount = 1; - } + } else { recentlyData.BuyCount = Math.Round(cycleBuyMoney / recentlyData.BuyValue, 8); @@ -548,7 +549,7 @@ namespace Million_Buyer } buyCycleCount++; } - + buyList.Add(buyData); string str = "Buy : " + item + ",\r\n Buy Candle Data : " + JsonConvert.SerializeObject(recentlyData) + "\r\n"; @@ -561,7 +562,8 @@ namespace Million_Buyer //grid 처리 구매항목, 구매 가격, 구매 개수, 구매시점 this.BeginInvoke(new Action(delegate () { - try { + try + { tl_BuyList.AppendNode(new object[] { buyData.ConGoodsData.CoinFullName, recentlyData.BuyValue, recentlyData.BuyCount, time.ToString("yyyy-MM-dd HH:mm:ss") @@ -591,7 +593,7 @@ namespace Million_Buyer var scriptStr = sellScript.regularExpressionString; if (!flag) { - if (sellExceptionScript.regularExpressionString != null && + if (sellExceptionScript.regularExpressionString != null && sellExceptionScript.regularExpressionString.Length > 0) { //예외처리 로직 추가 @@ -607,17 +609,18 @@ namespace Million_Buyer sw.Restart(); var buyItem = buyList.FirstOrDefault(x => x.ConGoodsData.CoinFullName == item); var time = DateTime.Now; - + var sellItem = recentlyData; var valDic = ResultLogicManager.GetIndicateValue(sellItem.CalculateFlag, totalIndicatorList, sellItem); - + sellItem.SellValue = OrderbookManager.GetAskPrice(CalculateManager.GetConditionValue(scriptStr, valDic, sellItem.CalculateFlag), false); var sellVal = sellItem.SellValue; - if (allSell) { + if (allSell) + { // 현재가 던지기 sellItem.SellValue = OrderbookManager.GetAskPrice(sellItem.EndValue, false); sellVal = 0; @@ -627,7 +630,7 @@ namespace Million_Buyer var buyCandleData = buyItem.CandleDataLists_Im[0]; var result = DataManager.GetBuyerSearchResult(buyCandleData, recentlyData, buyItem.ConGoodsData); - + // buycount 에서 sell count를 제외한 양이 미체결 량 if (programMode == BuyerMode.Buyer) { @@ -644,13 +647,13 @@ namespace Million_Buyer LogManager.WriteLog(str, item); //초기화 작업 - foreach(var sublIndi in subIndicator) + foreach (var sublIndi in subIndicator) { CommonProperty.subIndicatorStateManagement[sublIndi.IndexString][item] = false; } //처리한 buyList는 삭제 - buyList.Remove(buyItem); + buyList.Remove(buyItem); InsertLog(buyItem.ConGoodsData.CoinFullName + " Market Data 판매 DateTime : " + time.ToString("yyyy-MM-dd HH:mm:ss")); this.BeginInvoke(new Action(delegate () { @@ -822,7 +825,7 @@ namespace Million_Buyer } lb_log.Items.Insert(0, log); DBConnection.QueryInsertExecuter_MainLog(DateTime.Now, cb_UserList.Text, log); - })); + })); return true; } @@ -845,7 +848,7 @@ namespace Million_Buyer AliveCheckor = true; } - + /// /// 구매 함수 /// Price가 0일경우 현재가 구매 @@ -855,7 +858,7 @@ namespace Million_Buyer /// /// private string OrderBuy(string coinFullName, double volume, double price) - { + { var side = UpbitOrderSide.bid; var ordType = UpbitOrderType.limit; @@ -878,7 +881,7 @@ namespace Million_Buyer /// /// private double OrderSell(string coinFullName, string uuid, double price) - { + { var side = UpbitOrderSide.ask; var ordType = UpbitOrderType.limit; @@ -888,16 +891,16 @@ namespace Million_Buyer // 판매시 Order Cancel 진행 OrderCancel(coinFullName, uuid); - var orderData = CommonProperty.UpbitApi.GetOrderInformation(uuid); + var orderData = CommonProperty.UpbitApi.GetOrderInformation(uuid); - if(orderData == null) + if (orderData == null) { orderData = new Order(); - var account = this.accounts.FirstOrDefault(t => t.UnitCurrency + "-" + t.Currency == coinFullName); - if(account != null) + var account = this.accounts.FirstOrDefault(t => t.UnitCurrency + "-" + t.Currency == coinFullName); + if (account != null) { orderData.ExecutedVolume = account.Balance; - } + } } if (orderData.ExecutedVolume != 0) { @@ -915,7 +918,7 @@ namespace Million_Buyer /// /// /// - private void OrderCancel(string coinFullName, string uuid ="") + private void OrderCancel(string coinFullName, string uuid = "") { InsertLog("------------------------------------"); InsertLog("Order Cancel"); @@ -926,11 +929,11 @@ namespace Million_Buyer { if (item.State == "wait" || item.State == "watch") { - if(item.CoinFullName == coinFullName) + if (item.CoinFullName == coinFullName) { var returnData = CommonProperty.UpbitApi.CancelOrder(item.Uuid); InsertLog("Order Cancel Data : " + JsonConvert.SerializeObject(returnData)); - } + } } } InsertLog("------------------------------------"); @@ -975,7 +978,7 @@ namespace Million_Buyer var subStr = "원"; if (cb_AccountList.Text == "KRW") { - this.payment = PaymentType.KRW; + this.payment = PaymentType.KRW; } else if (cb_AccountList.Text == "BTC") { @@ -985,7 +988,7 @@ namespace Million_Buyer else if (cb_AccountList.Text == "USDT") { this.payment = PaymentType.USDT; - subStr = "USDT"; + subStr = "USDT"; } lb_TotalMoney.Text = account.Balance.ToString() + subStr; }