public async Task TestRuleExecutorAsync() { var candles = await ImportIOhlcvDatasAsync(); var rule = Rule.Create(ic => ic.IsAboveSma(30)); IReadOnlyList <IOhlcv> validObjects; using (var ctx = new AnalyzeContext(candles)) { validObjects = new SimpleRuleExecutor(ctx, rule).Execute(); } Assert.IsTrue(validObjects.Count == 882); }
public async Task TestBullishCrossAlwaysFalseAsync() { var candles = await ImportIOhlcvDatasAsync(); var rule = Rule.Create(ic => ic.IsEmaBullishCross(10, 30)); IReadOnlyList <IOhlcv> validObjects; using (var ctx = new AnalyzeContext(candles)) { validObjects = new SimpleRuleExecutor(ctx, rule).Execute(); } Assert.IsTrue(validObjects.Count == 21); }
public async Task TestGetRuleAsync() { var candles = await ImportIOhlcvDatasAsync(); RuleRegistry.Register("isbelowsma30_2", "ic.Get<SimpleMovingAverage>(30)[ic.Index].Tick.IsTrue(t => t > ic.Close)"); RuleRegistry.Register("isbelowsma30", (ic, p) => ic.Get <SimpleMovingAverage>(p[0])[ic.Index].Tick.IsTrue(t => t > ic.Close)); using (var ctx = new AnalyzeContext(candles)) { var result = new SimpleRuleExecutor(ctx, ctx.GetRule("isbelowsma30_2")).Execute(); var result2 = new SimpleRuleExecutor(ctx, ctx.GetRule("isbelowsma30", 30)).Execute(); var result3 = new SimpleRuleExecutor(ctx, ic => ic.IsBelowSma(30)).Execute(); Assert.AreEqual(result.Count(), result3.Count()); Assert.AreEqual(result2.Count(), result3.Count()); } }
private static async Task Rules() { var data = await GetData(); var rule = Trady.Analysis.Rule.Create(c => c.IsBullish()).And(k => k.IsMacdOscBearish()); // Use context here for caching indicator results using (var ctx = new AnalyzeContext(data)) { var validObjects = new SimpleRuleExecutor(ctx, rule).Execute(); foreach (var item in validObjects) { Console.WriteLine(item.GetPersianDate() + " - " + item.IsBullish()); } } }