30분봉 4개봉으로 처리

This commit is contained in:
kyh
2025-04-07 14:42:37 +09:00
parent d1d5ed6fb9
commit 7fe72424f0
3 changed files with 241 additions and 194 deletions

View File

@@ -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
//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;
//&& 현재봉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
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;
//&& 현재봉4 < 현재봉72;
//&& candleData.IchimokData.상한선 > candleData.Close;
//&& candleData_240.Close < 현재봉24_240
//&& 현재봉24_240 < 전봉24_240
&& 현재봉24 > 현재봉72;
//&& 현재봉24 > 현재봉72;
var tempFlag1Long = (저고점_30["Type"] == 0
&& ((저고점_30["전저가"] > 저고점_30["전전저가"]
&& 저고점_30["전전고가"] < 저고점_30["전고가"])
|| (저고점_30["전저가"] > 저고점_30["전전저가"]
&& 저고점_30["전고가"] < 저고점_30["전전고가"])
|| (저고점_30["전저가"] > 저고점_30["전전저가"]
&& 저고점_30["전고가"] < 저고점_30["전전고가"])))
&& candleData.IchimokData.하한선 < candleData.Close
//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;
//&& 현재봉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
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;
//&& 현재봉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;
@@ -798,38 +812,38 @@ namespace BitgetAPI.IndicatorConditionSetup
//// && 저고점_30["전고가"] > candleData.Open;
var minSec = 저고점_30["tempHighVal"];
//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();
//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 list = candleDataList.Where(t => t.Argument > minDate).ToList();
// var list = candleDataList.Where(t => t.Argument > minDate).ToList();
var closeDataList = new List<double>();
// var closeDataList = new List<double>();
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 (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();
// var maxData = closeDataList.Max();
if (candleData.Close > maxData && 현재봉3 > 전봉3)
{
buyFlag = true;
}
}
// 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<string, object>
{
{ "MarketName", market },
{ "BuyDate", nowTime },
{ "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<Dictionary<string, string>>(JsonConvert.SerializeObject(orderData["data"]));
@@ -903,12 +921,14 @@ 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;
}
@@ -916,9 +936,9 @@ 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;
}
@@ -928,17 +948,26 @@ 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;
if(buyPrice > price)
BuyLongStep[market] = false;
var result = new Dictionary<string, object>()
{
@@ -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;
@@ -1066,38 +1096,47 @@ namespace BitgetAPI.IndicatorConditionSetup
// buyFlag = true;
//}
var minSec = 저고점_30["tempLowVal"];
//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();
//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 list = candleDataList.Where(t => t.Argument > minDate).ToList();
var closeDataList = new List<double>();
// var list = candleDataList.Where(t => t.Argument > minDate).ToList();
// var closeDataList = new List<double>();
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 (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 minData = closeDataList.Min();
// var minData = closeDataList.Min();
if (candleData.Close < minData && 현재봉3 < 전봉3)
{
// 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<string, object>
{
{ "MarketName", market },
{ "BuyDate", nowTime },
{ "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<Dictionary<string, string>>(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<string, object>()

View File

@@ -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;
}
}