From 9238487e16d00205eee946e0b1f31d5b5de4a046 Mon Sep 17 00:00:00 2001 From: kyh <1329522@naver.com> Date: Fri, 21 Feb 2025 13:55:44 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8C=8D=EB=B0=94=EB=8B=A5=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IndicatorProcess.cs | 332 +++++++++--------- 1 file changed, 158 insertions(+), 174 deletions(-) diff --git a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs index 5d10fa6..f4abb29 100644 --- a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs +++ b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs @@ -279,7 +279,7 @@ namespace BitgetAPI.IndicatorConditionSetup var 전전봉3_Temp = candleDatas_Temp_List[i - 2].movingAverageDataList[3].Value; var 전전전봉3_Temp = candleDatas_Temp_List[i - 3].movingAverageDataList[3].Value; var 전전전전봉3_Temp = candleDatas_Temp_List[i - 4].movingAverageDataList[3].Value; - var returnVal = Calculate전고점(market, strInterval, interval, 전봉3_Temp, 전전봉3_Temp, 전전전봉3_Temp, 전전전전봉3_Temp, candleDatas_Temp_List[candleDatas_Temp_List.Count - 1]); + var returnVal = Calculate전고점(market, strInterval, interval, 전봉3_Temp, 전전봉3_Temp, 전전전봉3_Temp, candleDatas_Temp_List[candleDatas_Temp_List.Count - 1]); } } } @@ -289,7 +289,7 @@ namespace BitgetAPI.IndicatorConditionSetup BuyLongStep[market + strInterval] = false; } - if (!(전저고점.ContainsKey(market + "1m") && 전저고점.ContainsKey(market + "5m") && 전저고점.ContainsKey(market + "1H"))) + if (!(전저고점.ContainsKey(market + "15m") && 전저고점.ContainsKey(market + "1H"))) continue; #region 1분봉 처리 @@ -334,88 +334,88 @@ namespace BitgetAPI.IndicatorConditionSetup movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전전봉); #endregion - #region 5분봉 처리 + #region 15분봉 처리 // 시간별로 정렬하기 (임시 리스트) - var candleDatas_5 = findedMarket.candleDataList[MCandleTimeType.M5]; - var candleDatas_5_정렬 = candleDatas_5.OrderBy(i => i.Argument).ToList(); + var candleDatas_15 = findedMarket.candleDataList[MCandleTimeType.M15]; + var candleDatas_15_정렬 = candleDatas_15.OrderBy(i => i.Argument).ToList(); - var candleData_5 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + var candleData_15 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); - if (candleData_5 == null) continue; + if (candleData_15 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5); + ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15); - candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); - var candleData_5_전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); + var candleData_15_전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); - if (candleData_5_전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전봉); + if (candleData_15_전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전봉); - candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); - var candleData_5_전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); + var candleData_15_전전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); - if (candleData_5_전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전봉); + if (candleData_15_전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전전봉); - candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); - var candleData_5_전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); + var candleData_15_전전전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); - if (candleData_5_전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전봉); + if (candleData_15_전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전전전봉); - candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); - var candleData_5_전전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); + var candleData_15_전전전전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); - if (candleData_5_전전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전전봉); + if (candleData_15_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전전전전봉); #endregion - #region 30분봉 처리 + #region 60분봉 처리 // 시간별로 정렬하기 (임시 리스트) - var candleDatas_30 = findedMarket.candleDataList[MCandleTimeType.M30]; - var candleDatas_30_정렬 = candleDatas_30.OrderBy(i => i.Argument).ToList(); + var candleDatas_60 = findedMarket.candleDataList[MCandleTimeType.H1]; + var candleDatas_60_정렬 = candleDatas_60.OrderBy(i => i.Argument).ToList(); - var candleData_30 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + var candleData_60 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - if (candleData_30 == null) continue; + if (candleData_60 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30); + ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60); - candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); - var candleData_30_전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); + var candleData_60_전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - if (candleData_30_전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전봉); + if (candleData_60_전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전봉); - candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); - var candleData_30_전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); + var candleData_60_전전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - if (candleData_30_전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전봉); + if (candleData_60_전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전전봉); - candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); - var candleData_30_전전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); + var candleData_60_전전전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - if (candleData_30_전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전봉); + if (candleData_60_전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전전전봉); - candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); - var candleData_30_전전전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); + var candleData_60_전전전전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - if (candleData_30_전전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전전봉); + if (candleData_60_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전전전전봉); #endregion if (checked구름떼상향돌파 && candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData.IchimokData.상한선 && candleData.Low > candleData.IchimokData.상한선 @@ -482,7 +482,7 @@ namespace BitgetAPI.IndicatorConditionSetup { #region Main 봉 계산 - + var 전전전봉2 = candleData_전전전봉.movingAverageDataList[2].Value; var 전전전봉3 = candleData_전전전봉.movingAverageDataList[3].Value; var 전전전봉4 = candleData_전전전봉.movingAverageDataList[4].Value; var 전전전봉8 = candleData_전전전봉.movingAverageDataList[8].Value; @@ -491,9 +491,9 @@ namespace BitgetAPI.IndicatorConditionSetup var 전전전봉36 = candleData_전전전봉.movingAverageDataList[36].Value; var 전전전봉72 = candleData_전전전봉.movingAverageDataList[72].Value; var 전전전봉40 = candleData_전전전봉.movingAverageDataList[40].Value; - + var 전전전전봉2 = candleData_전전전전봉.movingAverageDataList[2].Value; var 전전전전봉3 = candleData_전전전전봉.movingAverageDataList[3].Value; - + var 전전봉2 = candleData_전전봉.movingAverageDataList[2].Value; var 전전봉3 = candleData_전전봉.movingAverageDataList[3].Value; var 전전봉4 = candleData_전전봉.movingAverageDataList[4].Value; var 전전봉8 = candleData_전전봉.movingAverageDataList[8].Value; @@ -510,7 +510,7 @@ namespace BitgetAPI.IndicatorConditionSetup //var 전전봉240 = candleData_전전봉.movingAverageDataList[240].Value; var 전전봉80 = candleData_전전봉.movingAverageDataList[80].Value; //var 전전봉480 = candleData_전전봉.movingAverageDataList[480].Value; - + var 전봉2 = candleData_전봉.movingAverageDataList[2].Value; var 전봉3 = candleData_전봉.movingAverageDataList[3].Value; var 전봉4 = candleData_전봉.movingAverageDataList[4].Value; var 전봉8 = candleData_전봉.movingAverageDataList[8].Value; @@ -528,7 +528,7 @@ namespace BitgetAPI.IndicatorConditionSetup var 전봉160 = candleData_전봉.movingAverageDataList[160].Value; //var 전봉240 = candleData_전봉.movingAverageDataList[240].Value; //var 전봉480 = candleData_전봉.movingAverageDataList[480].Value; - + var 현재봉2 = candleData.movingAverageDataList[2].Value; var 현재봉3 = candleData.movingAverageDataList[3].Value; var 현재봉4 = candleData.movingAverageDataList[4].Value; var 현재봉8 = candleData.movingAverageDataList[8].Value; @@ -576,29 +576,40 @@ namespace BitgetAPI.IndicatorConditionSetup var Bol72_Up = candleData.movingAverageDataList[72].BolangerValue_Up; #endregion - var 현재봉3_5 = candleData_5.movingAverageDataList[3].Value; - var 전봉3_5 = candleData_5_전봉.movingAverageDataList[3].Value; - var 전전봉3_5 = candleData_5_전전봉.movingAverageDataList[3].Value; - var 전전전봉3_5 = candleData_5_전전전봉.movingAverageDataList[3].Value; - var 전전전전봉3_5 = candleData_5_전전전전봉.movingAverageDataList[3].Value; + var 현재봉2_15 = candleData_15.movingAverageDataList[2].Value; + var 전봉2_15 = candleData_15_전봉.movingAverageDataList[2].Value; + var 전전봉2_15 = candleData_15_전전봉.movingAverageDataList[2].Value; + var 전전전봉2_15 = candleData_15_전전전봉.movingAverageDataList[2].Value; + var 전전전전봉2_15 = candleData_15_전전전전봉.movingAverageDataList[2].Value; - var 현재봉4_5 = candleData_5.movingAverageDataList[4].Value; - var 전봉4_5 = candleData_5_전봉.movingAverageDataList[4].Value; - var 전전봉4_5 = candleData_5_전전봉.movingAverageDataList[4].Value; - var 전전전봉4_5 = candleData_5_전전전봉.movingAverageDataList[4].Value; - + var 현재봉3_15 = candleData_15.movingAverageDataList[3].Value; + var 전봉3_15 = candleData_15_전봉.movingAverageDataList[3].Value; + var 전전봉3_15 = candleData_15_전전봉.movingAverageDataList[3].Value; + var 전전전봉3_15 = candleData_15_전전전봉.movingAverageDataList[3].Value; + var 전전전전봉3_15 = candleData_15_전전전전봉.movingAverageDataList[3].Value; + + var 현재봉4_15 = candleData_15.movingAverageDataList[4].Value; + var 전봉4_15 = candleData_15_전봉.movingAverageDataList[4].Value; + var 전전봉4_15 = candleData_15_전전봉.movingAverageDataList[4].Value; + var 전전전봉4_15 = candleData_15_전전전봉.movingAverageDataList[4].Value; - var 현재봉3_30 = candleData_30.movingAverageDataList[3].Value; - var 전봉3_30 = candleData_30_전봉.movingAverageDataList[3].Value; - var 전전봉3_30 = candleData_30_전전봉.movingAverageDataList[3].Value; - var 전전전봉3_30 = candleData_30_전전전봉.movingAverageDataList[3].Value; - var 전전전전봉3_30 = candleData_30_전전전전봉.movingAverageDataList[3].Value; + var 현재봉2_60 = candleData_60.movingAverageDataList[2].Value; + var 전봉2_60 = candleData_60_전봉.movingAverageDataList[2].Value; + var 전전봉2_60 = candleData_60_전전봉.movingAverageDataList[2].Value; + var 전전전봉2_60 = candleData_60_전전전봉.movingAverageDataList[2].Value; + var 전전전전봉2_60 = candleData_60_전전전전봉.movingAverageDataList[2].Value; - var 현재봉4_30 = candleData_30.movingAverageDataList[4].Value; - var 전봉4_30 = candleData_30_전봉.movingAverageDataList[4].Value; - var 전전봉4_30 = candleData_30_전전봉.movingAverageDataList[4].Value; - var 전전전봉4_30 = candleData_30_전전전봉.movingAverageDataList[4].Value; + var 현재봉3_60 = candleData_60.movingAverageDataList[3].Value; + var 전봉3_60 = candleData_60_전봉.movingAverageDataList[3].Value; + var 전전봉3_60 = candleData_60_전전봉.movingAverageDataList[3].Value; + var 전전전봉3_60 = candleData_60_전전전봉.movingAverageDataList[3].Value; + var 전전전전봉3_60 = candleData_60_전전전전봉.movingAverageDataList[3].Value; + + var 현재봉4_60 = candleData_60.movingAverageDataList[4].Value; + var 전봉4_60 = candleData_60_전봉.movingAverageDataList[4].Value; + var 전전봉4_60 = candleData_60_전전봉.movingAverageDataList[4].Value; + var 전전전봉4_60 = candleData_60_전전전봉.movingAverageDataList[4].Value; var oneList = new List() { @@ -615,15 +626,15 @@ namespace BitgetAPI.IndicatorConditionSetup }; - var 저고점_1 = 전저고점[market + "1m"]; - var 저고점_5 = 전저고점[market + "5m"]; - var 저고점_30 = 전저고점[market + "1H"]; + //var 저고점_1 = 전저고점[market + "1m"]; + var 저고점_15 = 전저고점[market + "15m"]; + var 저고점_60 = 전저고점[market + "1H"]; - var returnVal = Calculate전고점(market, "1m", MCandleTimeType.M1, 전봉3, 전전봉3, 전전전봉3, 전전전전봉3, candleData); + //var returnVal = Calculate전고점(market, "1m", MCandleTimeType.M1, 전봉2, 전전봉2, 전전전봉2, candleData); + //if (!returnVal) continue; + var returnVal = Calculate전고점(market, "15m", MCandleTimeType.M15, 전봉3_15, 전전봉3_15, 전전전봉3_15, candleData_15); if (!returnVal) continue; - returnVal = Calculate전고점(market, "5m", MCandleTimeType.M5, 전봉3_5, 전전봉3_5, 전전전봉3_5, 전전전전봉3_5, candleData_5); - if (!returnVal) continue; - returnVal = Calculate전고점(market, "30M", MCandleTimeType.M30, 전봉3_30, 전전봉3_30, 전전전전봉3_30, 전전전봉3_30, candleData_30); + returnVal = Calculate전고점(market, "1H", MCandleTimeType.H1, 전봉3_60, 전전봉3_60, 전전전봉3_60, candleData_60); if (!returnVal) continue; @@ -649,21 +660,14 @@ namespace BitgetAPI.IndicatorConditionSetup var buyFlag = false; // 60분봉 - var flag_30 = - (저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] > 저고점_30["전저가"] - && 전봉3_30 < 저고점_30["전고가"] && 현재봉3_30 > 저고점_30["전고가"] && - 저고점_30["전전전고가"] > 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && 현재봉3_30 < candleData_30.Close && candleData_30_전봉.Open < candleData_30_전봉.Close) - || (저고점_30["전전전고가"] > 저고점_30 ["전전고가"] && 저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전고가"] > 저고점_30["전저가"] && 저고점_30["전고가"] > 저고점_30["전전저가"] - && 저고점_30["전전저가"] < 저고점_30["전저가"] && 현재봉3_30 > 저고점_30["전고가"] && 전봉3_30 < 저고점_30["전고가"] && candleData_30.Open < candleData_30.Close && candleData_30_전봉.Open < candleData_30_전봉.Close); + var flag_60 = 저고점_60["Type"] == 0 && 저고점_60["전저가"] < 현재봉3_60 && 저고점_60["전고가"] > 현재봉3_60; + var flag_15 = 저고점_15["Type"] == 0 && 저고점_60["전저가"] < 현재봉3_15 && 저고점_60["전고가"] < 현재봉3_15 + && 저고점_60["전저가"] > 저고점_60["전전저가"] + && 저고점_60["전저가"] < 저고점_60["전고가"] + && 저고점_60["전고가"] > 저고점_60["전전저가"] && 저고점_60["전고가"]< 저고점_60["전전고가"]; - var flag_5 = (저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && 현재봉3_5 > 저고점_5["전고가"]) - || (저고점_5["전전전고가"] > 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && 현재봉3_5 > 저고점_5["전고가"]) - || (저고점_5["전전저가"] < 저고점_5["전저가"] && 저고점_5["전전전저가"] < 저고점_5["전전저가"] && 저고점_5["전전고가"] < 저고점_5["전고가"] && 저고점_5["전전전고가"] < 저고점_5["전전고가"]); - - var flag_1 = 현재봉4 > oneList.Max(); - - if (flag_30 && flag_5 && flag_1) + if (flag_60 && flag_15) { buyFlag = true; } @@ -691,7 +695,7 @@ namespace BitgetAPI.IndicatorConditionSetup { "MarketName", market }, { "BuyDate", nowTime }, { "Price", price }, - { "Flag", 저고점_30["전고가"] > 저고점_30["전전고가"]}, + { "Flag", 저고점_60["전고가"] > 저고점_60["전전고가"]}, { "MCandleTimeType", (int)interval }, { "CandleTime", candleData.Argument }, { "Candle", candleData } @@ -761,30 +765,12 @@ namespace BitgetAPI.IndicatorConditionSetup } var sellFlag = false; - - if (flag) - { - if (저고점_30["전고가"] < 저고점_30["전전고가"]) - { - sellFlag = true; - } + //예외처리 + if (저고점_60["전저가"] < 현재봉3_60) + sellFlag = true; - if (저고점_30["전전고가"] > 전봉3_30) - { - sellFlag = true; - } - } - else - { - if (저고점_30["전저가"] > 전봉3_30) - sellFlag = true; - - if (저고점_30["전고가"] > 저고점_30["전전고가"]) - { - buyItem["Flag"] = true; - } - } + if(전봉3_15 < 전전봉3_15) sellFlag = true; if (sellFlag) { @@ -878,24 +864,13 @@ namespace BitgetAPI.IndicatorConditionSetup var buyFlag = false; - //var flag_30 = (저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && 현재봉3_30 < 저고점_30["전저가"]) - // || (저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] < 저고점_30["전고가"] && 현재봉3_30 < 저고점_30["전저가"]); + var flag_60 = 저고점_60["Type"] == 1 && 저고점_60["전고가"] > 현재봉3_60 && 저고점_60["전저가"] < 현재봉3_60; + var flag_15 = 저고점_15["Type"] == 1 && 저고점_60["전고가"] > 현재봉3_15 && 저고점_60["전저가"] > 현재봉3_15 + && 저고점_60["전고가"] < 저고점_60["전전고가"] + && 저고점_60["전고가"] > 저고점_60["전저가"] + && 저고점_60["전저가"] < 저고점_60["전전고가"] && 저고점_60["전저가"] > 저고점_60["전전저가"]; - var flag_30 = - (저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] < 저고점_30["전고가"] - && 전봉3_30 > 저고점_30["전저가"] && candleData_30.Close < 저고점_30["전저가"] && - 저고점_30["전전전저가"] < 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && candleData_30.Open > candleData_30.Close && candleData_30_전봉.Open > candleData_30_전봉.Close) - - || (저고점_30["전전전저가"] < 저고점_30["전전저가"] && 저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전저가"] < 저고점_30["전고가"] && 저고점_30["전저가"] < 저고점_30["전전고가"] - && 저고점_30["전전고가"] > 저고점_30["전고가"] && candleData_30.Close < 저고점_30["전저가"] && 전봉3_30 > 저고점_30["전저가"] && candleData_30.Open > candleData_30.Close && candleData_30_전봉.Open > candleData_30_전봉.Close); - - var flag_5 = (저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && 현재봉3_5 < 저고점_5["전저가"]) - || (저고점_5["전전전저가"] < 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && 현재봉3_5 < 저고점_5["전저가"]) - || (저고점_5["전전저가"] > 저고점_5["전저가"] && 저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && 저고점_5["전전전고가"] > 저고점_5["전전고가"]); - - var flag_1 = 현재봉3 < oneList.Min(); - - if (flag_30 && flag_5 && flag_1) + if (flag_60 && flag_15) { buyFlag = true; } @@ -925,7 +900,7 @@ namespace BitgetAPI.IndicatorConditionSetup { "MarketName", market }, { "BuyDate", nowTime }, { "Price", price }, - { "Flag", 저고점_30["전저가"] < 저고점_30["전전저가"]}, + { "Flag", 저고점_60["전저가"] < 저고점_60["전전저가"]}, { "MCandleTimeType", (int)interval }, { "CandleTime", candleData.Argument }, { "Candle", candleData } @@ -994,30 +969,12 @@ namespace BitgetAPI.IndicatorConditionSetup } var sellFlag = false; + //예외처리 + if (저고점_60["전고가"] > 현재봉3_60) + sellFlag = true; + if (전봉3_15 > 전전봉3_15) sellFlag = true; - if (flag) - { - if (저고점_30["전저가"] > 저고점_30["전전저가"]) - { - sellFlag = true; - } - if (저고점_30["전전저가"] < 전봉3_30) - { - sellFlag = true; - } - } - else - { - if (저고점_30["전고가"] < 전봉3_30) - { - sellFlag = true; - } - if (저고점_30["전저가"] < 저고점_30["전전저가"]) - { - buyItem["Flag"] = true; - } - } if (sellFlag) { @@ -1104,15 +1061,15 @@ namespace BitgetAPI.IndicatorConditionSetup } } - public bool Calculate전고점(string market, string strInterval, MCandleTimeType type, double 전봉3, double 전전봉3, double 전전전봉3, double 전전전전봉3, CandleData candleData) + public bool Calculate전고점(string market, string strInterval, MCandleTimeType type, double 전봉3, double 전전봉3, double 전전전봉3, CandleData candleData) { var 저고점 = 전저고점[market + strInterval]; //전저가 if (전봉3 > 전전봉3 && 전전봉3 < 전전전봉3 && - 저고점["tempLowVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - && 전전전봉3 < 전전전전봉3) + 저고점["tempLowVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() && + ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - 저고점["tempHighVal"] >= 120 * (int)type) { 저고점["tempLow2Val"] = 저고점["tempLowVal"]; 저고점["tempLowVal"] = ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds(); @@ -1121,18 +1078,29 @@ namespace BitgetAPI.IndicatorConditionSetup 저고점["전전전저가"] = 저고점["전전저가"]; 저고점["전전저가"] = 저고점["전저가"]; 저고점["전저가"] = 전전봉3; - } - else if(전봉3 > 전전봉3 && 전전봉3 < 전전전봉3 && - 저고점["tempLowVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - && 전전전봉3 > 전전전전봉3) - { + 저고점["Type"] = 0; } + else if (전봉3 > 전전봉3 && 전전봉3 < 전전전봉3 && + 저고점["tempLowVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() && + ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - 저고점["tempHighVal"] < 120 * (int)type) + { + //이전으로 초기화 작업(High) + 저고점["전고가"] = 저고점["전전고가"]; + 저고점["전전고가"] = 저고점["전전전고가"]; + 저고점["전전전고가"] = 저고점["전전전전고가"]; + 저고점["Type"] = 0; + 저고점["전전전전고가"] = 저고점["switchLowVal"]; + 저고점["tempHighVal"] = 저고점["tempHigh2Val"]; + + if (저고점["전저가"] > 전전봉3) + 저고점["전저가"] = 전전봉3; + } //전고가 if (전전봉3 > 전봉3 && 전전봉3 > 전전전봉3 && - 저고점["tempHighVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - && 전전전봉3 > 전전전전봉3) + 저고점["tempHighVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() && + ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - 저고점["tempLowVal"] >= 120 * (int)type) { 저고점["tempHigh2Val"] = 저고점["tempHighVal"]; 저고점["tempHighVal"] = ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds(); @@ -1140,8 +1108,24 @@ namespace BitgetAPI.IndicatorConditionSetup 저고점["전전전전고가"] = 저고점["전전전고가"]; 저고점["전전전고가"] = 저고점["전전고가"]; 저고점["전전고가"] = 저고점["전고가"]; + 저고점["Type"] = 1; 저고점["전고가"] = 전전봉3; - } + } + else if (전전봉3 > 전봉3 && 전전봉3 > 전전전봉3 && + 저고점["tempHighVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() && + ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - 저고점["tempLowVal"] < 120 * (int)type) + { + //이전으로 초기화 작업(Low) + 저고점["전저가"] = 저고점["전전저가"]; + 저고점["전전저가"] = 저고점["전전전저가"]; + 저고점["전전전저가"] = 저고점["전전전전저가"]; + 저고점["전전전전저가"] = 저고점["switchHighVal"]; + 저고점["Type"] = 1; + 저고점["tempLowVal"] = 저고점["tempLow2Val"]; + + if (저고점["전고가"] < 전전봉3) + 저고점["전고가"] = 전전봉3; + } if (저고점["전전전저가"] == 0 || 저고점["전전전고가"] == 0) return false;