high 조건 추가
This commit is contained in:
@@ -230,88 +230,88 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
// Description
|
||||
var strInterval = Utils.Convertor.GetEnumDescription((Enum)interval);
|
||||
if (!intervalList.Contains(strInterval)) continue;
|
||||
/*
|
||||
if (nowTime.Minute == 0 && nowTime.Hour == 24 && 전저고점Flag)
|
||||
{
|
||||
전저고점.Clear();
|
||||
전저고점Flag = false;
|
||||
}
|
||||
|
||||
//if (nowTime.Minute == 0 && nowTime.Hour == 24 && 전저고점Flag)
|
||||
//{
|
||||
// 전저고점.Clear();
|
||||
// 전저고점Flag = false;
|
||||
//}
|
||||
|
||||
if (!전저고점.ContainsKey(market + strInterval))
|
||||
if (!FirstFlag.ContainsKey(market + strInterval + "Long"))
|
||||
{
|
||||
FirstFlag.Add(market + strInterval + "Long", false);
|
||||
FirstFlag.Add(market + strInterval + "Short", false);
|
||||
var dic = new Dictionary<string, double>
|
||||
{
|
||||
{ "전고가", 0 },
|
||||
{ "전저가", 0 },
|
||||
{ "전전고가", 0 },
|
||||
{ "전전저가", 0 },
|
||||
{ "전전전저가", 0 },
|
||||
{ "전전전고가", 0 },
|
||||
{ "전전전전저가", 0 },
|
||||
{ "전전전전고가", 0 },
|
||||
{ "tempHighVal", 0 },
|
||||
{ "tempLowVal", 0 },
|
||||
{ "tempHigh2Val", 0 },
|
||||
{ "tempLow2Val", 0 },
|
||||
{ "tempHigh3Val", 0 },
|
||||
{ "tempLow3Val", 0 },
|
||||
{ "tempHigh4Val", 0 },
|
||||
{ "tempLow4Val", 0 },
|
||||
{ "switchLowVal", 0 },
|
||||
{ "switchHighVal", 0 }
|
||||
};
|
||||
//var dic = new Dictionary<string, double>
|
||||
//{
|
||||
// { "전고가", 0 },
|
||||
// { "전저가", 0 },
|
||||
// { "전전고가", 0 },
|
||||
// { "전전저가", 0 },
|
||||
// { "전전전저가", 0 },
|
||||
// { "전전전고가", 0 },
|
||||
// { "전전전전저가", 0 },
|
||||
// { "전전전전고가", 0 },
|
||||
// { "tempHighVal", 0 },
|
||||
// { "tempLowVal", 0 },
|
||||
// { "tempHigh2Val", 0 },
|
||||
// { "tempLow2Val", 0 },
|
||||
// { "tempHigh3Val", 0 },
|
||||
// { "tempLow3Val", 0 },
|
||||
// { "tempHigh4Val", 0 },
|
||||
// { "tempLow4Val", 0 },
|
||||
// { "switchLowVal", 0 },
|
||||
// { "switchHighVal", 0 }
|
||||
//};
|
||||
|
||||
전저고점.Add(market + strInterval, dic);
|
||||
//전저고점.Add(market + strInterval, dic);
|
||||
|
||||
var candleDatas_Temp = findedMarket.candleDataList[interval];
|
||||
var candleDatas_정렬_Temp = candleDatas_Temp.OrderBy(i => i.Argument).ToList();
|
||||
var candleDatas_Temp_List = new List<CandleData>();
|
||||
//var candleDatas_Temp = findedMarket.candleDataList[interval];
|
||||
//var candleDatas_정렬_Temp = candleDatas_Temp.OrderBy(i => i.Argument).ToList();
|
||||
//var candleDatas_Temp_List = new List<CandleData>();
|
||||
|
||||
totalImperseMACDData[market + strInterval] = new Dictionary<DateTime, ImpulseMacdData>();
|
||||
//totalImperseMACDData[market + strInterval] = new Dictionary<DateTime, ImpulseMacdData>();
|
||||
|
||||
|
||||
for (var i = 0; i < 199; i++)
|
||||
candleDatas_Temp_List.Add(candleDatas_정렬_Temp[i]);
|
||||
//for (var i = 0; i < 199; i++)
|
||||
// candleDatas_Temp_List.Add(candleDatas_정렬_Temp[i]);
|
||||
|
||||
for (var i = 199; i < candleDatas_정렬_Temp.Count; i++)
|
||||
{
|
||||
//for (var i = 199; i < candleDatas_정렬_Temp.Count; i++)
|
||||
//{
|
||||
|
||||
var candleData_Main = candleDatas_정렬_Temp[i];
|
||||
// var candleData_Main = candleDatas_정렬_Temp[i];
|
||||
|
||||
if (candleData_Main == null) continue;
|
||||
// if (candleData_Main == null) continue;
|
||||
|
||||
|
||||
candleDatas_Temp_List.Add(candleData_Main);
|
||||
// candleDatas_Temp_List.Add(candleData_Main);
|
||||
|
||||
ichimokuConditionSetup.calIchimokuData(candleDatas_Temp_List, candleData_Main);
|
||||
movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_Temp_List, candleData_Main);
|
||||
// ichimokuConditionSetup.calIchimokuData(candleDatas_Temp_List, candleData_Main);
|
||||
// movingAverageConditionSetup.Cal_YHK_Downpublic(candleDatas_Temp_List, candleData_Main);
|
||||
|
||||
if (i > 210)
|
||||
{
|
||||
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;
|
||||
// if (i > 210)
|
||||
// {
|
||||
// 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 returnVal = Calculate전고점(market, strInterval, interval, 전봉4_Temp, 전전봉4_Temp, 전전전봉4_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]);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
else {
|
||||
if(nowTime.Minute > 0 && nowTime.Hour == 24)
|
||||
전저고점Flag = true;
|
||||
}
|
||||
//else {
|
||||
// if(nowTime.Minute > 0 && nowTime.Hour == 24)
|
||||
// 전저고점Flag = true;
|
||||
//}
|
||||
|
||||
//if (!BuyShortStep.ContainsKey(market))
|
||||
//{
|
||||
// BuyShortStep[market] = 0;
|
||||
// BuyLongStep[market] = 0;
|
||||
//}
|
||||
//if (!(전저고점.ContainsKey(market + "30m")))
|
||||
// continue;
|
||||
|
||||
if (!BuyShortStep.ContainsKey(market))
|
||||
{
|
||||
BuyShortStep[market] = 0;
|
||||
BuyLongStep[market] = 0;
|
||||
}
|
||||
if (!(전저고점.ContainsKey(market + "30m")))
|
||||
continue;
|
||||
*/
|
||||
#region 30분봉 처리
|
||||
|
||||
var candleDatas_30 = findedMarket.candleDataList[MCandleTimeType.M30];
|
||||
@@ -375,16 +375,16 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
//사는 시점
|
||||
if (!UpBuyList.ContainsKey(market))
|
||||
{
|
||||
//if(!FirstFlag[market + strInterval + "Long"])
|
||||
//{
|
||||
// if(sMABandConditionSetup.Calculate(candleDatas_30_TempList, SMABandType.LongSell, true))
|
||||
// {
|
||||
// FirstFlag[market + strInterval + "Long"] = true;
|
||||
// }
|
||||
//}
|
||||
if (!FirstFlag[market + strInterval + "Long"])
|
||||
{
|
||||
if (sMABandConditionSetup.Calculate(candleDatas_30_TempList, SMABandType.LongSell, true))
|
||||
{
|
||||
FirstFlag[market + strInterval + "Long"] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (sMABandConditionSetup.Calculate(candleDatas_30_TempList, SMABandType.LongBuy, true)
|
||||
//&& FirstFlag[market + strInterval + "Long"]
|
||||
&& FirstFlag[market + strInterval + "Long"]
|
||||
|
||||
//&& 저고점["전저가"] > 저고점["전전저가"]
|
||||
)
|
||||
@@ -575,10 +575,19 @@ namespace BitgetAPI.IndicatorConditionSetup
|
||||
{
|
||||
//사는 시점
|
||||
if (!DownBuyList.ContainsKey(market))
|
||||
{
|
||||
{
|
||||
if (!FirstFlag[market + strInterval + "Short"])
|
||||
{
|
||||
if (sMABandConditionSetup.Calculate(candleDatas_30_TempList, SMABandType.ShortSell, true))
|
||||
{
|
||||
FirstFlag[market + strInterval + "Short"] = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (sMABandConditionSetup.Calculate(candleDatas_30_TempList, SMABandType.ShortBuy, true))
|
||||
|
||||
if (sMABandConditionSetup.Calculate(candleDatas_30_TempList, SMABandType.ShortBuy, true)
|
||||
&& FirstFlag[market + strInterval + "Short"])
|
||||
{
|
||||
//BuyShortStep[market] = 0;
|
||||
// 없으면 생성
|
||||
|
||||
@@ -89,20 +89,20 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
|
||||
// 밴드 계산
|
||||
double sma4High = Highest(close, i, 12, 4);
|
||||
double sma4Middle = CalculateSMA(close, i, 12);
|
||||
double sma4Middle = Middle(close, i, 12, 4);
|
||||
double sma4Low = Lowest(close, i, 12, 4);
|
||||
|
||||
double prevSma4High = Highest(close, i - 1, 12, 4);
|
||||
double prevSma4Middle = CalculateSMA(close, i - 1, 12);
|
||||
double prevSma4Middle = Middle(close, i - 1, 12, 4);
|
||||
double prevSma4Low = Lowest(close, i - 1, 12, 4);
|
||||
|
||||
double prev2Sma4High = Highest(close, i - 2, 12, 4);
|
||||
double prev2Sma4Low = Lowest(close, i - 2, 12, 4);
|
||||
double prev2Sma4Middle = CalculateSMA(close, i - 2, 12);
|
||||
double prev2Sma4Middle = Middle(close, i - 2, 12, 4);
|
||||
|
||||
double prev3Sma4High = Highest(close, i - 3, 12, 4);
|
||||
double prev3Sma4Low = Lowest(close, i - 3, 12, 4);
|
||||
double prev3Sma4Middle = CalculateSMA(close, i - 3, 12);
|
||||
double prev3Sma4Middle = Middle(close, i - 3, 12, 4);
|
||||
|
||||
|
||||
var ichmok = GetIchimokuCloud(candles, i - 25);
|
||||
@@ -115,7 +115,7 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
var cloudBottomAfter = Math.Min(ichmokCurrent.SenkouSpanA, ichmokCurrent.SenkouSpanB);
|
||||
|
||||
bool isSma4BelowCloud = low[i] < cloudBottomNow;
|
||||
bool isSma4AboveCloud = high[i] > cloudTopNow;
|
||||
bool isSma4AboveCloud = high[i] > cloudTopNow;
|
||||
|
||||
bool greenCandle = open[i] < close[i];
|
||||
bool redCandle = open[i] > close[i];
|
||||
@@ -124,16 +124,19 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
|
||||
|
||||
for (var cnt = 0; cnt < 10; cnt++)
|
||||
{
|
||||
if (Lowest(close, i - cnt, 12, 4) == CalculateSMA(close, i - cnt, 12) && Lowest(close, i - cnt-1, 12, 4) <= CalculateSMA(close, i - cnt-1, 12))
|
||||
{
|
||||
if (Lowest(close, i - cnt, 12, 4) == CalculateSMA(close, i - cnt, 12) && Lowest(close, i - cnt - 1, 12, 4) <= CalculateSMA(close, i - cnt - 1, 12))
|
||||
{
|
||||
isLongRecentTouch = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//high 데이터 비교(기본 12개)
|
||||
var highestTempData = Highest(high, i, 12, 1);
|
||||
|
||||
// 진입/청산 조건
|
||||
bool rawNewLong = isLongRecentTouch && greenCandle && IsSideways(high, low, i, true, rangeThresholdLongPercent) && prevSma4 <= sma4 && sma4High == sma4 && prevSma4High >= prevSma4 && (prev2Sma4Middle - prevSma4Middle) > (prevSma4Middle - sma4Middle) && sma4Middle > sma72 && sma4 > cloudTopNow;
|
||||
bool rawNewLong = highestTempData == high[i] && isLongRecentTouch && greenCandle && IsSideways(high, low, i, true, rangeThresholdLongPercent) && prevSma4 <= sma4 && sma4High == sma4 && prevSma4High >= prevSma4 && (prev2Sma4Middle - prevSma4Middle) > (prevSma4Middle - sma4Middle) && sma4Middle > sma72 && sma4 > cloudTopNow;
|
||||
bool rawLongSell = (sma4Middle < sma72 && prevSma4Middle > prevSma72) || (sma4 == sma4Low);
|
||||
|
||||
bool rawNewShort = (sma72 < cloudTopAfter && sma72 < cloudTopNow) && sma72 > sma4 && sma4High > cloudTopNow && sma4 == sma4Low && IsSideways(high, low, i, true, rangeThresholdShortPercent) && redCandle && sma4 < cloudTopNow;
|
||||
@@ -203,6 +206,13 @@ namespace BitgetApi.IndicatorConditionSetup
|
||||
|
||||
}
|
||||
|
||||
private double Middle(List<double> source, int index, int period, int num)
|
||||
{
|
||||
|
||||
return GetAvgList(source, index, period, num).Average();
|
||||
|
||||
}
|
||||
|
||||
private double Lowest(List<double> source, int index, int period, int num)
|
||||
{
|
||||
return GetAvgList(source, index, period, num).Min();
|
||||
|
||||
Reference in New Issue
Block a user