diff --git a/BitgetApi/IndicatorConditionSetup/TradingViewConditionSetup.cs b/BitgetApi/IndicatorConditionSetup/TradingViewConditionSetup.cs index c645371..66e21bb 100644 --- a/BitgetApi/IndicatorConditionSetup/TradingViewConditionSetup.cs +++ b/BitgetApi/IndicatorConditionSetup/TradingViewConditionSetup.cs @@ -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 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(); 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; }