Refactoring TradingBotBase.cs + clean architecture (#38)

* Refactoring TradingBotBase.cs + clean architecture

* Fix basic tests

* Fix tests

* Fix workers

* Fix open positions

* Fix closing position stucking the grain

* Fix comments

* Refactor candle handling to use IReadOnlyList for chronological order preservation across various components
This commit is contained in:
Oda
2025-12-01 19:32:06 +07:00
committed by GitHub
parent ab26260f6d
commit 9d536ea49e
74 changed files with 4525 additions and 2350 deletions

View File

@@ -25,7 +25,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
/// Get RSI signals
/// </summary>
/// <returns></returns>
public override List<LightSignal> Run(HashSet<Candle> candles)
public override List<LightSignal> Run(IReadOnlyList<Candle> candles)
{
if (!Period.HasValue || candles.Count <= Period)
{
@@ -51,7 +51,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
/// <summary>
/// Runs the indicator using pre-calculated RSI values for performance optimization.
/// </summary>
public override List<LightSignal> Run(HashSet<Candle> candles, IndicatorsResultBase preCalculatedValues)
public override List<LightSignal> Run(IReadOnlyList<Candle> candles, IndicatorsResultBase preCalculatedValues)
{
if (!Period.HasValue || candles.Count <= Period)
{
@@ -93,7 +93,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
/// </summary>
/// <param name="rsiResult">List of RSI calculation results</param>
/// <param name="candles">Candles to process</param>
private void ProcessRsiDivergenceSignals(List<RsiResult> rsiResult, HashSet<Candle> candles)
private void ProcessRsiDivergenceSignals(List<RsiResult> rsiResult, IReadOnlyList<Candle> candles)
{
var candlesRsi = MapRsiToCandle(rsiResult, candles.TakeLast(10 * Period.Value));
@@ -104,7 +104,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
GetShortSignals(candlesRsi, candles);
}
public override IndicatorsResultBase GetIndicatorValues(HashSet<Candle> candles)
public override IndicatorsResultBase GetIndicatorValues(IReadOnlyList<Candle> candles)
{
return new IndicatorsResultBase()
{
@@ -112,7 +112,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
};
}
private void GetLongSignals(List<CandleRsi> candlesRsi, HashSet<Candle> candles)
private void GetLongSignals(List<CandleRsi> candlesRsi, IReadOnlyList<Candle> candles)
{
// Set the low and high for first candle
var firstCandleRsi = candlesRsi.First(c => c.Rsi > 0);
@@ -183,7 +183,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
}
}
private void GetShortSignals(List<CandleRsi> candlesRsi, HashSet<Candle> candles)
private void GetShortSignals(List<CandleRsi> candlesRsi, IReadOnlyList<Candle> candles)
{
// Set the low and high for first candle
var firstCandleRsi = candlesRsi.First(c => c.Rsi > 0);
@@ -255,7 +255,7 @@ public class RsiDivergenceIndicatorBase : IndicatorBase
}
}
private void AddSignal(CandleRsi candleSignal, TradeDirection direction, HashSet<Candle> candles)
private void AddSignal(CandleRsi candleSignal, TradeDirection direction, IReadOnlyList<Candle> candles)
{
var signal = new LightSignal(candleSignal.Ticker, direction, Confidence.Low,
candleSignal, candleSignal.Date, candleSignal.Exchange, Type, SignalType, Name);