diff --git a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs index 0ad2b32..2438d2d 100644 --- a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs +++ b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs @@ -4,6 +4,7 @@ using BitgetAPI.IndicatorConditionSetup; using BitgetAPI.WebService; using DevExpress.Internal.WinApi.Windows.UI.Notifications; using DevExpress.Utils.DirectXPaint; +using DevExpress.Utils.Filtering.Internal; using DevExpress.Utils.IoC; using DevExpress.Xpo.Logger; using DevExpress.XtraPrinting.Native; @@ -22,6 +23,7 @@ using System.Windows.Forms; using static BitgetAPI.CommonProperty; using static DevExpress.Utils.Drawing.Helpers.NativeMethods; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox; namespace BitgetAPI.IndicatorConditionSetup { @@ -125,7 +127,8 @@ namespace BitgetAPI.IndicatorConditionSetup public Dictionary BuyShortStep = new Dictionary(); public Dictionary BuyLongStep = new Dictionary(); - + + public int 전가Flag = 1; // 전봉이 구름떼 돌파후 시가가 구름떼 위에서 시작하는 것 @@ -236,19 +239,29 @@ namespace BitgetAPI.IndicatorConditionSetup if (!전저고점.ContainsKey(market + strInterval)) { var dic = new Dictionary(); - dic.Add("beforeHighVal", 0); - dic.Add("beforeLowVal", 0); - dic.Add("twoBeforeHighVal", 0); - dic.Add("twoBeforeLowVal", 0); - dic.Add("tempBeforeLowVal", 0); - dic.Add("tempBeforeHighVal", 0); + dic.Add("전고가", 0); + dic.Add("전저가", 0); + dic.Add("전전고가", 0); + dic.Add("전전저가", 0); + dic.Add("전전전저가", 0); + dic.Add("전전전고가", 0); + dic.Add("전전전전저가", 0); + dic.Add("전전전전고가", 0); + dic.Add("tempHighVal", 0); + dic.Add("tempLowVal", 0); + dic.Add("tempHigh2Val", 0); + dic.Add("tempLow2Val", 0); + dic.Add("switchLowVal", 0); + dic.Add("switchHighVal", 0); 전저고점.Add(market + strInterval, dic); - } - - + if (!BuyShortStep.ContainsKey(market + strInterval)) { + BuyShortStep[market + strInterval] = false; + BuyLongStep[market + strInterval] = false; + } + #region Main 처리 // 시간별로 정렬하기 (임시 리스트) - var candleDatas = findedMarket.candleDataList[interval]; + var candleDatas = findedMarket.candleDataList[MCandleTimeType.M1]; var candleDatas_정렬 = candleDatas.OrderBy(i => i.Argument).ToList(); var candleData = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument); @@ -279,6 +292,99 @@ namespace BitgetAPI.IndicatorConditionSetup ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전전전봉); movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전봉); + + candleDatas_정렬.RemoveAt(candleDatas_정렬.Count - 1); + var candleData_전전전전봉 = candleDatas.Find(i => i.Argument == candleDatas_정렬.Last().Argument); + + if (candleData_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_정렬, candleData_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전전봉); + #endregion + + #region 5분봉 처리 + // 시간별로 정렬하기 (임시 리스트) + var candleDatas_5 = findedMarket.candleDataList[MCandleTimeType.M5]; + var candleDatas_5_정렬 = candleDatas_5.OrderBy(i => i.Argument).ToList(); + + var candleData_5 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + + if (candleData_5 == null) continue; + + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5); + + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + + if (candleData_5_전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전봉); + + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + + if (candleData_5_전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전봉); + + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + + if (candleData_5_전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전봉); + + + candleDatas_5_정렬.RemoveAt(candleDatas_5_정렬.Count - 1); + var candleData_5_전전전전봉 = candleDatas_5.Find(i => i.Argument == candleDatas_5_정렬.Last().Argument); + + if (candleData_5_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_5_정렬, candleData_5_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_5_정렬, candleData_5_전전전전봉); + #endregion + + #region 30분봉 처리 + // 시간별로 정렬하기 (임시 리스트) + var candleDatas_30 = findedMarket.candleDataList[MCandleTimeType.M30]; + var candleDatas_30_정렬 = candleDatas_30.OrderBy(i => i.Argument).ToList(); + + var candleData_30 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + + if (candleData_30 == null) continue; + + ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30); + + candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); + var candleData_30_전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + + if (candleData_30_전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전봉); + + candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); + var candleData_30_전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + + if (candleData_30_전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전봉); + + candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); + var candleData_30_전전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + + if (candleData_30_전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전봉); + + + candleDatas_30_정렬.RemoveAt(candleDatas_30_정렬.Count - 1); + var candleData_30_전전전전봉 = candleDatas_30.Find(i => i.Argument == candleDatas_30_정렬.Last().Argument); + + if (candleData_30_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_30_정렬, candleData_30_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_30_정렬, candleData_30_전전전전봉); + #endregion + if (checked구름떼상향돌파 && candleData_전봉.Open < candleData_전봉.IchimokData.상한선 && candleData.Open > candleData.IchimokData.상한선 && candleData.Low > candleData.IchimokData.상한선 && candleData.Close > candleData.IchimokData.상한선) { @@ -341,26 +447,10 @@ namespace BitgetAPI.IndicatorConditionSetup if (영호조건식_상향돌파 || 영호조건식_하향돌파) { - // 24,72 높은값 - var 높은값_72_24_전전봉 = Math.Max(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[24].Value); - // 24,72 낮은값 - var 낮은값_72_24_전전봉 = Math.Min(candleData_전전봉.movingAverageDataList[72].Value, candleData_전전봉.movingAverageDataList[24].Value); - // 24,72 높은값 - var 높은값_72_24_전봉 = Math.Max(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[24].Value); - // 24,72 낮은값 - var 낮은값_72_24_전봉 = Math.Min(candleData_전봉.movingAverageDataList[72].Value, candleData_전봉.movingAverageDataList[24].Value); - // 24,72 높은값 - var 높은값_72_24 = Math.Max(candleData.movingAverageDataList[72].Value, candleData.movingAverageDataList[24].Value); - // 24,72 낮은값 - var 낮은값_72_24 = Math.Min(candleData.movingAverageDataList[72].Value, candleData.movingAverageDataList[24].Value); + #region Main 봉 계산 - // 24,72 높은값 - var 높은값_8_12 = Math.Max(candleData.movingAverageDataList[8].Value, candleData.movingAverageDataList[12].Value); - // 24,72 낮은값 - var 낮은값_8_12 = Math.Min(candleData.movingAverageDataList[8].Value, candleData.movingAverageDataList[12].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; var 전전전봉12 = candleData_전전전봉.movingAverageDataList[12].Value; @@ -369,8 +459,9 @@ namespace BitgetAPI.IndicatorConditionSetup var 전전전봉72 = candleData_전전전봉.movingAverageDataList[72].Value; var 전전전봉40 = candleData_전전전봉.movingAverageDataList[40].Value; + var 전전전전봉4 = candleData_전전전전봉.movingAverageDataList[4].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; var 전전봉12 = candleData_전전봉.movingAverageDataList[12].Value; @@ -388,7 +479,7 @@ namespace BitgetAPI.IndicatorConditionSetup 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; var 전봉12 = candleData_전봉.movingAverageDataList[12].Value; @@ -405,8 +496,7 @@ namespace BitgetAPI.IndicatorConditionSetup 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; var 현재봉12 = candleData.movingAverageDataList[12].Value; @@ -414,6 +504,7 @@ namespace BitgetAPI.IndicatorConditionSetup var 현재봉36 = candleData.movingAverageDataList[36].Value; var 현재봉20 = candleData.movingAverageDataList[20].Value; var 현재봉40 = candleData.movingAverageDataList[40].Value; + var 현재봉48 = candleData.movingAverageDataList[48].Value; var 현재봉72 = candleData.movingAverageDataList[72].Value; var 현재봉120 = candleData.movingAverageDataList[120].Value; var 현재봉144 = candleData.movingAverageDataList[144].Value; @@ -421,7 +512,6 @@ namespace BitgetAPI.IndicatorConditionSetup var 현재봉160 = candleData.movingAverageDataList[160].Value; var 현재봉80 = candleData.movingAverageDataList[80].Value; - var 전봉Bol4_Down = candleData_전봉.movingAverageDataList[4].BolangerValue_Down; var 전봉Bol12_Down = candleData_전봉.movingAverageDataList[12].BolangerValue_Down; var 전봉Bol24_Down = candleData_전봉.movingAverageDataList[24].BolangerValue_Down; @@ -451,43 +541,32 @@ namespace BitgetAPI.IndicatorConditionSetup var Bol12_Up = candleData.movingAverageDataList[12].BolangerValue_Up; var Bol24_Up = candleData.movingAverageDataList[24].BolangerValue_Up; var Bol72_Up = candleData.movingAverageDataList[72].BolangerValue_Up; + #endregion - if ((int)interval != 1) - { - continue; - } + 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 저고점 = 전저고점[market + strInterval]; + var 현재봉3_30 = 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; - if (현재봉4 > (전봉4 * 1.0001) && 전봉4 < 전전봉4) - { - 저고점["tempBeforeLowVal"] = 저고점["twoBeforeLowVal"]; - 저고점["twoBeforeLowVal"] = 저고점["beforeLowVal"]; - 저고점["beforeLowVal"] = 전봉4; - } - else if(현재봉4 < (전봉4 * 1.0001) && 저고점["tempBeforeLowVal"] == 저고점["twoBeforeLowVal"]) - { - 저고점["beforeLowVal"] = 저고점["twoBeforeLowVal"]; - 저고점["twoBeforeLowVal"] = 저고점["tempBeforeLowVal"]; - 저고점["tempBeforeLowVal"] = 0; - } - - if (현재봉4 < (전봉4 * 1.0001) && 전봉4 > 전전봉4) - { - 저고점["tempBeforeHighVal"] = 저고점["twoBeforeHighVal"]; - 저고점["twoBeforeHighVal"] = 저고점["beforeHighVal"]; - 저고점["beforeHighVal"] = 전봉4; - } - else if(현재봉4 > (전봉4 * 1.0001)) - { - 저고점["beforeHighVal"] = 저고점["tempBeforeHighVal"]; - 저고점["twoBeforeHighVal"] = 저고점["tempBeforeHighVal"]; - 저고점["tempBeforeHighVal"] = 0; - } - - if (저고점["twoBeforeLowVal"] == 0 || 저고점["twoBeforeHighVal"] == 0) + if (!(전저고점.ContainsKey(market + "1m") && 전저고점.ContainsKey(market + "5m") && 전저고점.ContainsKey(market + "30m"))) continue; + 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, "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; if (영호조건식_상향돌파) { @@ -506,19 +585,28 @@ namespace BitgetAPI.IndicatorConditionSetup //사는 시점 if (!UpBuyList.ContainsKey(market + interval)) { + if ((int)interval != 1) + { + continue; + } var buyFlag = false; - if ((전봉12 > 전전봉12 || 전봉24 > 전전봉24) && - candleData.Close > 저고점["beforeHighVal"] && 전봉24 < 전봉4 && - 저고점["twoBeforeLowVal"] < 저고점["beforeLowVal"] && - 저고점["twoBeforeHighVal"] < 저고점["beforeHighVal"]) - { + // 30분봉 + var flag_30 = (저고점_30["전전전저가"] > 저고점_30["전전저가"] && 저고점_30["전전저가"] < 저고점_30["전저가"] && 현재봉3_30 > 저고점_30["전저가"]) + || (저고점_30["전전저가"] > 저고점_30["전저가"] && candleData_30.High > 저고점_30["전고가"]); + + var flag_5 = (저고점_5["전전전저가"] > 저고점_5["전전저가"] && 저고점_5["전전저가"] < 저고점_5["전저가"] && candleData_5.High > 저고점_5["전고가"]) + || (저고점_5["전전저가"] > 저고점_5["전저가"] && candleData_5.High > 저고점_5["전고가"]); + + var flag_1 = 현재봉3 > 현재봉24 && 현재봉3 > 현재봉48 && 현재봉3 > 현재봉72 && 현재봉3 > 현재봉120; + + if (flag_30 && flag_5 && flag_1) { buyFlag = true; } + if (buyFlag) { - BuyLongStep[market + interval] = false; // 없으면 생성 if (signalData == null) { @@ -534,16 +622,14 @@ namespace BitgetAPI.IndicatorConditionSetup signals_SD.Add(signalInfoData); } + var buyDic = new Dictionary { { "MarketName", market }, { "BuyDate", nowTime }, - { "Price", price }, - + { "Price", price }, { "MCandleTimeType", (int)interval }, - { "CandleTime", candleData.Argument }, - { "HighData", 전봉144 > 전봉72 ? 144 : 72 }, - { "flag" , false }, + { "CandleTime", candleData.Argument }, { "Candle", candleData } }; @@ -585,8 +671,13 @@ namespace BitgetAPI.IndicatorConditionSetup //파는 시점 else { - var buyItem = UpBuyList[market + interval]; + if ((int)interval != 30) + { + continue; + } + var buyItem = UpBuyList[market + interval]; + var flag = (bool)buyItem["Flag"]; if (interval < MCandleTimeType.H1) { var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval); @@ -602,18 +693,15 @@ namespace BitgetAPI.IndicatorConditionSetup } var sellFlag = false; - - if (저고점["twoBeforeHighVal"] > 저고점["beforeHighVal"]) + if (저고점_30["전저가"] > 현재봉3) sellFlag = true; - if (전봉4 < 저고점["beforeLowVal"]) - sellFlag = true; if (sellFlag) { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100; - + BuyLongStep[market + interval] = false; var result = new Dictionary() { { "MarketName", market }, @@ -697,18 +785,28 @@ namespace BitgetAPI.IndicatorConditionSetup //사는 시점 if (!DownBuyList.ContainsKey(market + interval)) { + if ((int)interval != 1) + { + continue; + } + var buyFlag = false; - if ((전봉12 < 전전봉12 || 전봉24 < 전전봉24) && - candleData.Close < 저고점["beforeLowVal"] && 전봉24 > 전봉4 && - 저고점["twoBeforeHighVal"] > 저고점["beforeHighVal"] && - 저고점["twoBeforeLowVal"] > 저고점["beforeLowVal"]) + + var flag_30 = (저고점_30["전전전고가"] < 저고점_30["전전고가"] && 저고점_30["전전고가"] > 저고점_30["전고가"] && 현재봉3_30 < 저고점_30["전고가"]) + || (저고점_30["전전고가"] < 저고점_30["전고가"] && candleData_30.Low < 저고점_30["전저가"]); + + var flag_5 = (저고점_5["전전전고가"] < 저고점_5["전전고가"] && 저고점_5["전전고가"] > 저고점_5["전고가"] && candleData_5.Low < 저고점_5["전저가"]) + || (저고점_5["전전고가"] < 저고점_5["전고가"] && candleData_5.Low < 저고점_5["전저가"]); + + var flag_1 = 현재봉3 < 현재봉24 && 현재봉3 < 현재봉48 && 현재봉3 < 현재봉72 && 현재봉3 < 현재봉120; + + if (flag_30 && flag_5 && flag_1) { buyFlag = true; } if (buyFlag) { - BuyShortStep[market + interval] = false; // 없으면 생성 if (signalData == null) { @@ -729,11 +827,8 @@ namespace BitgetAPI.IndicatorConditionSetup { "MarketName", market }, { "BuyDate", nowTime }, { "Price", price }, - { "MCandleTimeType", (int)interval }, - { "LowData", 전봉144 < 전봉72 ? 144 : 72 }, - { "flag" , false }, - { "CandleTime", candleData.Argument }, - { "MovingRate4_8", 현재봉4 - 현재봉8 }, + { "MCandleTimeType", (int)interval }, + { "CandleTime", candleData.Argument }, { "Candle", candleData } }; @@ -747,7 +842,7 @@ namespace BitgetAPI.IndicatorConditionSetup [5] = false }; SellShortStep.Add(market + interval, dic); - BuyShortStep[market + interval] = false; + if (ShortCount < 5) { double size = YHKIM_OrderAmount / price * YHKIM_Leverage; @@ -775,8 +870,14 @@ namespace BitgetAPI.IndicatorConditionSetup //파는 시점 else { + if ((int)interval != 30) + { + continue; + } + var sellFlag = false; var buyItem = DownBuyList[market + interval]; + var flag = (bool)buyItem["Flag"]; if (interval < MCandleTimeType.H1) { @@ -792,14 +893,12 @@ namespace BitgetAPI.IndicatorConditionSetup continue; } - if (저고점["twoBeforeLowVal"] < 저고점["beforeLowVal"]) - sellFlag = true; - - if (전봉4 > 저고점["beforeHighVal"]) + if (저고점_30["전고가"] < 현재봉3) sellFlag = true; if (sellFlag) { + BuyShortStep[market + interval] = false; double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100; @@ -881,6 +980,76 @@ namespace BitgetAPI.IndicatorConditionSetup } } + private 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"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute && + (candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempHighVal"] > 2 * (int)type) + { + 저고점["tempLow2Val"] = 저고점["tempLowVal"]; + 저고점["tempLowVal"] = candleData.Argument.Hour * 60 + candleData.Argument.Minute; + 저고점["switchLowVal"] = 저고점["전전전전저가"]; + 저고점["전전전전저가"] = 저고점["전전저가"]; + 저고점["전전전저가"] = 저고점["전전저가"]; + 저고점["전전저가"] = 저고점["전저가"]; + 저고점["전저가"] = 전전봉3; + + } + else if (전봉3 > 전전봉3 && 전전봉3 < 전전전봉3 && + 저고점["tempLowVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute && + (candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempHighVal"] <= 2 * (int)type) + { + //이전으로 초기화 작업(High) + 저고점["전고가"] = 저고점["전전고가"]; + 저고점["전전고가"] = 저고점["전전전고가"]; + 저고점["전전전고가"] = 저고점["전전전전고가"]; + 저고점["전전전전고가"] = 저고점["switchLowVal"]; + 저고점["tempHighVal"] = 저고점["tempHigh2Val"]; + + if (저고점["전저가"] > 전전봉3) + 저고점["전저가"] = 전전봉3; + } + + //전고가 + if (전전봉3 > 전봉3 && 전전봉3 > 전전전봉3 && + 저고점["tempHighVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute && + (candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempLowVal"] > 2 * (int)type) + { + 저고점["tempHigh2Val"] = 저고점["tempHighVal"]; + 저고점["tempHighVal"] = candleData.Argument.Hour * 60 + candleData.Argument.Minute; + 저고점["switchHighVal"] = 저고점["전전전전고가"]; + 저고점["전전전전고가"] = 저고점["전전전고가"]; + 저고점["전전전고가"] = 저고점["전전고가"]; + 저고점["전전고가"] = 저고점["전고가"]; + 저고점["전고가"] = 전전봉3; + } + else if (전전봉3 > 전봉3 && 전전봉3 > 전전전봉3 && + 저고점["tempHighVal"] != candleData.Argument.Hour * 60 + candleData.Argument.Minute && + (candleData.Argument.Hour * 60 + candleData.Argument.Minute) - 저고점["tempLowVal"] < 2 * (int)type) + { + //이전으로 초기화 작업(Low) + 저고점["전저가"] = 저고점["전전저가"]; + 저고점["전전저가"] = 저고점["전전전저가"]; + 저고점["전전전저가"] = 저고점["전전전전저가"]; + 저고점["전전전전저가"] = 저고점["switchHighVal"]; + 저고점["tempLowVal"] = 저고점["tempLow2Val"]; + + if (저고점["전고가"] < 전전봉3) + 저고점["전고가"] = 전전봉3; + } + + 전저고점[market + strInterval] = 저고점; + + if (저고점["전전전저가"] == 0 || 저고점["전전전고가"] == 0) + return false; + + return true; + } + public Dictionary GetPendingOrders() { var timestamp = GetTimeStamp().ToString(); diff --git a/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs b/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs index d604e47..48f50fe 100644 --- a/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs +++ b/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs @@ -22,6 +22,7 @@ namespace BitgetAPI.IndicatorConditionSetup // 기간 public int CandleLength4 { get; set; } = 4; public int CandleLength2 { get; set; } = 2; + public int CandleLength3 { get; set; } = 3; public int CandleLength36 { get; set; } = 36; // 기간 public int CandleLength72 { get; set; } = 72; @@ -62,6 +63,7 @@ namespace BitgetAPI.IndicatorConditionSetup candleData.movingAverageDataList.Add(CandleLength40, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength48, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength72, new MovingAverageData()); + candleData.movingAverageDataList.Add(CandleLength3, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength8, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength20, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength80, new MovingAverageData());