From 8bc214ad9d504083d40c49562bf5cab69d16acef Mon Sep 17 00:00:00 2001 From: kyh <1329522@naver.com> Date: Tue, 26 Nov 2024 21:54:01 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=95=EB=A6=AC=EB=90=9C=201=EB=B2=88=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EC=8B=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IndicatorProcess.cs | 523 ++++-------------- 1 file changed, 99 insertions(+), 424 deletions(-) diff --git a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs index 15ddeaf..9d20a0d 100644 --- a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs +++ b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs @@ -119,11 +119,10 @@ namespace BitgetAPI.IndicatorConditionSetup public List> BuyShortList = new List>(); public List> ResultList = new List>(); - public Dictionary SellShortStep = new Dictionary(); - public Dictionary SellLongStep = new Dictionary(); + public Dictionary> SellShortStep = new Dictionary>(); + public Dictionary> SellLongStep = new Dictionary>(); + - public Dictionary FirstShortFlag = new Dictionary(); - public Dictionary FirstLongFlag = new Dictionary(); // 전봉이 구름떼 돌파후 시가가 구름떼 위에서 시작하는 것 @@ -414,14 +413,7 @@ namespace BitgetAPI.IndicatorConditionSetup if ((int)interval != 1) { continue; - } - - if(!FirstLongFlag.ContainsKey(market + interval)) - { - FirstLongFlag[market + interval] = false; - FirstShortFlag[market + interval] = false; - } - + } if (영호조건식_상향돌파) { @@ -439,10 +431,12 @@ namespace BitgetAPI.IndicatorConditionSetup if (!UpBuyList.ContainsKey(market + interval)) { if ( - 현재봉24 < 현재봉2 && 전봉24 > 전봉2 + candleData.IchimokData.하한선 > 현재봉2 && candleData_전봉.IchimokData.하한선 > 전봉2 && + 현재봉72 > 현재봉2 && 전봉72 > 전봉2 && 전봉24 > 전봉2 && 현재봉24 < 현재봉2 && + 전봉12 < 전봉2 && 현재봉12 < 현재봉24 ) { - FirstLongFlag[market + interval] = false; + // 없으면 생성 if (signalData == null) { @@ -464,14 +458,23 @@ namespace BitgetAPI.IndicatorConditionSetup { "BuyDate", nowTime }, { "Price", price }, { "MCandleTimeType", (int)interval }, - { "Type", 전봉24 < 전봉72 ? 24 : 72 }, + { "Type", 1 }, { "CandleTime", candleData.Argument }, { "MovingRate4_8", 현재봉8 - 현재봉4 }, { "Candle", candleData } }; UpBuyList.Add(market + interval, buyDic); - SellLongStep.Add(market + interval, 0); + + var dic = new Dictionary + { + [1] = true, + [2] = false, + [3] = false, + [4] = false, + [5] = false + }; + SellLongStep.Add(market + interval, dic); if (LongCount < 5) { double size = YHKIM_OrderAmount / price * YHKIM_Leverage; @@ -500,229 +503,49 @@ namespace BitgetAPI.IndicatorConditionSetup else { var buyItem = UpBuyList[market + interval]; - var sellFlag = false; - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 5); - if (nowTime < buyTime) - { - if (현재봉2 < 전봉2 && 현재봉24- 전봉24 < 전봉24 - 전전봉24) - sellFlag = true; - else - continue; - } - - double compareVal = 0; int.TryParse(buyItem["Type"].ToString(), out var type); var val = SellLongStep[market + interval]; - - if (type == 24) + switch (type) { - var origin = 전봉24; - var compare = 전봉72; + case 1: + if (현재봉12 > 현재봉24 && !val[2]) + val[2] = true; + if (현재봉2 > 현재봉72 && !val[3]) + val[3] = true; + if (현재봉12 > 현재봉72 && !val[4]) + val[4] = true; + if (현재봉24 > 현재봉72 && !val[5]) + val[5] = true; - compareVal = origin; - if (val <= 0) - { - if (origin > compare) + if (val[1] && !val[2] && !val[3] && !val[4] && !val[5]) { - if (전봉2 > origin) - val = 1; - else - sellFlag = true; + sellFlag = !(현재봉12 < 현재봉24 && 현재봉24 < 현재봉2 && 현재봉2 < 현재봉72); } - else + else if (val[1] && val[2] && !val[3] && !val[4] && !val[5]) { - if (전봉2 > compare) - val = -1; - - if (전봉12 > origin && 전봉2 > 전봉12) - val = -2; - if (전봉12 < origin && 전봉2 > 전봉12) - val = 0; - if (전봉12 < compare && 전봉2 > 전봉12) - val = -1; - if (전봉12 > compare && 전봉2 > 전봉12) - val = -2; + sellFlag = !(현재봉24 < 현재봉12 && 현재봉12 < 현재봉2 && 현재봉2 < 현재봉72); } - } - - if (val == 1) - { - compareVal = 높은값_72_24_전봉; - - if (전봉2 > 전봉12) + else if (val[1] && !val[2] && val[3] && !val[4] && !val[5]) { - val = 2; + sellFlag = !(현재봉12 < 현재봉24 && 현재봉24 < 현재봉72 && 현재봉72 < 현재봉2); } - } - - if (val == 2 || val == -2) - compareVal = 전봉12; - else if (val == 0) - compareVal = origin; - else - compareVal = compare; + else if (val[1] && val[2] && val[3] && !val[4] && !val[5]) + { + sellFlag = !(현재봉24 < 현재봉12 && 현재봉12 < 현재봉72 && 현재봉72 < 현재봉2); + } + else if (val[1] && val[2] && val[3] && val[4] && !val[5]) + { + sellFlag = !(현재봉24 < 현재봉72 && 현재봉72 < 현재봉12 && 현재봉12 < 현재봉2); + } + else if (val[1] && val[2] && val[3] && val[4] && val[5]) + { + sellFlag = !(현재봉72 < 현재봉24 && 현재봉24 < 현재봉12 && 현재봉12 < 현재봉2); + } + break; } - if (type == 72) - { - var origin = 전봉24; - var compare = 전봉72; - - compareVal = origin; - if (val <= 0) - { - if (origin > compare) - { - if (전봉2 > origin) - val = 1; - else - sellFlag = true; - } - else - { - if (전봉2 > compare) - val = -1; - - if (전봉12 > origin && 전봉2 > 전봉12) - val = -2; - if (전봉12 < origin && 전봉2 > 전봉12) - val = 0; - if (전봉12 < compare && 전봉2 > 전봉12) - val = -1; - if (전봉12 > compare && 전봉2 > 전봉12) - val = -2; - } - } - - if (val == 1) - { - compareVal = 높은값_72_24_전봉; - - if (전봉2 > 전봉12) - { - val = 2; - } - } - - if (val == 2 || val == -2) - compareVal = 전봉12; - else if (val == 0) - compareVal = origin; - else - compareVal = compare; - } - - - - //var sellFlag = false; - - //if (interval < MCandleTimeType.H1) - //{ - // var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - // if (nowTime < buyTime) - // { - // var candleTime = ((DateTime)buyItem["CandleTime"]); - - // if (candleTime.Minute != candleData.Argument.Minute) - // { - // if (candleData_전봉.High < 높은값_72_24) - // { - // sellFlag = true; - // } - // else - // { - // continue; - // } - // } - // else - // { - // continue; - // } - // } - - //continue; - //} - ////임시로 처리 - //else - //{ - // var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - // if (nowTime < buyTime) { - // var candleTime = ((DateTime)buyItem["CandleTime"]); - - // if (candleTime.Minute != candleData.Argument.Minute) - // { - // if (candleData_전봉.High < 높은값_72_24) - // { - // sellFlag = true; - // } - // else - // { - // continue; - // } - // } - // else - // { - // continue; - // } - // } - //} - - //var compareVal = 높은값_72_24; - //var val = SellLongStep[market + interval]; - //double.TryParse(buyItem["MovingRate4_8"].ToString(), out var buyMovingRage4_8); - - //if (val == 0) - //{ - // if (높은값_72_24 < 현재봉4) - // { - // val = 1; - // } - //} - - //if (val == 1) - //{ - // if (현재봉4 > 현재봉8) - // { - // if (현재봉8 > 높은값_72_24) - // { - // val = 2; - - // } - // } - //} - - //if (val == 0) - //{ - // sellFlag = true; - //} - //else if (val == 1) - //{ - // compareVal = 높은값_72_24; - //} - //else if (val == 2) - //{ - // compareVal = 현재봉8; - - // if (buyMovingRage4_8 < 현재봉4 - 현재봉8) - // sellFlag = true; - //} - - //SellLongStep[market + interval] = val; - - //if (전봉8 > 현재봉8 || 현재봉4 > compareVal) - //{ - // sellFlag = true; - //} - - - - - - //SellLongStep[market + interval] = val; - - if (현재봉2 < 현재봉24 || 현재봉24 < 현재봉36) - + if (sellFlag) { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100; @@ -811,11 +634,13 @@ namespace BitgetAPI.IndicatorConditionSetup if (!DownBuyList.ContainsKey(market + interval)) { if ( - 현재봉24 > 현재봉2 && 전봉24 < 전봉2 + candleData.IchimokData.상한선 < 현재봉2 && candleData_전봉.IchimokData.상한선 < 전봉2 && + 현재봉72 < 현재봉2 && 전봉72 < 전봉2 && 전봉24 < 전봉2 && 현재봉24 > 현재봉2 && + 전봉12 > 전봉2 && 현재봉12 > 현재봉24 ) { - FirstShortFlag[market + interval] = false; + // 없으면 생성 if (signalData == null) { @@ -837,14 +662,22 @@ namespace BitgetAPI.IndicatorConditionSetup { "BuyDate", nowTime }, { "Price", price }, { "MCandleTimeType", (int)interval }, - { "Type", 전봉24 > 전봉72 ? 24 : 72 }, + { "Type", 1 }, { "CandleTime", candleData.Argument }, { "MovingRate4_8", 현재봉4 - 현재봉8 }, { "Candle", candleData } }; DownBuyList.Add(market + interval, buyDic); - SellShortStep.Add(market + interval, 0); + var dic = new Dictionary + { + [1] = true, + [2] = false, + [3] = false, + [4] = false, + [5] = false + }; + SellShortStep.Add(market + interval, dic); if (ShortCount < 5) { @@ -874,209 +707,51 @@ namespace BitgetAPI.IndicatorConditionSetup else { var sellFlag = false; - - var buyItem = DownBuyList[market + interval]; - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval); - if (nowTime < buyTime) - { - if (현재봉2 > 전봉2) - sellFlag = true; - else - continue; - } - //if (interval < MCandleTimeType.H1) - //{ - // var buyTime = ((DateTime)buyItem["BuyDate"]).AddHours(((int)interval/60) * 2); - - // if (nowTime < buyTime) - // { - // var candleTime = ((DateTime)buyItem["CandleTime"]); - - // if (candleTime.Hour != candleData.Argument.Hour) - // { - // if(candleData_전봉.Low < 낮은값_72_24) - // { - // sellFlag = true; - // } - // else - // { - // continue; - // } - // } - // else - // { - // continue; - // } - - // } - - //} - ////임시로 처리 - //else - //{ - // var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - // if (nowTime < buyTime) - // { - // var candleTime = ((DateTime)buyItem["CandleTime"]); - - // if (candleTime.Minute != candleData.Argument.Minute) - // { - // if (candleData_전봉.Low > 낮은값_72_24) - // { - // sellFlag = true; - // } - // else - // { - // continue; - // } - // } - // else - // { - // continue; - // } - // } - - //} - //var compareVal = 낮은값_72_24; - //var val = SellShortStep[market + interval]; - - //double.TryParse(buyItem["MovingRate4_8"].ToString(), out var buyMovingRage4_8); - - //if (val == 0) - //{ - // if (낮은값_72_24 > 현재봉4) - // { - // val = 1; - // } - //} - - //if(val == 1) { - // if (현재봉4 < 현재봉8) - // { - // if (현재봉8 < 낮은값_72_24) - // { - // val = 2; - - // } - // } - //} - - //if(val == 0) - //{ - // sellFlag = true; - //} - //else if(val == 1) - //{ - // compareVal = 낮은값_72_24; - //} - //else if (val == 2) - //{ - // compareVal = 현재봉8; - - // if (buyMovingRage4_8 < 현재봉8 - 현재봉4) - // sellFlag = true; - //} - - - //SellShortStep[market + interval] = val; - - //if (전봉8 < 현재봉8 || 현재봉4 > compareVal) - //{ - // sellFlag = true; - //} - double compareVal = 0; + var buyItem = UpBuyList[market + interval]; int.TryParse(buyItem["Type"].ToString(), out var type); var val = SellShortStep[market + interval]; - - if (type == 24) + switch (type) { - if (val == 0) - { - var origin = 전봉24; - var compare = 전봉72; + case 1: + if (현재봉12 < 현재봉24 && !val[2]) + val[2] = true; + if (현재봉2 < 현재봉72 && !val[3]) + val[3] = true; + if (현재봉12 < 현재봉72 && !val[4]) + val[4] = true; + if (현재봉24 < 현재봉72 && !val[5]) + val[5] = true; - compareVal = origin; - - if (origin < compare) + if (val[1] && !val[2] && !val[3] && !val[4] && !val[5]) { - if (전봉2 < origin) - val = 1; - else - sellFlag = true; + sellFlag = !(현재봉12 > 현재봉24 && 현재봉24 > 현재봉2 && 현재봉2 > 현재봉72); + } + else if (val[1] && val[2] && !val[3] && !val[4] && !val[5]) + { + sellFlag = !(현재봉24 > 현재봉12 && 현재봉12 > 현재봉2 && 현재봉2 > 현재봉72); + } + else if (val[1] && !val[2] && val[3] && !val[4] && !val[5]) + { + sellFlag = !(현재봉12 > 현재봉24 && 현재봉24 > 현재봉72 && 현재봉72 > 현재봉2); + } + else if (val[1] && val[2] && val[3] && !val[4] && !val[5]) + { + sellFlag = !(현재봉24 > 현재봉12 && 현재봉12 > 현재봉72 && 현재봉72 > 현재봉2); + } + else if (val[1] && val[2] && val[3] && val[4] && !val[5]) + { + sellFlag = !(현재봉24 > 현재봉72 && 현재봉72 > 현재봉12 && 현재봉12 > 현재봉2); + } + else if (val[1] && val[2] && val[3] && val[4] && val[5]) + { + sellFlag = !(현재봉72 > 현재봉24 && 현재봉24 > 현재봉12 && 현재봉12 > 현재봉2); } else - { - if (전봉2 < compare) - compareVal = compare; - - if (전봉2 < origin) - compareVal = origin; - - if(전봉12 < origin) - compareVal = 전봉12; - } - } - - if (val == 1) - { - compareVal = 낮은값_72_24_전봉; - - if (전봉2 < 전봉12) - { - val = 2; - } - } - - if (val == 2) - compareVal = 전봉12; + sellFlag = true; + break; } - if (type == 72) - { - if (val == 0) - { - var origin = 전봉72; - var compare = 전봉24; - - compareVal = origin; - - if (origin < compare) - { - if (전봉2 < origin) - val = 1; - else - sellFlag = true; - } - else - { - if (전봉2 < compare) - compareVal = compare; - - if (전봉2 < origin) - compareVal = origin; - - if (전봉12 < origin) - compareVal = 전봉12; - } - } - - if (val == 1) - { - compareVal = 낮은값_72_24_전봉; - - if (전봉2 < 전봉12) - { - val = 2; - } - } - - if (val == 2) - compareVal = 전봉12; - } - - SellShortStep[market + interval] = val; - - if (전봉2 > compareVal || 전봉2 > 높은값_72_24_전봉 || sellFlag) + if (sellFlag) { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100;