72선 4선 이전봉과 비교 추가

This commit is contained in:
kyh
2025-05-20 13:42:32 +09:00
parent 1bfc763bde
commit de45077913

View File

@@ -17,8 +17,8 @@ namespace BitgetApi.IndicatorConditionSetup
public int LengthSignal = 12;
public int AdxLength = 12;
public double AdxThreshold = 24;
public double RangeThreshold = 2.2;
public double RangeThresholdSell = 2.2;
public double RangeThreshold = 1;
public double RangeThresholdSell = 1;
// 데이터 입력: High, Low, Close 배열 (최근 것이 맨 끝)
public List<double> High;
@@ -170,6 +170,27 @@ namespace BitgetApi.IndicatorConditionSetup
{
return ComputeAdx() > AdxThreshold;
}
public double GetAvgData(int range)
{
var sma = 0.0;
for (var i = 0; i < range; i++)
{
sma += Close[Close.Count - (i + 1)];
}
return sma / range;
}
public double GetAvgData(int range, int prev)
{
var sma = 0.0;
for (var i = 0; i < range; i++)
{
sma += Close[Close.Count - (i + 1 + prev)];
}
return sma / range;
}
// 10. 매수 조건
public bool IsLongSignal()
@@ -179,11 +200,14 @@ namespace BitgetApi.IndicatorConditionSetup
var (macd, signal) = ComputeMacd();
var (prevMacd, prevSignal) = PrevComputeMacd();
bool isUptrend = Close.Last() > Sma4.Last();
bool isUptrend = Close.Last() > Sma4.Last();
return isUptrend &&
((prevMd == 0 && md > 0) || (macd > prevMacd && signal > prevSignal && md > 0 && macd > signal)) &&
IsTrending() && !IsRangeBound();
return ((prevMd == 0 && md > 0) || (prevMacd < prevSignal && macd > prevMacd && macd > signal && md > 0)) &&
IsTrending() && IsSmaMiddle(4, 12, true, GetAvgData(72)) && GetAvgData(4) > GetAvgData(4, 1);
//return isUptrend &&
// ((prevMd == 0 && md > 0) || (macd > prevMacd && signal > prevSignal && md > 0 && macd > signal)) &&
// IsTrending() && !IsRangeBound();
}
// 11. 매도 조건
@@ -196,9 +220,14 @@ namespace BitgetApi.IndicatorConditionSetup
bool isDowntrend = Close.Last() < Sma4.Last();
return isDowntrend &&
((prevMd == 0 && md < 0) || (macd < prevMacd && signal < prevSignal && md < 0 && macd < signal)) &&
IsTrending() && !IsRangeBoundSell();
return ((prevMd == 0 && md < 0) || (prevMacd > prevSignal && macd < prevMacd && macd < signal && md < 0)) &&
IsTrending() && IsSmaMiddle(4, 12, false, GetAvgData(72)) && GetAvgData(4) < GetAvgData(4, 1);
//return isDowntrend &&
// ((prevMd == 0 && md < 0) || (macd < prevMacd && signal < prevSignal && md < 0 && macd < signal)) &&
// IsTrending() && !IsRangeBoundSell();
}
public bool IsSmaHigh(int range, int count)
@@ -241,7 +270,7 @@ namespace BitgetApi.IndicatorConditionSetup
return false;
}
public bool IsSmaMiddle(int range, int count, bool longFlag) {
public bool IsSmaMiddle(int range, int count, bool longFlag, double value) {
var list = new List<double>();
for (int i = Close.Count - count - 1; i < count; i++)
{
@@ -256,14 +285,14 @@ namespace BitgetApi.IndicatorConditionSetup
if (longFlag)
{
if(list[list.Count - 1] > list.Average())
if(value < list.Average())
{
return true;
}
}
else
{
if (list[list.Count - 1] < list.Average())
if (value > list.Average())
{
return true;
}