From 68548e05f4636c70869d71f4b8b7954f5dd67f88 Mon Sep 17 00:00:00 2001 From: kyh <1329522@naver.com> Date: Wed, 11 Jun 2025 10:50:50 +0900 Subject: [PATCH] =?UTF-8?q?isside=20=EA=B4=80=EB=A0=A8=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95(=EC=9E=90=EA=B8=B0=EC=9E=90?= =?UTF-8?q?=EC=8B=A0=ED=8F=AC=ED=95=A8=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SMABandConditionSetup.cs | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) 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)