From f804efba8dc9366d329237f3c4a9ffb64ded1ed6 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1A3P75F\\lee" Date: Thu, 14 Apr 2022 14:55:21 +0900 Subject: [PATCH] =?UTF-8?q?OverStatus=20=EC=88=9C=EC=84=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Million Prototype/Form1.cs | 97 +++++++++++++++++++++++++++++++---- Million/Data/IndicatorData.cs | 6 +-- 2 files changed, 91 insertions(+), 12 deletions(-) diff --git a/Million Prototype/Form1.cs b/Million Prototype/Form1.cs index 5640525..d8d66fb 100644 --- a/Million Prototype/Form1.cs +++ b/Million Prototype/Form1.cs @@ -164,9 +164,9 @@ namespace Million_Prototype { realTimeMsg.StartGetRealTimeTicker(null); } - + Thread.Sleep(500); - } + } } } } @@ -176,14 +176,93 @@ namespace Million_Prototype DbServiceFunctions.GetMarketTable_FromDB("Upbit"); var tableList = CommonProperty.selectedMarketOfPlaceList; - var selectTable = tableList.FirstOrDefault(t => t.CodeFullName == "KRW-BTC"); - if (selectTable != null) + foreach (var marketData in tableList) { - var startDate = new DateTime(2000, 1, 1); - var candleData = DbServiceFunctions.GetCandleData(selectTable, startDate,DateTime.Now, MCandleTimeType.M1); - var temp = new List(); - temp.Add(candleData); - var returndata = ValidationCheckManager.ValidateCandleDataList(temp, MCandleTimeType.M1); + + + var buyCandleList = new List(); + if (marketData != null) + { + var startDate = new DateTime(2000, 1, 1); + var candleData = DbServiceFunctions.GetCandleData(marketData, startDate, DateTime.Now, MCandleTimeType.H1); + var candleDataM1 = DbServiceFunctions.GetCandleData(marketData, startDate, DateTime.Now, MCandleTimeType.M1); + var temp = new List(); + temp.Add(candleData); + //var returndata = ValidationCheckManager.ValidateCandleDataList(temp, MCandleTimeType.M1); + var splitData = ValidationCheckManager.SplitValidationCandleDataList(candleData.CandleDataLists_Im, MCandleTimeType.H1); + + var buyData = new CandleDataList(); + buyData.ConGoodsData = marketData; + buyData.CandleDataLists_Im = new List(); + + foreach (var split in splitData) + { + Bollinger_Bands.AddMovingAndBollingerBands(split, 40, 1); + Ichimoku_cloud.excute(split); + + var overData = split.FindAll(x => (int)x.IndicatorDic["Bol401"].overStatus > -2 && x.IndicatorDic["Bol401"].overStatus != OverStatus.None + && ((IchimokData)x.IndicatorDic["Ich"]).value < x.StartValue && ((IchimokData)x.IndicatorDic["Ich"]).value2 < x.StartValue); + + foreach (var item in overData) + { + var hData = item.DateTime.AddHours(1); + var sDate = item.DateTime.AddMinutes(-80); + var mCandleList = candleDataM1.CandleDataLists_Im.Where(t => t.DateTime >= sDate && t.DateTime < hData).ToList(); + if (mCandleList == null) + continue; + + Ichimoku_cloud.excute(mCandleList); + mCandleList = mCandleList.Where(t => t.DateTime >= item.DateTime && t.DateTime < hData).ToList(); + + var overIchCandleList = new List(); + //1분동 선행1,2 값보다 시가가 위인 캔들 구하기 + foreach (var mCandle in mCandleList) + { + if(!mCandle.IndicatorDic.ContainsKey("Ich")) + { + mCandle.ToString(); + } + else + { + var ichi = (IchimokData)mCandle.IndicatorDic["Ich"]; + if(ichi.value < mCandle.StartValue && ichi.value2 < mCandle.StartValue) + { + overIchCandleList.Add(mCandle); + } + } + } + + + //var overIchCandleList = mCandleList.Where(t => t.IndicatorDic != null && t.IndicatorDic.ContainsKey("Ich") && ((IchimokData)t.IndicatorDic["Ich"]).value < t.StartValue && ((IchimokData)t.IndicatorDic["Ich"]).value2 < t.StartValue).ToList(); + // if (overIchCandleList == null) + // continue; + + var overlap = item.IndicatorDic["Bol401"].overlapValue; + for (var i = 0; i < overIchCandleList.Count; i++) + { + var m = overIchCandleList[i]; + bool openChecker = m.StartValue > overlap; + bool highChecker = m.HighValue > overlap; + bool lowChecker = m.LowValue > overlap; + + var flag = Indicator_over.None; + if (i != 0) + { + flag = overIchCandleList[i - 1].EndValue > overlap ? Indicator_over.Over : Indicator_over.Under; + } + var checker = IndicatorData.OverChecker(openChecker, highChecker, lowChecker, m.EndValue > overlap ? Indicator_over.Over : Indicator_over.Under, flag); + + if (checker != OverStatus.None && (int)checker > -2) + { + buyData.CandleDataLists_Im.Add(m); + } + } + + buyData.ToString(); + } + } + buyCandleList.Add(buyData); + } } } } diff --git a/Million/Data/IndicatorData.cs b/Million/Data/IndicatorData.cs index 25f98a3..e96dd16 100644 --- a/Million/Data/IndicatorData.cs +++ b/Million/Data/IndicatorData.cs @@ -173,15 +173,15 @@ namespace Million.Data public enum OverStatus { Under=-4,//하양돌파 + UnderCancle,//하양돌파 후 올라감 OverUnder,//시가 상향돌파 후 하양돌파 UnderOverCancle,//시가하양돌파후 상향돌파 취소 - UnderCancle,//하양돌파 후 올라감 None = 0, - OverCancle,//상향돌파후 내려옴 OverUnderCancle, //시가상향돌파 후 하양돌파취소 UnderOver,//시가 하양돌파후 상향돌파 + OverCancle,//상향돌파후 내려옴 Over,//Over 상향돌파 - + //돌파 over, overcancle, UnderOver, OverUnderCancle, UnderOverCancle, OverUnder }