private static IEnumerable <IExampleSpace <T> > TraverseUnencountered <TAccumulator, T>( IEnumerable <TAccumulator> accumulators, ImmutableHashSet <ExampleId> encounteredIds, Func <TAccumulator, ImmutableHashSet <ExampleId>, IExampleSpace <T> > nextExampleSpace) { return(accumulators .Scan( new UnfoldSubspaceState <T>( new Option.None <IExampleSpace <T> >(), encounteredIds), (acc, curr) => { var exampleSpace = nextExampleSpace(curr, acc.Encountered); var hasBeenEncountered = acc.Encountered.Contains(exampleSpace.Current.Id); if (hasBeenEncountered) { return new UnfoldSubspaceState <T>( new Option.None <IExampleSpace <T> >(), acc.Encountered); } return new UnfoldSubspaceState <T>( new Option.Some <IExampleSpace <T> >(exampleSpace), acc.Encountered.Add(exampleSpace.Current.Id)); } ) .Select(x => x.UnencounteredExampleSpace switch { Option.Some <IExampleSpace <T> > some => some.Value, _ => null })
private static IEnumerable <IExampleSpace <ContextualValue <T, TContext> > > TraverseUnencountered <TAccumulator, TContext, T>( IEnumerable <TAccumulator> accumulators, TContext context, NextContextFunc <T, TContext> nextContext, Func <TAccumulator, TContext, IExampleSpace <ContextualValue <T, TContext> > > nextExampleSpace) { return(accumulators .Scan( new UnfoldSubspaceState <T, TContext>( new Option.None <IExampleSpace <ContextualValue <T, TContext> > >(), context), (acc, curr) => { var exampleSpace = nextExampleSpace(curr, acc.Context); var context0 = nextContext(exampleSpace.Current.Value.Value, acc.Context); return new UnfoldSubspaceState <T, TContext>( new Option.Some <IExampleSpace <ContextualValue <T, TContext> > >(exampleSpace), context0); } ) .Select(x => x.UnencounteredExampleSpace switch { Option.Some <IExampleSpace <ContextualValue <T, TContext> > > some => some.Value, _ => null })
public static Option <R> Map <T, R>(this Option.Some <T> some, Func <T, R> func) => Some(func(some.Value));
new Trade(TestMarket, TestStrategy, TestLevels, TestOpen, Option.Some(TestClose), (Option.Some(6020.00), Option.Some(5930.00)), EntryOrderType.Limit)