public void Optimise(DateTime fromDate, DateTime toDate) { _stakingService.Evaluate(fromDate, toDate); Dictionary <int, List <int> > histogram = new(); var history = _marketDataCache.TakeUntil(toDate).ToArray(); for (var i = 1; i < history.Length; i++) { var previousPrice = Convert.ToInt32(history[i - 1].DeltaPercent); var currentPrice = Convert.ToInt32(history[i].DeltaPercent); if (!histogram.ContainsKey(previousPrice)) { histogram[previousPrice] = new List <int>(); } histogram[previousPrice].Add(currentPrice); } var parameters = Enumerable.Range(1, 100) .Select(x => new ProbabilityParameters { Threshold = -x, Histogram = histogram }); var optimal = _searcher.Maximum(parameters, fromDate, toDate); _parameters = (ProbabilityParameters)optimal; }
public void ProbabilityStrategyTest() { var data = CreateMarketData(); var parameters = new ProbabilityParameters(); var target = SimulateStrategy(data, x => x.Create(parameters)); var actual = ToApprovedString(target); Approvals.Verify(actual); }
public ProbabilityStrategy( IMarketDataCache marketDataCache, ISearcher searcher, IStakingService stakingService, ProbabilityParameters parameters) { _marketDataCache = marketDataCache; _searcher = searcher; _stakingService = stakingService; _parameters = parameters; }
public IStrategy Create(IParameters parameters) { return(parameters switch { LinearRegressionParameters p => Create(p), RelativeStrengthParameters p => Create(p), DeltaParameters p => Create(p), VolumeParameters p => Create(p), GradientParameters p => Create(p), EntropyParameters p => Create(p), StaticDatesParameters p => Create(p), MovingAverageParameters p => Create(p), HolidayEffectParameters p => Create(p), WeightedParameters p => Create(p), OptimalStoppingParameters p => Create(p), ProbabilityParameters p => Create(p), SpreadParameters p => Create(p), ClusteringParameters p => Create(p), _ => throw new NotImplementedException(), });