From 05a314349c22046f1022149f9fd97c2cf5d4136c Mon Sep 17 00:00:00 2001 From: kyh <1329522@naver.com> Date: Wed, 19 Feb 2025 10:07:59 +0900 Subject: [PATCH] =?UTF-8?q?30=EB=B6=84=EB=B4=89=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IndicatorProcess.cs | 229 +++++++----------- 1 file changed, 90 insertions(+), 139 deletions(-) diff --git a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs index 9678f9a..faa7096 100644 --- a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs +++ b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs @@ -76,7 +76,7 @@ namespace BitgetAPI.IndicatorConditionSetup // 스레드 시작/종료 플래그 public bool Is_th_SignalInfo; public Dictionary> 전저고점 = new Dictionary>(); - public Dictionary FirstFlag = new Dictionary(); + public List checkedMarkets; public List intervalList; @@ -240,7 +240,7 @@ namespace BitgetAPI.IndicatorConditionSetup { var dic = new Dictionary(); dic.Add("전고가", 0); - dic.Add("전저가", 0); + dic.Add("전저가", 0); dic.Add("전전고가", 0); dic.Add("전전저가", 0); dic.Add("전전전저가", 0); @@ -290,7 +290,7 @@ namespace BitgetAPI.IndicatorConditionSetup BuyLongStep[market + strInterval] = false; } - if (!(전저고점.ContainsKey(market + "1m") && 전저고점.ContainsKey(market + "15m") && 전저고점.ContainsKey(market + "30m"))) + if (!(전저고점.ContainsKey(market + "1m") && 전저고점.ContainsKey(market + "5m") && 전저고점.ContainsKey(market + "30m"))) continue; #region 1분봉 처리 @@ -334,47 +334,47 @@ namespace BitgetAPI.IndicatorConditionSetup ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전전전전봉); movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전전봉); #endregion - - #region 15분봉 처리 + + #region 5분봉 처리 // 시간별로 정렬하기 (임시 리스트) - var candleDatas_15 = findedMarket.candleDataList[MCandleTimeType.M15]; - var candleDatas_15_정렬 = candleDatas_15.OrderBy(i => i.Argument).ToList(); + var candleDatas_5 = findedMarket.candleDataList[MCandleTimeType.M5]; + var candleDatas_5_정렬 = candleDatas_5.OrderBy(i => i.Argument).ToList(); - var candleData_15 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); + var candleData_5 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); - if (candleData_15 == null) continue; + if (candleData_5 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15); + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5); - candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); - var candleData_15_전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); - if (candleData_15_전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전봉); + if (candleData_5_전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전봉); - candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); - var candleData_15_전전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); - if (candleData_15_전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전전봉); + if (candleData_5_전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전봉); - candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); - var candleData_15_전전전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); - if (candleData_15_전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전전전봉); + if (candleData_5_전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전봉); - candleDatas_15_정렬.RemoveAt(candleDatas_15_정렬.Count - 1); - var candleData_15_전전전전봉 = candleDatas_15.Find(i => i.Argument == candleDatas_15_정렬.Last().Argument); + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); - if (candleData_15_전전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_15_정렬, candleData_15_전전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_15_정렬, candleData_15_전전전전봉); + if (candleData_5_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전전봉); #endregion #region 30분봉 처리 @@ -419,49 +419,6 @@ namespace BitgetAPI.IndicatorConditionSetup movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전전봉); #endregion - #region 60분봉 처리 - // 시간별로 정렬하기 (임시 리스트) - var candleDatas_60 = findedMarket.candleDataList[MCandleTimeType.H1]; - var candleDatas_60_정렬 = candleDatas_60.OrderBy(i => i.Argument).ToList(); - - var candleData_60 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - - if (candleData_60 == null) continue; - - ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60); - - candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); - var candleData_60_전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - - if (candleData_60_전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전봉); - - candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); - var candleData_60_전전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - - if (candleData_60_전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전전봉); - - candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); - var candleData_60_전전전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - - if (candleData_60_전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_60_정렬, candleData_60_전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_60_정렬, candleData_60_전전전봉); - - - candleDatas_60_정렬.RemoveAt(candleDatas_60_정렬.Count - 1); - var candleData_60_전전전전봉 = candleDatas_60.Find(i => i.Argument == candleDatas_60_정렬.Last().Argument); - - 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.상한선 && candleData.Close > candleData.IchimokData.상한선) { @@ -568,7 +525,7 @@ namespace BitgetAPI.IndicatorConditionSetup var 전봉20 = candleData_전봉.movingAverageDataList[20].Value; var 전봉40 = candleData_전봉.movingAverageDataList[40].Value; - var 전봉80 = candleData_전봉.movingAverageDataList[80].Value; + var 전봉80 = candleData_전봉.movingAverageDataList[80].Value; var 전봉160 = candleData_전봉.movingAverageDataList[160].Value; //var 전봉240 = candleData_전봉.movingAverageDataList[240].Value; //var 전봉480 = candleData_전봉.movingAverageDataList[480].Value; @@ -620,22 +577,17 @@ namespace BitgetAPI.IndicatorConditionSetup var Bol72_Up = candleData.movingAverageDataList[72].BolangerValue_Up; #endregion - 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_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_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_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 oneList = new List() { + var oneList = new List() { 현재봉24, 현재봉48, 현재봉72, @@ -649,13 +601,13 @@ namespace BitgetAPI.IndicatorConditionSetup }; - var 저고점_1 = 전저고점[market + "1m"]; - var 저고점_15 = 전저고점[market + "15m"]; + var 저고점_1 = 전저고점[market + "1m"]; + var 저고점_5 = 전저고점[market + "5m"]; var 저고점_30 = 전저고점[market + "30m"]; var returnVal = Calculate전고점(market, "1m", MCandleTimeType.M1, 전봉3, 전전봉3, 전전전봉3, candleData); if (!returnVal) continue; - returnVal = Calculate전고점(market, "15m", MCandleTimeType.M5, 전봉3_15, 전전봉3_15, 전전전봉3_15, candleData_15); + returnVal = Calculate전고점(market, "5m", MCandleTimeType.M5, 전봉3_5, 전전봉3_5, 전전전봉3_5, candleData_5); if (!returnVal) continue; returnVal = Calculate전고점(market, "30m", MCandleTimeType.M30, 전봉3_30, 전전봉3_30, 전전전봉3_30, candleData_30); if (!returnVal) continue; @@ -680,30 +632,27 @@ namespace BitgetAPI.IndicatorConditionSetup if (!UpBuyList.ContainsKey(market)) { - var buyFlag = false; + // 30분봉 + var flag_30 = + //(저고점_30["전전전저가"] > 저고점_30["전전저가"] + // && (저고점_30["전전저가"] < 전봉3 && 저고점_30["전전저가"] < 전전봉3 && 저고점_30["전전저가"] < 현재봉3 && 전전봉3 > 전봉3 && 전봉3 < 현재봉3) + //&& 현재봉3_30 > 저고점_30["전고가"]) || + (저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && 전봉3_30 < 저고점_30["전고가"] && 현재봉3_30 > 저고점_30["전고가"]); + //|| (저고점_30["전전전고가"] > 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && 현재봉3_30 > 저고점_30["전고가"]); + + var flag_5 = (저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && 현재봉3_5 > 저고점_5["전고가"]) + || (저고점_5["전전전고가"] > 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && 현재봉3_5 > 저고점_5["전고가"]); + var flag_1 = 현재봉3 > oneList.Max(); - - var flag_15 = - (저고점_15["전전전저가"] > 저고점_15["전전저가"] && 저고점_15["전전저가"] < 저고점_15["전저가"] && 저고점_15["전고가"] > 전봉3_15 && 현재봉3_15 > 저고점_15["전고가"]) - // || (저고점_15["전전전고가"] > 저고점_15["전전고가"] && 저고점_15["전전고가"] > 저고점_15["전고가"]&&저고점_15["전전전저가"] > 저고점_15["전전저가"] && 저고점_15["전전저가"] > 저고점_15["전저가"] && 저고점_15["전고가"] > 전봉3_15 && 현재봉3_15 > 저고점_15["전고가"]) - //|| (저고점_15["전전전고가"] < 저고점_15["전전고가"] && 저고점_15["전전고가"] > 저고점_15["전고가"] && 전봉3_15 < 저고점_15["전전고가"] && 현재봉3_15 > 저고점_15["전전고가"]) - ; - var flag_30 = 저고점_30["전고가"] < 현재봉3_30; - - var flag_60 = 현재봉3_60 > 전봉3_60 && 전봉3_60 > 전전봉3_60; - - - if (flag_1 && flag_15 && flag_30 && flag_60) + if (flag_30 && flag_5 && flag_1) { buyFlag = true; } - if (!FirstFlag.ContainsKey(market + "Up")) - FirstFlag[market + "Up"] = false; - if (buyFlag && FirstFlag[market + "Up"]) + if (buyFlag) { // 없으면 생성 if (signalData == null) @@ -766,9 +715,8 @@ namespace BitgetAPI.IndicatorConditionSetup } } } - if (!flag_15) - FirstFlag[market + "Up"] = true; } + //파는 시점 else { @@ -777,7 +725,7 @@ namespace BitgetAPI.IndicatorConditionSetup var flag = (bool)buyItem["Flag"]; if (interval < MCandleTimeType.H1) { - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(15); + var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(30); if (nowTime < buyTime) continue; } @@ -790,31 +738,31 @@ namespace BitgetAPI.IndicatorConditionSetup } var sellFlag = false; - + if (저고점_30["전저가"] > 전봉3_30) + sellFlag = true; if (flag) { - if (저고점_15["전전고가"] > 저고점_15["전고가"]) + if (저고점_30["전고가"] < 저고점_30["전전고가"]) { sellFlag = true; } - if (저고점_15["전전고가"] > 현재봉3_15) + if (저고점_30["전전고가"] > 현재봉3_30) { sellFlag = true; } } else { - if (!flag) + if (저고점_30["전저가"] > 현재봉3_30) { - if (저고점_15["전저가"] > 현재봉3_15) - sellFlag = true; + sellFlag = true; } - if (저고점_15["전고가"] > 저고점_15["전전고가"]) + if (저고점_30["전고가"] > 저고점_30["전전고가"]) { - buyItem["Flag"] = true; + buyItem["Flag"] = true; } } @@ -910,26 +858,27 @@ 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_30 = + //(저고점_30["전전전고가"] < 저고점_30["전전고가"] + //&& (저고점_30["전전고가"] > 전봉3 && 저고점_30["전전고가"] > 전전봉3 && 저고점_30["전전고가"] > 현재봉3 && 전전봉3 < 전봉3 && 전봉3 > 현재봉3) + //&& 현재봉3_30 < 저고점_30["전저가"]) || + (저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && 전봉3_30 > 저고점_30["전저가"] && 현재봉3_30 < 저고점_30["전저가"]); + //|| (저고점_30["전전전저가"] < 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && 현재봉3_30 < 저고점_30["전저가"]); + + var flag_5 = (저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && 현재봉3_5 < 저고점_5["전저가"]) + || (저고점_5["전전전저가"] < 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && 현재봉3_5 < 저고점_5["전저가"]); + var flag_1 = 현재봉3 < oneList.Min(); - var flag_15 = - (저고점_15["전전전고가"] < 저고점_15["전전고가"] && 저고점_15["전전고가"] > 저고점_15["전고가"] && 전봉3_15 > 저고점_15["전저가"] && 현재봉3_15 < 저고점_15["전저가"]) - //|| (저고점_15["전전전고가"] < 저고점_15["전전고가"] && 저고점_15["전전고가"] < 저고점_15["전고가"] && 저고점_15["전전전저가"] < 저고점_15["전전저가"] && 저고점_15["전전저가"] < 저고점_15["전저가"] && 전봉3_15 > 저고점_15["전저가"] && 현재봉3_15 < 저고점_15["전저가"]) - //|| (저고점_30["전전전저가"] > 저고점_15["전전저가"] && 저고점_15["전전저가"] < 저고점_15["전저가"] && 전봉3_15 > 저고점_15["전전저가"] && 현재봉3_15 < 저고점_15["전전저가"]) - ; - - var flag_30 = 저고점_30["전저가"] > 현재봉3_30; - - var flag_60 = 현재봉3_60 < 전봉3_60 && 전봉3_60 < 전전봉3_60; - - - if (flag_1 && flag_15 && flag_30 && flag_60) + if (flag_30 && flag_5 && flag_1) { buyFlag = true; } - if (!FirstFlag.ContainsKey(market + "Down")) - FirstFlag[market + "Down"] = false; - if (buyFlag && FirstFlag[market + "Down"]) + + if (buyFlag) { // 없으면 생성 if (signalData == null) @@ -991,8 +940,7 @@ namespace BitgetAPI.IndicatorConditionSetup } } } - if(!flag_15) - FirstFlag[market + "Down"] = true; + } //파는 시점 @@ -1002,7 +950,7 @@ namespace BitgetAPI.IndicatorConditionSetup var flag = (bool)buyItem["Flag"]; if (interval < MCandleTimeType.H1) { - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(15); + var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes(30); if (nowTime < buyTime) continue; } @@ -1015,24 +963,27 @@ namespace BitgetAPI.IndicatorConditionSetup } var sellFlag = false; + if (저고점_30["전고가"] < 전봉3_30) + sellFlag = true; + if (flag) { - if (저고점_15["전전저가"] < 저고점_15["전저가"]) + if (저고점_30["전저가"] > 저고점_30["전전저가"]) { sellFlag = true; } - - if (저고점_15["전전저가"] < 현재봉3_15) + if (저고점_30["전전저가"] < 현재봉3_30) { sellFlag = true; } } else { - if (저고점_15["전고가"] < 현재봉3_15) + if (저고점_30["전고가"] < 현재봉3_30) + { sellFlag = true; - - if (저고점_15["전저가"] < 저고점_15["전전저가"]) + } + if (저고점_30["전저가"] < 저고점_30["전전저가"]) { buyItem["Flag"] = true; }