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