Rename strategy to indicators

This commit is contained in:
2025-06-16 22:09:23 +07:00
parent e4f4d078b2
commit 0f7df04813
45 changed files with 477 additions and 474 deletions

View File

@@ -4,9 +4,9 @@ using Skender.Stock.Indicators;
namespace Managing.Domain.Strategies.Base;
public abstract class EmaBaseStrategy : Strategy
public abstract class EmaBaseIndicator : Indicator
{
protected EmaBaseStrategy(string name, Enums.StrategyType type) : base(name, type)
protected EmaBaseIndicator(string name, Enums.IndicatorType type) : base(name, type)
{
}

View File

@@ -2,7 +2,7 @@ using Skender.Stock.Indicators;
namespace Managing.Domain.Strategies.Base;
public class StrategiesResultBase
public class IndicatorsResultBase
{
public List<EmaResult> Ema { get; set; }
public List<EmaResult> FastEma { get; set; }

View File

@@ -7,11 +7,11 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Context;
public class StDevContext : Strategy
public class StDevContext : Indicator
{
public List<Signal> Signals { get; set; }
public StDevContext(string name, int period) : base(name, StrategyType.StDev)
public StDevContext(string name, int period) : base(name, IndicatorType.StDev)
{
Signals = new List<Signal>();
Period = period;
@@ -73,9 +73,9 @@ public class StDevContext : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
var test = new StrategiesResultBase()
var test = new IndicatorsResultBase()
{
StdDev = Candles.GetStdDev(Period.Value).ToList()
};

View File

@@ -5,10 +5,10 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies
{
public interface IStrategy
public interface IIndicator
{
string Name { get; set; }
StrategyType Type { get; set; }
IndicatorType Type { get; set; }
SignalType SignalType { get; set; }
int? Period { get; set; }
int? FastPeriods { get; set; }
@@ -17,7 +17,7 @@ namespace Managing.Domain.Strategies
FixedSizeQueue<Candle> Candles { get; set; }
List<Signal> Run();
StrategiesResultBase GetStrategyValues();
IndicatorsResultBase GetStrategyValues();
void UpdateCandles(HashSet<Candle> newCandles);
string GetName();
}

View File

@@ -8,9 +8,9 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies
{
public class Strategy : IStrategy
public class Indicator : IIndicator
{
public Strategy(string name, StrategyType type)
public Indicator(string name, IndicatorType type)
{
Name = name;
Type = type;
@@ -20,7 +20,7 @@ namespace Managing.Domain.Strategies
public string Name { get; set; }
[JsonIgnore] public FixedSizeQueue<Candle> Candles { get; set; }
public StrategyType Type { get; set; }
public IndicatorType Type { get; set; }
public SignalType SignalType { get; set; }
public int MinimumHistory { get; set; }
public int? Period { get; set; }
@@ -38,9 +38,9 @@ namespace Managing.Domain.Strategies
return new List<Signal>();
}
public virtual StrategiesResultBase GetStrategyValues()
public virtual IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase();
return new IndicatorsResultBase();
}
public void UpdateCandles(HashSet<Candle> newCandles)

View File

@@ -18,12 +18,12 @@ namespace Managing.Domain.Strategies
[Required] public string Identifier { get; }
[Required] public Ticker Ticker { get; }
[Required] public TradingExchanges Exchange { get; set; }
[Required] public StrategyType StrategyType { get; set; }
[Required] public IndicatorType IndicatorType { get; set; }
[Required] public SignalType SignalType { get; set; }
public User User { get; set; }
public Signal(Ticker ticker, TradeDirection direction, Confidence confidence, Candle candle, DateTime date,
TradingExchanges exchange, StrategyType strategyType, SignalType signalType, User user = null)
TradingExchanges exchange, IndicatorType indicatorType, SignalType signalType, User user = null)
{
Direction = direction;
Confidence = confidence;
@@ -32,10 +32,11 @@ namespace Managing.Domain.Strategies
Ticker = ticker;
Exchange = exchange;
Status = SignalStatus.WaitingForPosition;
StrategyType = strategyType;
IndicatorType = indicatorType;
User = user;
Identifier = $"{StrategyType}-{direction}-{ticker}-{candle?.Close.ToString(CultureInfo.InvariantCulture)}-{date:yyyyMMdd-HHmmss}";
Identifier =
$"{IndicatorType}-{direction}-{ticker}-{candle?.Close.ToString(CultureInfo.InvariantCulture)}-{date:yyyyMMdd-HHmmss}";
SignalType = signalType;
}

View File

@@ -7,11 +7,12 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class ChandelierExitStrategy : Strategy
public class ChandelierExitIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public ChandelierExitStrategy(string name, int period, double multiplier) : base(name, StrategyType.ChandelierExit)
public ChandelierExitIndicator(string name, int period, double multiplier) : base(name,
IndicatorType.ChandelierExit)
{
Signals = new List<Signal>();
Period = period;
@@ -39,9 +40,9 @@ public class ChandelierExitStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
ChandelierLong = Candles.GetChandelier(Period.Value, Multiplier.Value, ChandelierType.Long).ToList(),
ChandelierShort = Candles.GetChandelier(Period.Value, Multiplier.Value, ChandelierType.Short).ToList()

View File

@@ -7,11 +7,11 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class DualEmaCrossStrategy : EmaBaseStrategy
public class DualEmaCrossIndicator : EmaBaseIndicator
{
public List<Signal> Signals { get; set; }
public DualEmaCrossStrategy(string name, int fastPeriod, int slowPeriod) : base(name, StrategyType.DualEmaCross)
public DualEmaCrossIndicator(string name, int fastPeriod, int slowPeriod) : base(name, IndicatorType.DualEmaCross)
{
Signals = new List<Signal>();
FastPeriods = fastPeriod;
@@ -19,9 +19,9 @@ public class DualEmaCrossStrategy : EmaBaseStrategy
MinimumHistory = Math.Max(fastPeriod, slowPeriod) * 2;
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
FastEma = Candles.GetEma(FastPeriods.Value).ToList(),
SlowEma = Candles.GetEma(SlowPeriods.Value).ToList()

View File

@@ -6,19 +6,19 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class EmaCrossStrategy : EmaBaseStrategy
public class EmaCrossIndicator : EmaBaseIndicator
{
public List<Signal> Signals { get; set; }
public EmaCrossStrategy(string name, int period) : base(name, StrategyType.EmaCross)
public EmaCrossIndicator(string name, int period) : base(name, IndicatorType.EmaCross)
{
Signals = new List<Signal>();
Period = period;
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
Ema = Candles.GetEma(Period.Value).ToList()
};

View File

@@ -14,12 +14,12 @@ namespace Managing.Domain.Strategies.Signals;
/// 2. Long signals on STC rebound from oversold (25- → ≥25) with recent compressed volatility (max <11)
/// 3. Avoids look-ahead bias through proper rolling window implementation
/// </summary>
public class LaggingSTC : Strategy
public class LaggingSTC : Indicator
{
public List<Signal> Signals { get; set; }
public LaggingSTC(string name, int cyclePeriods, int fastPeriods, int slowPeriods) : base(name,
StrategyType.LaggingStc)
IndicatorType.LaggingStc)
{
Signals = new List<Signal>();
FastPeriods = fastPeriods;
@@ -89,10 +89,10 @@ public class LaggingSTC : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
var stc = Candles.GetStc(FastPeriods.Value, FastPeriods.Value, SlowPeriods.Value).ToList();
return new StrategiesResultBase
return new IndicatorsResultBase
{
Stc = stc
};

View File

@@ -7,12 +7,12 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class MacdCrossStrategy : Strategy
public class MacdCrossIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public MacdCrossStrategy(string name, int fastPeriods, int slowPeriods, int signalPeriods) :
base(name, StrategyType.MacdCross)
public MacdCrossIndicator(string name, int fastPeriods, int slowPeriods, int signalPeriods) :
base(name, IndicatorType.MacdCross)
{
Signals = new List<Signal>();
FastPeriods = fastPeriods;
@@ -59,9 +59,9 @@ public class MacdCrossStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
Macd = Candles.GetMacd(FastPeriods.Value, SlowPeriods.Value, SignalPeriods.Value).ToList()
};

View File

@@ -7,11 +7,11 @@ using Candle = Managing.Domain.Candles.Candle;
namespace Managing.Domain.Strategies.Signals;
public class RsiDivergenceConfirmStrategy : Strategy
public class RsiDivergenceConfirmIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public RsiDivergenceConfirmStrategy(string name, int period) : base(name, StrategyType.RsiDivergenceConfirm)
public RsiDivergenceConfirmIndicator(string name, int period) : base(name, IndicatorType.RsiDivergenceConfirm)
{
Period = period;
Signals = new List<Signal>();
@@ -49,9 +49,9 @@ public class RsiDivergenceConfirmStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
Rsi = Candles.GetRsi(Period.Value).ToList()
};

View File

@@ -7,14 +7,14 @@ using Candle = Managing.Domain.Candles.Candle;
namespace Managing.Domain.Strategies.Signals;
public class RsiDivergenceStrategy : Strategy
public class RsiDivergenceIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public TradeDirection Direction { get; set; }
private const int UpperBand = 70;
private const int LowerBand = 30;
public RsiDivergenceStrategy(string name, int period) : base(name, StrategyType.RsiDivergence)
public RsiDivergenceIndicator(string name, int period) : base(name, IndicatorType.RsiDivergence)
{
Period = period;
Signals = new List<Signal>();
@@ -52,9 +52,9 @@ public class RsiDivergenceStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
Rsi = Candles.GetRsi(Period.Value).ToList()
};

View File

@@ -7,11 +7,11 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class StcStrategy : Strategy
public class StcIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public StcStrategy(string name, int cyclePeriods, int fastPeriods, int slowPeriods) : base(name, StrategyType.Stc)
public StcIndicator(string name, int cyclePeriods, int fastPeriods, int slowPeriods) : base(name, IndicatorType.Stc)
{
Signals = new List<Signal>();
FastPeriods = fastPeriods;
@@ -64,12 +64,12 @@ public class StcStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
if (FastPeriods != null && SlowPeriods != null)
{
var stc = Candles.GetStc(FastPeriods.Value, FastPeriods.Value, SlowPeriods.Value).ToList();
return new StrategiesResultBase
return new IndicatorsResultBase
{
Stc = stc
};

View File

@@ -7,11 +7,11 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class SuperTrendCrossEma : Strategy
public class SuperTrendCrossEma : Indicator
{
public List<Signal> Signals { get; set; }
public SuperTrendCrossEma(string name, int period, double multiplier) : base(name, StrategyType.SuperTrendCrossEma)
public SuperTrendCrossEma(string name, int period, double multiplier) : base(name, IndicatorType.SuperTrendCrossEma)
{
Signals = new List<Signal>();
Period = period;
@@ -157,9 +157,9 @@ public class SuperTrendCrossEma : Strategy
return superTrends;
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
SuperTrend = Candles.GetSuperTrend(Period.Value, Multiplier.Value).Where(s => s.SuperTrend.HasValue)
.ToList()

View File

@@ -7,11 +7,11 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals;
public class SuperTrendStrategy : Strategy
public class SuperTrendIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public SuperTrendStrategy(string name, int period, double multiplier) : base(name, StrategyType.SuperTrend)
public SuperTrendIndicator(string name, int period, double multiplier) : base(name, IndicatorType.SuperTrend)
{
Signals = new List<Signal>();
Period = period;
@@ -61,9 +61,9 @@ public class SuperTrendStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
SuperTrend = Candles.GetSuperTrend(Period.Value, Multiplier.Value).Where(s => s.SuperTrend.HasValue)
.ToList()

View File

@@ -6,10 +6,10 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Signals
{
public class ThreeWhiteSoldiersStrategy : Strategy
public class ThreeWhiteSoldiersIndicator : Indicator
{
public ThreeWhiteSoldiersStrategy(string name, int period)
: base(name, StrategyType.ThreeWhiteSoldiers)
public ThreeWhiteSoldiersIndicator(string name, int period)
: base(name, IndicatorType.ThreeWhiteSoldiers)
{
Period = period;
}
@@ -52,7 +52,7 @@ namespace Managing.Domain.Strategies.Signals
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
throw new NotImplementedException();
}

View File

@@ -6,11 +6,11 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Trends;
public class EmaTrendStrategy : EmaBaseStrategy
public class EmaTrendIndicator : EmaBaseIndicator
{
public List<Signal> Signals { get; set; }
public EmaTrendStrategy(string name, int period) : base(name, StrategyType.EmaTrend)
public EmaTrendIndicator(string name, int period) : base(name, IndicatorType.EmaTrend)
{
Signals = new List<Signal>();
Period = period;
@@ -54,9 +54,9 @@ public class EmaTrendStrategy : EmaBaseStrategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
Ema = Candles.GetEma(Period.Value).ToList()
};

View File

@@ -7,16 +7,16 @@ using static Managing.Common.Enums;
namespace Managing.Domain.Strategies.Trends;
public class StochRsiTrendStrategy : Strategy
public class StochRsiTrendIndicator : Indicator
{
public List<Signal> Signals { get; set; }
public StochRsiTrendStrategy(
public StochRsiTrendIndicator(
string name,
int period,
int stochPeriod,
int signalPeriod,
int smoothPeriods) : base(name, StrategyType.StochRsiTrend)
int smoothPeriods) : base(name, IndicatorType.StochRsiTrend)
{
Signals = new List<Signal>();
StochPeriods = stochPeriod;
@@ -65,9 +65,9 @@ public class StochRsiTrendStrategy : Strategy
}
}
public override StrategiesResultBase GetStrategyValues()
public override IndicatorsResultBase GetStrategyValues()
{
return new StrategiesResultBase()
return new IndicatorsResultBase()
{
StochRsi = Candles.GetStochRsi(Period.Value, StochPeriods.Value, SignalPeriods.Value, SmoothPeriods.Value)
.ToList()