diff --git a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs index 6acf35a..8e109da 100644 --- a/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs +++ b/BitgetApi/IndicatorConditionSetup/IndicatorProcess.cs @@ -367,24 +367,28 @@ namespace BitgetAPI.IndicatorConditionSetup // 24,72 낮은값 var 낮은값_8_12 = Math.Min(candleData.movingAverageDataList[8].Value, candleData.movingAverageDataList[12].Value); + var 전전전봉2 = candleData_전전전봉.movingAverageDataList[2].Value; var 전전전봉4 = candleData_전전전봉.movingAverageDataList[4].Value; var 전전전봉8 = candleData_전전전봉.movingAverageDataList[8].Value; var 전전전봉12 = candleData_전전전봉.movingAverageDataList[12].Value; var 전전전봉24 = candleData_전전전봉.movingAverageDataList[24].Value; var 전전전봉72 = candleData_전전전봉.movingAverageDataList[72].Value; + var 전전봉2 = candleData_전전봉.movingAverageDataList[2].Value; var 전전봉4 = candleData_전전봉.movingAverageDataList[4].Value; var 전전봉8 = candleData_전전봉.movingAverageDataList[8].Value; var 전전봉12 = candleData_전전봉.movingAverageDataList[12].Value; var 전전봉24 = candleData_전전봉.movingAverageDataList[24].Value; var 전전봉72 = candleData_전전봉.movingAverageDataList[72].Value; + var 전봉2 = candleData_전봉.movingAverageDataList[2].Value; var 전봉4 = candleData_전봉.movingAverageDataList[4].Value; var 전봉8 = candleData_전봉.movingAverageDataList[8].Value; var 전봉12 = candleData_전봉.movingAverageDataList[12].Value; var 전봉24 = candleData_전봉.movingAverageDataList[24].Value; var 전봉72 = candleData_전봉.movingAverageDataList[72].Value; + var 현재봉2 = candleData.movingAverageDataList[2].Value; var 현재봉4 = candleData.movingAverageDataList[4].Value; var 현재봉8 = candleData.movingAverageDataList[8].Value; var 현재봉12 = candleData.movingAverageDataList[12].Value; @@ -403,7 +407,7 @@ namespace BitgetAPI.IndicatorConditionSetup var Bol12 = candleData.movingAverageDataList[12].BolangerValue; var Bol24 = candleData.movingAverageDataList[24].BolangerValue; - if ((int)interval != 3) + if ((int)interval != 1) { continue; } @@ -429,18 +433,13 @@ namespace BitgetAPI.IndicatorConditionSetup { //사는 시점 if (!UpBuyList.ContainsKey(market + interval)) - { + { if ( - candleData.Close > 현재봉24 && - candleData.High == candleData.Close && candleData.Open < 현재봉24 && - 전봉4 < 전봉24 && - 전봉24 > 전봉72 && - 전봉12 > 전봉4 && 전봉8 > 전봉4 && - 전봉4 > candleData.IchimokData.하한선 && - FirstLongFlag[market + interval] - ) + 낮은값_72_24_전봉 < 전봉2 && 전전봉2 < 낮은값_72_24_전전봉 && + 낮은값_72_24_전봉 > 전봉8 + ) { - + FirstLongFlag[market + interval] = false; // 없으면 생성 if (signalData == null) { @@ -462,6 +461,9 @@ namespace BitgetAPI.IndicatorConditionSetup { "BuyDate", nowTime }, { "Price", price }, { "MCandleTimeType", (int)interval }, + { "Type", 전봉24 < 전봉72 ? 24 : 72 }, + { "CandleTime", candleData.Argument }, + { "MovingRate4_8", 현재봉8 - 현재봉4 }, { "Candle", candleData } }; @@ -482,83 +484,186 @@ namespace BitgetAPI.IndicatorConditionSetup { "Price", price }, { "MCandleTimeType", (int)interval }, { "Candle", candleData }, - { "Size", size }, + { "Size", size }, { "orderId", orderDic["orderId"] } }; BuyLongList.Add(orderDataDic); LongCount++; } } - } - else - { - if(!FirstLongFlag[market + interval] && 현재봉4 < 낮은값_72_24) - FirstLongFlag[market + interval] = true; - } + } } //파는 시점 else { var buyItem = UpBuyList[market + interval]; - if (interval < MCandleTimeType.H1) - { - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - if (nowTime < buyTime) - continue; - } - //임시로 처리 - else - { - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - if (nowTime < buyTime) - continue; - } + //var sellFlag = false; - var compareVal = 높은값_72_24; + //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; + //} + + double compareVal = 0; + int.TryParse(buyItem["Type"].ToString(), out var type); var val = SellLongStep[market + interval]; - var sellFlag = false; - if (val == 0) - { - if (높은값_72_24 < 현재봉4) + if (type == 24) { + if (val == 0) { - val = 1; - } - } + var origin = 전봉24; + var compare = 전봉72; - if (val == 1) - { - if (현재봉4 > 현재봉8) - { - if (현재봉8 > 높은값_72_24) + compareVal = origin; + + if (origin > compare) { - val = 2; - + val = 1; + } + else + { + if(origin > 전봉2) + { + compareVal = origin; + } } } + + if (val == 1) + { + compareVal = 높은값_72_24; + + if (전봉2 > 전봉12) + { + val = 2; + } + } + + if (val == 2) + compareVal = 전봉12; } - if (val == 0) + if(type == 72) { - sellFlag = true; - } - else if (val == 1) - { - compareVal = 높은값_72_24; - } - else if (val == 2) - { - compareVal = 현재봉8; + if(val == 0) + { + compareVal = 낮은값_72_24_전봉; + if (전봉24 < 전봉2) + { + val = 1; + } + } + + if (val == 1) + { + compareVal = 높은값_72_24; + + if (전봉2 > 전봉12) + { + val = 2; + } + } + + if (val == 2) + compareVal = 전봉12; } SellLongStep[market + interval] = val; - if (전봉8 > 현재봉8 || 현재봉4 > compareVal) - { - sellFlag = true; - } - - if (sellFlag) + if (전봉2 < compareVal || 전봉2 < 낮은값_72_24) { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100; @@ -614,7 +719,7 @@ namespace BitgetAPI.IndicatorConditionSetup { "BuyCandle", buyItem["Candle"] }, { "SellDate", nowTime}, { "SellPrice", price}, - { "SellCandle", candleData }, + { "SellCandle", candleData }, { "Rate", resultRateData } }; ResultList.Add(orderResult); @@ -645,18 +750,13 @@ namespace BitgetAPI.IndicatorConditionSetup { //사는 시점 if (!DownBuyList.ContainsKey(market + interval)) - { - if ( - candleData.Close < 현재봉24 && - candleData.Low == candleData.Close && candleData.Open > 현재봉24 && - 전봉4 > 전봉24 && - 전봉24 < 전봉72 && - 전봉12 < 전봉4 && 전봉8 < 전봉4 && - 전봉4 < candleData.IchimokData.상한선 && - FirstShortFlag[market + interval] - ) + { + if ( + 전봉24 > 전봉2 && 전봉24 < 전봉72 && 전전봉2 > 전전봉24 && + 전봉2 < candleData_전봉.IchimokData.하한선 + ) { - + FirstShortFlag[market + interval] = false; // 없으면 생성 if (signalData == null) { @@ -678,6 +778,8 @@ namespace BitgetAPI.IndicatorConditionSetup { "BuyDate", nowTime }, { "Price", price }, { "MCandleTimeType", (int)interval }, + { "CandleTime", candleData.Argument }, + { "MovingRate4_8", 현재봉4 - 현재봉8 }, { "Candle", candleData } }; @@ -706,84 +808,116 @@ namespace BitgetAPI.IndicatorConditionSetup ShortCount++; } } - } - else - { - if (!FirstShortFlag[market + interval] && 현재봉4 > 높은값_72_24) - { - FirstShortFlag[market + interval] = true; - } - - } + } } //파는 시점 else { - var buyItem = DownBuyList[market + interval]; - if (interval < MCandleTimeType.H1) - { - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - if (nowTime < buyTime) - continue; - } - //임시로 처리 - else - { - var buyTime = ((DateTime)buyItem["BuyDate"]).AddMinutes((int)interval * 2); - if (nowTime < buyTime) - continue; - } - var compareVal = 낮은값_72_24; - var val = SellShortStep[market + interval]; var sellFlag = false; - - if (val == 0) - { - if (낮은값_72_24 > 현재봉4) - { - val = 1; - } - } - if(val == 1) { - if (현재봉4 < 현재봉8) - { - if (현재봉8 < 낮은값_72_24) - { - val = 2; + var buyItem = DownBuyList[market + interval]; - } - } - } + //if (interval < MCandleTimeType.H1) + //{ + // var buyTime = ((DateTime)buyItem["BuyDate"]).AddHours(((int)interval/60) * 2); - if(val == 0) - { - sellFlag = true; - } - else if(val == 1) - { - compareVal = 낮은값_72_24; - } - else if(val == 2) - { - compareVal = 현재봉8; - } + // 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; - } - - SellShortStep[market + interval] = val; - - if (전봉8 < 현재봉8 || 현재봉4 > compareVal) - { - sellFlag = true; - } - - if (sellFlag) + //if (전봉8 < 현재봉8 || 현재봉4 > compareVal) + //{ + // sellFlag = true; + //} + if (전봉2 > 전봉24) { double.TryParse(buyItem["Price"].ToString(), out var buyPrice); var resultRate = ((price - buyPrice) / buyPrice) * 100; diff --git a/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs b/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs index 45b499a..a9ab8d9 100644 --- a/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs +++ b/BitgetApi/IndicatorConditionSetup/MovingAverageConditionSetup.cs @@ -21,6 +21,7 @@ namespace BitgetAPI.IndicatorConditionSetup public int CandleLength48 { get; set; } = 48; // 기간 public int CandleLength4 { get; set; } = 4; + public int CandleLength2 { get; set; } = 2; // 기간 public int CandleLength72 { get; set; } = 72; // 기간 @@ -43,7 +44,7 @@ namespace BitgetAPI.IndicatorConditionSetup if (candleData.movingAverageDataList == null) { candleData.movingAverageDataList = new Dictionary(); - + candleData.movingAverageDataList.Add(CandleLength2, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength4, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength12, new MovingAverageData()); candleData.movingAverageDataList.Add(CandleLength24, new MovingAverageData());