diff --git a/BitgetApi/IndicatorConditionSetup/SMABandConditionSetup.cs b/BitgetApi/IndicatorConditionSetup/SMABandConditionSetup.cs index d0c22e9..c42a0e2 100644 --- a/BitgetApi/IndicatorConditionSetup/SMABandConditionSetup.cs +++ b/BitgetApi/IndicatorConditionSetup/SMABandConditionSetup.cs @@ -71,7 +71,6 @@ namespace BitgetApi.IndicatorConditionSetup double prev3Sma4Low = Lowest(close, i - 3, 12); double prev3Sma4Middle = SMA(close, i - 3, 12); - bool isSideways = IsSideways(high, low, i); var ichmok = GetIchimokuCloud(candles, i - 25); @@ -98,12 +97,12 @@ namespace BitgetApi.IndicatorConditionSetup bool redCandle = open[i] > close[i]; // 진입/청산 조건 - bool rawNewLong = sma4 > cloudBottomNow && isSideways && isSma4AboveCloud && (sma4 == sma4High && prevSma4 <= prevSma4High && prev2Sma4 <= prev2Sma4High) && (sma4 >= prevSma4 && prevSma4 >= prev2Sma4 && prev2Sma4 >= prev3Sma4); + bool rawNewLong = sma4 > cloudBottomNow && IsSideways(high, low, i, true) && isSma4AboveCloud && (sma4 == sma4High && prevSma4 <= prevSma4High && prev2Sma4 <= prev2Sma4High) && (sma4 >= prevSma4 && prevSma4 >= prev2Sma4 && prev2Sma4 >= prev3Sma4); bool rawLongSell = (sma4 <= prevSma4 && prevSma4 <= prev2Sma4 && sma4 < sma4High); - bool rawNewShort = cloudFlag && isSideways && isSma4BelowCloud && (sma4 == sma4Low && prevSma4 >= prevSma4Low && prev2Sma4 >= prev2Sma4Low) && (sma4 <= prevSma4 && prevSma4 <= prev2Sma4 && prev2Sma4 <= prev3Sma4); + bool rawNewShort = cloudFlag && IsSideways(high, low, i, false) && isSma4BelowCloud && (sma4 == sma4Low && prevSma4 >= prevSma4Low && prev2Sma4 >= prev2Sma4Low) && (sma4 <= prevSma4 && prevSma4 <= prev2Sma4 && prev2Sma4 <= prev3Sma4); bool rawShortSell = (sma4 >= prevSma4 && prevSma4 >= prev2Sma4 && sma4 > sma4Middle); @@ -123,7 +122,7 @@ namespace BitgetApi.IndicatorConditionSetup } else if (type == SMABandType.ShortSell) { - if (rawLongSell) + if (rawShortSell) firstCloudFlag = true; return rawShortSell; @@ -158,12 +157,23 @@ namespace BitgetApi.IndicatorConditionSetup .Min(); } - private bool IsSideways(List high, List low, int index) + private bool IsSideways(List high, List low, int index, bool type) { - double highestHigh = high.Skip(index - rangeLookback).Take(rangeLookback).Max(); - double lowestLow = low.Skip(index - rangeLookback).Take(rangeLookback).Min(); - double range = highestHigh - lowestLow; - return range > (highestHigh * rangeThresholdPercent / 100.0); + double highestHigh = high.Skip(index - rangeLookback).Take(rangeLookback + 1).Max(); + double lowestLow = low.Skip(index - rangeLookback).Take(rangeLookback + 1).Min(); + // long + if (type) + { + double range = high[index] - lowestLow; + return range > (high[index] * rangeThresholdPercent / 100.0) && highestHigh == high[index]; + } + //short + else + { + double range = highestHigh - low[index]; + return range > (low[index] * rangeThresholdPercent / 100.0) && lowestLow == low[index]; + + } } private IchimokuResult GetIchimokuCloud(List candles, int i)