diff --git a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs index 8fbd0fb..15b6b21 100644 --- a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs +++ b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs @@ -278,20 +278,20 @@ namespace BitgetAPI.IndicatorConditionSetup movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_Temp_List, candleData_Main); if (i > 210) { - var 현재봉3_Temp = candleDatas_Temp_List[i].movingAverageDataList[3].Value; - var 전봉3_Temp = candleDatas_Temp_List[i - 1].movingAverageDataList[3].Value; - 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, candleDatas_Temp_List[candleDatas_Temp_List.Count - 1]); + var 현재봉4_Temp = candleDatas_Temp_List[i].movingAverageDataList[4].Value; + var 전봉4_Temp = candleDatas_Temp_List[i - 1].movingAverageDataList[4].Value; + var 전전봉4_Temp = candleDatas_Temp_List[i - 2].movingAverageDataList[4].Value; + var 전전전봉4_Temp = candleDatas_Temp_List[i - 3].movingAverageDataList[4].Value; + var 전전전전봉4_Temp = candleDatas_Temp_List[i - 4].movingAverageDataList[4].Value; + var returnVal = Calculate전고점(market, strInterval, interval, 전봉4_Temp, 전전봉4_Temp, 전전전봉4_Temp, candleDatas_Temp_List[candleDatas_Temp_List.Count - 1]); } } } if (!BuyShortStep.ContainsKey(market)) { - BuyShortStep[market] = false; - BuyLongStep[market] = false; + BuyShortStep[market] = true; + BuyLongStep[market] = true; } if (!(전저고점.ContainsKey(market + "30m"))) continue; @@ -341,47 +341,47 @@ namespace BitgetAPI.IndicatorConditionSetup movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_정렬, candleData_전전전전봉); #endregion - #region 1분봉 처리 + #region 3분봉 처리 /* // 시간별로 정렬하기 (임시 리스트) - var candleDatas_1 = findedMarket.candleDataList[MCandleTimeType.M1]; - var candleDatas_1_정렬 = candleDatas_1.OrderBy(i => i.Argument).ToList(); + var candleDatas_3 = findedMarket.candleDataList[MCandleTimeType.M3]; + var candleDatas_3_정렬 = candleDatas_3.OrderBy(i => i.Argument).ToList(); - var candleData_1 = candleDatas_1.Find(i => i.Argument == candleDatas_1_정렬.Last().Argument); + var candleData_3 = candleDatas_3.Find(i => i.Argument == candleDatas_3_정렬.Last().Argument); - if (candleData_1 == null) continue; + if (candleData_3 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_1_정렬, candleData_1); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_1_정렬, candleData_1); + ichimokuConditionSetup.calIchimokuData(candleDatas_3_정렬, candleData_3); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_3_정렬, candleData_3); - candleDatas_1_정렬.RemoveAt(candleDatas_1_정렬.Count - 1); - var candleData_1_전봉 = candleDatas_1.Find(i => i.Argument == candleDatas_1_정렬.Last().Argument); + candleDatas_3_정렬.RemoveAt(candleDatas_3_정렬.Count - 1); + var candleData_3_전봉 = candleDatas_3.Find(i => i.Argument == candleDatas_3_정렬.Last().Argument); - if (candleData_1_전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_1_정렬, candleData_1_전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_1_정렬, candleData_1_전봉); + if (candleData_3_전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_3_정렬, candleData_3_전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_3_정렬, candleData_3_전봉); - candleDatas_1_정렬.RemoveAt(candleDatas_1_정렬.Count - 1); - var candleData_1_전전봉 = candleDatas_1.Find(i => i.Argument == candleDatas_1_정렬.Last().Argument); + candleDatas_3_정렬.RemoveAt(candleDatas_3_정렬.Count - 1); + var candleData_3_전전봉 = candleDatas_3.Find(i => i.Argument == candleDatas_3_정렬.Last().Argument); - if (candleData_1_전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_1_정렬, candleData_1_전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_1_정렬, candleData_1_전전봉); + if (candleData_3_전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_3_정렬, candleData_3_전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_3_정렬, candleData_3_전전봉); - candleDatas_1_정렬.RemoveAt(candleDatas_1_정렬.Count - 1); - var candleData_1_전전전봉 = candleDatas_1.Find(i => i.Argument == candleDatas_1_정렬.Last().Argument); + candleDatas_3_정렬.RemoveAt(candleDatas_3_정렬.Count - 1); + var candleData_3_전전전봉 = candleDatas_3.Find(i => i.Argument == candleDatas_3_정렬.Last().Argument); - if (candleData_1_전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_1_정렬, candleData_1_전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_1_정렬, candleData_1_전전전봉); + if (candleData_3_전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_3_정렬, candleData_3_전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_3_정렬, candleData_3_전전전봉); - candleDatas_1_정렬.RemoveAt(candleDatas_1_정렬.Count - 1); - var candleData_1_전전전전봉 = candleDatas_1.Find(i => i.Argument == candleDatas_1_정렬.Last().Argument); + candleDatas_3_정렬.RemoveAt(candleDatas_3_정렬.Count - 1); + var candleData_3_전전전전봉 = candleDatas_3.Find(i => i.Argument == candleDatas_3_정렬.Last().Argument); - if (candleData_1_전전전전봉 == null) continue; - ichimokuConditionSetup.calIchimokuData(candleDatas_1_정렬, candleData_1_전전전전봉); - movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_1_정렬, candleData_1_전전전전봉); + if (candleData_3_전전전전봉 == null) continue; + ichimokuConditionSetup.calIchimokuData(candleDatas_3_정렬, candleData_3_전전전전봉); + movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_3_정렬, candleData_3_전전전전봉); */ #endregion @@ -591,28 +591,30 @@ namespace BitgetAPI.IndicatorConditionSetup var Bol72_Up = candleData.movingAverageDataList[72].BolangerValue_Up; #endregion /* - var 현재봉2_1 = candleData_1.movingAverageDataList[2].Value; - var 전봉2_1 = candleData_1_전봉.movingAverageDataList[2].Value; - var 전전봉2_1 = candleData_1_전전봉.movingAverageDataList[2].Value; - var 전전전봉2_1 = candleData_1_전전전봉.movingAverageDataList[2].Value; - var 전전전전봉2_1 = candleData_1_전전전전봉.movingAverageDataList[2].Value; + var 현재봉2_3 = candleData_3.movingAverageDataList[2].Value; + var 전봉2_3 = candleData_3_전봉.movingAverageDataList[2].Value; + var 전전봉2_3 = candleData_3_전전봉.movingAverageDataList[2].Value; + var 전전전봉2_3 = candleData_3_전전전봉.movingAverageDataList[2].Value; + var 전전전전봉2_3 = candleData_3_전전전전봉.movingAverageDataList[2].Value; - var 현재봉3_1 = candleData_1.movingAverageDataList[3].Value; - var 전봉3_1 = candleData_1_전봉.movingAverageDataList[3].Value; - var 전전봉3_1 = candleData_1_전전봉.movingAverageDataList[3].Value; - var 전전전봉3_1 = candleData_1_전전전봉.movingAverageDataList[3].Value; - var 전전전전봉3_1 = candleData_1_전전전전봉.movingAverageDataList[3].Value; + var 현재봉3_3 = candleData_3.movingAverageDataList[3].Value; + var 전봉3_3 = candleData_3_전봉.movingAverageDataList[3].Value; + var 전전봉3_3 = candleData_3_전전봉.movingAverageDataList[3].Value; + var 전전전봉3_3 = candleData_3_전전전봉.movingAverageDataList[3].Value; + var 전전전전봉3_3 = candleData_3_전전전전봉.movingAverageDataList[3].Value; - var 현재봉4_1 = candleData_1.movingAverageDataList[4].Value; - var 전봉4_1 = candleData_1_전봉.movingAverageDataList[4].Value; - var 전전봉4_1 = candleData_1_전전봉.movingAverageDataList[4].Value; - var 전전전봉4_1 = candleData_1_전전전봉.movingAverageDataList[4].Value; + var 현재봉4_3 = candleData_3.movingAverageDataList[4].Value; + var 전봉4_3 = candleData_3_전봉.movingAverageDataList[4].Value; + var 전전봉4_3 = candleData_3_전전봉.movingAverageDataList[4].Value; + var 전전전봉4_3 = candleData_3_전전전봉.movingAverageDataList[4].Value; - var 현재봉5_1 = candleData_1.movingAverageDataList[5].Value; - var 전봉5_1 = candleData_1_전봉.movingAverageDataList[5].Value; - var 전전봉5_1 = candleData_1_전전봉.movingAverageDataList[5].Value; - var 전전전봉5_1 = candleData_1_전전전봉.movingAverageDataList[5].Value; + var 현재봉5_3 = candleData_3.movingAverageDataList[5].Value; + var 전봉5_3 = candleData_3_전봉.movingAverageDataList[5].Value; + var 전전봉5_3 = candleData_3_전전봉.movingAverageDataList[5].Value; + var 전전전봉5_3 = candleData_3_전전전봉.movingAverageDataList[5].Value; + var 현재봉72_3 = candleData_3.movingAverageDataList[72].Value; */ + /* var 현재봉2_240 = candleData_240.movingAverageDataList[2].Value; var 전봉2_240 = candleData_240_전봉.movingAverageDataList[2].Value; @@ -659,58 +661,68 @@ namespace BitgetAPI.IndicatorConditionSetup //var returnVal = Calculate전고점(market, "5m", MCandleTimeType.M5, 전봉5, 전전봉5, 전전전봉5, candleData); //if (!returnVal) continue; - var returnVal = Calculate전고점(market, "30m", MCandleTimeType.M30, 전봉3, 전전봉3, 전전전봉3, candleData); + var returnVal = Calculate전고점(market, "30m", MCandleTimeType.M30, 전봉4, 전전봉4, 전전전봉4, candleData); if (!returnVal) continue; - var tempFlag1Short = (저고점_30["Type"] == 1 - && ((저고점_30["전저가"] > 저고점_30["전전저가"] - && 저고점_30["전전고가"] < 저고점_30["전고가"]) - || (저고점_30["전저가"] < 저고점_30["전전저가"] - && 저고점_30["전고가"] < 저고점_30["전전고가"]) - || (저고점_30["전저가"] < 저고점_30["전전저가"] - && 저고점_30["전고가"] > 저고점_30["전전고가"]))) - && candleData.IchimokData.상한선 > candleData.Close - //&& candleData_240.Close < 현재봉24_240 - //&& 현재봉24_240 < 전봉24_240 - && 현재봉24 > 현재봉72; + //var tempFlag1Short = 저고점_30["Type"] == 1 + // && ((저고점_30["전저가"] > 저고점_30["전전저가"] + // && 저고점_30["전전고가"] < 저고점_30["전고가"]) + // || (저고점_30["전저가"] < 저고점_30["전전저가"] + // && 저고점_30["전고가"] < 저고점_30["전전고가"]) + // || (저고점_30["전저가"] < 저고점_30["전전저가"] + // && 저고점_30["전고가"] > 저고점_30["전전고가"])); + //&& 현재봉3 < 현재봉72; + //&& candleData.IchimokData.상한선 > candleData.Close; + //&& candleData_240.Close < 현재봉24_240 + //&& 현재봉24_240 < 전봉24_240 + //&& 현재봉24 > 현재봉72; + - var tempFlag2Short = (저고점_30["Type"] == 0 - && ((저고점_30["전저가"] > 저고점_30["전전저가"] - && 저고점_30["전고가"] < 전봉3) - || (저고점_30["전저가"] < 저고점_30["전전저가"] - && 전봉3 < 저고점_30["전고가"]) - || (저고점_30["전저가"] < 저고점_30["전전저가"] - && 전봉3 > 저고점_30["전고가"])) - && 전전봉3 < 전봉3 && 전봉3 > 현재봉3) - && candleData.IchimokData.상한선 > candleData.Close - //&& candleData_240.Close < 현재봉24_240 - //&& 현재봉24_240 < 전봉24_240 - && 현재봉24 > 현재봉72; + var tempFlag2Short = 저고점_30["Type"] == 0 + && ( + //(저고점_30["전저가"] > 저고점_30["전전저가"] + //&& 저고점_30["전고가"] < 전봉4) || + (저고점_30["전저가"] < 저고점_30["전전저가"] + && 전봉4 > 저고점_30["전고가"]) || + (저고점_30["전저가"] > 저고점_30["전전저가"] + && 전봉4 > 저고점_30["전고가"]) + ) && 전전봉4 < 전봉4 && 전봉4 > 현재봉4 && candleData.Open > candleData.Close; - var tempFlag1Long = (저고점_30["Type"] == 0 - && ((저고점_30["전저가"] > 저고점_30["전전저가"] - && 저고점_30["전전고가"] < 저고점_30["전고가"]) - || (저고점_30["전저가"] > 저고점_30["전전저가"] - && 저고점_30["전고가"] < 저고점_30["전전고가"]) - || (저고점_30["전저가"] > 저고점_30["전전저가"] - && 저고점_30["전고가"] < 저고점_30["전전고가"]))) - && candleData.IchimokData.하한선 < candleData.Close - //&& candleData_240.Close > 현재봉24_240 - //&& 현재봉24_240 > 전봉24_240; - && 현재봉24 < 현재봉72; - var tempFlag2Long = (저고점_30["Type"] == 1 - && ((전봉3 > 저고점_30["전저가"] - && 저고점_30["전전고가"] < 저고점_30["전고가"]) - || (전봉3 > 저고점_30["전저가"] - && 저고점_30["전고가"] < 저고점_30["전전고가"]) - || (전봉3 > 저고점_30["전저가"] - && 저고점_30["전고가"] < 저고점_30["전전고가"])) - && 전전봉3 > 전봉3 && 전봉3 < 현재봉3) - && candleData.IchimokData.하한선 < candleData.Close - //&& candleData_240.Close > 현재봉24_240 - //&& 현재봉24_240 > 전봉24_240; - && 현재봉24 < 현재봉72; + //&& 현재봉4 < 현재봉72; + //&& candleData.IchimokData.상한선 > candleData.Close; + //&& candleData_240.Close < 현재봉24_240 + //&& 현재봉24_240 < 전봉24_240 + //&& 현재봉24 > 현재봉72; + + //var tempFlag1Long = 저고점_30["Type"] == 0 + // && ((저고점_30["전저가"] > 저고점_30["전전저가"] + // && 저고점_30["전전고가"] < 저고점_30["전고가"]) + // || (저고점_30["전저가"] > 저고점_30["전전저가"] + // && 저고점_30["전고가"] < 저고점_30["전전고가"]) + // || (저고점_30["전저가"] > 저고점_30["전전저가"] + // && 저고점_30["전고가"] < 저고점_30["전전고가"])); + //&& 현재봉3 > 현재봉72; + //&& candleData.IchimokData.하한선 < candleData.Close; + //&& candleData_240.Close > 현재봉24_240 + //&& 현재봉24_240 > 전봉24_240; + //&& 현재봉24 < 현재봉72; + + var tempFlag2Long = 저고점_30["Type"] == 1 + && ( + (전봉4 > 저고점_30["전저가"] + && 저고점_30["전전고가"] < 저고점_30["전고가"]) || + (전봉4 > 저고점_30["전저가"] + && 저고점_30["전고가"] < 저고점_30["전전고가"]) || + (전봉4 > 저고점_30["전저가"])) + && 전전봉4 > 전봉4 && 전봉4 < 현재봉4 && candleData.Open < candleData.Close; + + + + //&& candleData.IchimokData.하한선 < candleData.Close; + //&& candleData_240.Close > 현재봉24_240 + //&& 현재봉24_240 > 전봉24_240; + //&& 현재봉24 < 현재봉72; //var tempFlagShort = (저고점_30["Type"] == 1 // && 저고점_30["전고가"] < 저고점_30["전전고가"] @@ -738,7 +750,7 @@ namespace BitgetAPI.IndicatorConditionSetup if (영호조건식_상향돌파) { - if (!tempFlag1Long && !tempFlag2Long && !BuyLongStep[market]) + if (!tempFlag2Long && 현재봉4 < 현재봉72 && !BuyLongStep[market]) { BuyLongStep[market] = true; } @@ -760,8 +772,10 @@ namespace BitgetAPI.IndicatorConditionSetup if (!UpBuyList.ContainsKey(market)) { var buyFlag = false; - if (tempFlag2Long || tempFlag1Long) + if (tempFlag2Long) { + buyFlag = true; + // 60분봉 //var flag_240 = 현재봉3_240 > 전봉3_240 && candleData_240.Open < candleData_240.Close; @@ -797,39 +811,39 @@ namespace BitgetAPI.IndicatorConditionSetup // && 저고점_30["전고가"] < candleData.Close; //// && 저고점_30["전고가"] > candleData.Open; - - var minSec = 저고점_30["tempHighVal"]; - if (minSec > 0) - { - var minDate = new DateTime(1970, 1, 1, 0, 0, 0); - minDate = minDate.AddSeconds(minSec); - minDate = minDate.AddHours(8); - minDate = minDate.AddMinutes(-3 * (int)interval); - var candleDataList = candleDatas.OrderBy(i => i.Argument).ToList(); + //var minSec = 저고점_30["tempHighVal"]; - var list = candleDataList.Where(t => t.Argument > minDate).ToList(); + //if (minSec > 0) + //{ + // var minDate = new DateTime(1970, 1, 1, 0, 0, 0); + // minDate = minDate.AddSeconds(minSec); + // minDate = minDate.AddHours(8); + // minDate = minDate.AddMinutes(-3 * (int)interval); + // var candleDataList = candleDatas.OrderBy(i => i.Argument).ToList(); - var closeDataList = new List(); + // var list = candleDataList.Where(t => t.Argument > minDate).ToList(); - if (list.Count > 3) - { - closeDataList.Add(list[0].Close); - closeDataList.Add(list[1].Close); - closeDataList.Add(list[2].Close); - } - else - { - closeDataList = list.Select(t => t.Close).ToList(); - } - - var maxData = closeDataList.Max(); - - if (candleData.Close > maxData && 현재봉3 > 전봉3) - { - buyFlag = true; - } - } + // var closeDataList = new List(); + + // if (list.Count > 3) + // { + // closeDataList.Add(list[0].Close); + // closeDataList.Add(list[1].Close); + // closeDataList.Add(list[2].Close); + // } + // else + // { + // closeDataList = list.Select(t => t.Close).ToList(); + // } + + // var maxData = closeDataList.Max(); + + // if (candleData.Close > maxData && 현재봉3 > 전봉3) + // { + // buyFlag = true; + // } + //} if (buyFlag) { @@ -849,12 +863,16 @@ namespace BitgetAPI.IndicatorConditionSetup signals_SD.Add(signalInfoData); } + var min = candleData.Open - (저고점_30["전고가"] - 저고점_30["전저가"]); + var buyDic = new Dictionary { { "MarketName", market }, { "BuyDate", nowTime }, - { "Price", price }, - { "Flag", 저고점_30["전고가"] > 저고점_30["전전고가"]}, + { "Price", price }, + { "Flag", 저고점_30["전고가"] > 저고점_30["전전고가"]}, + { "MaxValue", candleData.Open + (저고점_30["전고가"] - 저고점_30["전저가"]) * 1.5}, + { "MinValue", min}, { "MCandleTimeType", (int)interval }, { "CandleTime", candleData.Argument }, { "Candle", candleData } @@ -874,7 +892,7 @@ namespace BitgetAPI.IndicatorConditionSetup if (LongCount < 5) { double size = YHKIM_OrderAmount / price * YHKIM_Leverage; - var orderData = FutureOrder(market, FutureMarginMode.isolated, size, price, FutureSide.BuyLong, OrderType.limit, YHKIM_Leverage); + var orderData = FutureOrder(market, FutureMarginMode.isolated, size, 0, FutureSide.BuyLong, OrderType.limit, YHKIM_Leverage); if (orderData != null) { var orderDic = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(orderData["data"])); @@ -903,22 +921,24 @@ namespace BitgetAPI.IndicatorConditionSetup var buyItem = UpBuyList[market]; var flag = (bool)buyItem["Flag"]; - + var MaxValue = (double)buyItem["MaxValue"]; + var MinValue = (double)buyItem["MinValue"]; + if (interval < MCandleTimeType.H1) { - var buyTime = ((DateTime)buyItem["CandleTime"]).AddMinutes((int)interval); + var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval); - if (nowTime < buyTime) - { + if (candleData.Argument < buyTime) + { continue; } } //임시로 처리 else { - var buyTime = ((DateTime)buyItem["CandleTime"]).AddHours((int)interval / 60); + var buyTime = ((DateTime)buyItem["BuyDate"]).AddHours((int)interval / 60); - if (nowTime < buyTime) + if (candleData.Argument < buyTime) { continue; } @@ -928,18 +948,27 @@ namespace BitgetAPI.IndicatorConditionSetup var sellFlag = false; - if (candleData.Close < candleData_전봉.Low || - candleData.Close < candleData_전전봉.Low || + if (candleData.Close < candleData_전봉.Low && + candleData.Close < candleData_전전봉.Low && candleData.Close < candleData_전전전봉.Low) { sellFlag = true; } + if(Bol24_Up < candleData.Close) sellFlag = true; + + //if (candleData.Close <= MinValue || candleData.Close >= MaxValue) + // sellFlag = true; + if (전봉4 < 전전봉4) + sellFlag = true; + if (sellFlag) { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100; - BuyLongStep[market] = false; + + if(buyPrice > price) + BuyLongStep[market] = false; var result = new Dictionary() { { "MarketName", market }, @@ -1020,7 +1049,7 @@ namespace BitgetAPI.IndicatorConditionSetup var description = string.Format("{0} 72,24,4 하락", strInterval); var signalData = signals_SD.Find(i => i.MarketName.Equals(market) && i.Description.Equals(description)); - if (!tempFlag1Short && !tempFlag2Short && !BuyShortStep[market]) + if (!tempFlag2Short && 현재봉4 > 현재봉72 && !BuyShortStep[market]) { BuyShortStep[market] = true; } @@ -1033,7 +1062,8 @@ namespace BitgetAPI.IndicatorConditionSetup if (!DownBuyList.ContainsKey(market)) { var buyFlag = false; - if (tempFlag2Short || tempFlag1Short) + + if (tempFlag2Short) { //var flag_240 = 현재봉3_240 < 전봉3_240 && candleData_240.Open > candleData_240.Close; ////저고점_240["Type"] == 0 && 저고점_240["전저가"] < 현재봉3_240 && 현재봉3_240 < 전봉3_240 && 전봉3_240> 전전봉3_240 && candleData_240.Open > candleData_240.Close; @@ -1065,39 +1095,48 @@ namespace BitgetAPI.IndicatorConditionSetup //{ // buyFlag = true; //} - - var minSec = 저고점_30["tempLowVal"]; - if (minSec > 0) - { - var minDate = new DateTime(1970, 1, 1, 0, 0, 0); - minDate = minDate.AddSeconds(minSec); - minDate = minDate.AddHours(8); - minDate = minDate.AddMinutes(-3 * (int)interval); - var candleDataList = candleDatas.OrderBy(i => i.Argument).ToList(); + //var minSec = 저고점_30["tempLowVal"]; - var list = candleDataList.Where(t => t.Argument > minDate).ToList(); - var closeDataList = new List(); + //if (minSec > 0) + //{ + // var minDate = new DateTime(1970, 1, 1, 0, 0, 0); + // minDate = minDate.AddSeconds(minSec); + // minDate = minDate.AddHours(8); + // minDate = minDate.AddMinutes(-3 * (int)interval); + // var candleDataList = candleDatas.OrderBy(i => i.Argument).ToList(); - if (list.Count > 3) - { - closeDataList.Add(list[0].Close); - closeDataList.Add(list[1].Close); - closeDataList.Add(list[2].Close); - } - else - { - closeDataList = list.Select(t => t.Close).ToList(); - } + // var list = candleDataList.Where(t => t.Argument > minDate).ToList(); + // var closeDataList = new List(); - var minData = closeDataList.Min(); + // if (list.Count > 3) + // { + // closeDataList.Add(list[0].Close); + // closeDataList.Add(list[1].Close); + // closeDataList.Add(list[2].Close); + // } + // else + // { + // closeDataList = list.Select(t => t.Close).ToList(); + // } - if (candleData.Close < minData && 현재봉3 < 전봉3) - { - buyFlag = true; - } - } + // var minData = closeDataList.Min(); + // if (candleData.Close < minData && 현재봉3 < 전봉3) + // { + // buyFlag = true; + // } + //} + + //if (candleData.Close > 저고점_30["전저가"]) + //{ + // buyFlag = true; + //} + //else + //{ + // BuyShortStep[market] = false; + //} + buyFlag = true; if (buyFlag) { // 없으면 생성 @@ -1116,13 +1155,15 @@ namespace BitgetAPI.IndicatorConditionSetup signals_SD.Add(signalInfoData); } + var min = candleData.Open + (저고점_30["전고가"] - 저고점_30["전저가"]); var buyDic = new Dictionary { { "MarketName", market }, { "BuyDate", nowTime }, - { "Price", price }, - + { "Price", price }, + { "MaxValue", candleData.Open - (저고점_30["전고가"] - 저고점_30["전저가"]) * 1.5}, + { "MinValue", min}, { "Flag", 저고점_30["전저가"] < 저고점_30["전전저가"] }, { "MCandleTimeType", (int)interval }, { "CandleTime", candleData.Argument }, @@ -1143,7 +1184,7 @@ namespace BitgetAPI.IndicatorConditionSetup if (ShortCount < 5) { double size = YHKIM_OrderAmount / price * YHKIM_Leverage; - var orderData = FutureOrder(market, FutureMarginMode.isolated, size, price, FutureSide.BuyShort, OrderType.limit, YHKIM_Leverage); + var orderData = FutureOrder(market, FutureMarginMode.isolated, size, 0, FutureSide.BuyShort, OrderType.limit, YHKIM_Leverage); if (orderData != null) { var orderDic = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(orderData["data"])); @@ -1172,12 +1213,15 @@ namespace BitgetAPI.IndicatorConditionSetup { var buyItem = DownBuyList[market]; var flag = (bool)buyItem["Flag"]; - + var MinValue = (double)buyItem["MinValue"]; + var MaxValue = (double)buyItem["MaxValue"]; + var sellFlag = false; + if (interval < MCandleTimeType.H1) { - var buyTime = ((DateTime)buyItem["CandleTime"]).AddMinutes((int)interval); + var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval); - if (nowTime < buyTime) + if (candleData.Argument < buyTime) { continue; } @@ -1185,31 +1229,34 @@ namespace BitgetAPI.IndicatorConditionSetup //임시로 처리 else { - var buyTime = ((DateTime)buyItem["CandleTime"]).AddHours((int)interval / 60); + var buyTime = ((DateTime)buyItem["BuyDate"]).AddHours((int)interval / 60); - if (nowTime < buyTime) + if (candleData.Argument < buyTime) { continue; } } - - var buyTimeUnix = ((DateTimeOffset)((DateTime)buyItem["CandleTime"])).ToUnixTimeSeconds(); - - var sellFlag = false; - - - if (candleData.Close > candleData_전봉.High || - candleData.Close > candleData_전전봉.High || + if (candleData.Close > candleData_전봉.High && + candleData.Close > candleData_전전봉.High && candleData.Close > candleData_전전전봉.High) { sellFlag = true; } + + var buyTimeUnix = ((DateTimeOffset)((DateTime)buyItem["CandleTime"])).ToUnixTimeSeconds(); + + if (Bol24_Down > candleData.Close) sellFlag = true; + + if (전봉4 > 전전봉4) + sellFlag = true; + if (sellFlag) - { - BuyShortStep[market] = false; + { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); + if (buyPrice < price) + BuyShortStep[market] = false; var resultRate = ((price - buyPrice) / buyPrice) * 100; var result = new Dictionary() @@ -1318,11 +1365,11 @@ namespace BitgetAPI.IndicatorConditionSetup 저고점["tempLowVal"] != ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() && ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds() - 저고점["tempHighVal"] >= 120 * (int)type) { - if(저고점["전저가"] > 전전봉3) + if (저고점["전저가"] > 전전봉3) { 저고점["tempLowVal"] = ((DateTimeOffset)candleData.Argument).ToUnixTimeSeconds(); 저고점["전저가"] = 전전봉3; - } + } 저고점["Type"] = 0; } diff --git a/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs b/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs index de6dc76..eb47d41 100644 --- a/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs +++ b/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs @@ -121,7 +121,7 @@ namespace BitgetAPI.IndicatorConditionSetup } t_Close += Math.Pow(data[j].Close - average, 2); - + mvData.BolangerValue_Down = average - mvData.BolangerSquared * Math.Sqrt(t_Close / period); mvData.BolangerValue_Up = average + mvData.BolangerSquared * Math.Sqrt(t_Close / period); mvData.Average = average; diff --git a/BitgetApi/IndicatorData/MovingAverageData.cs b/BitgetApi/IndicatorData/MovingAverageData.cs index 9f034cc..bd2147b 100644 --- a/BitgetApi/IndicatorData/MovingAverageData.cs +++ b/BitgetApi/IndicatorData/MovingAverageData.cs @@ -18,6 +18,6 @@ namespace BitgetAPI.Data.IndicatorData // Bol Type 0 하향 1 상향 2기준 // Bol 편차 - public int BolangerSquared { get; set; } = 1; + public double BolangerSquared { get; set; } = 2.5; } }