public void PopulateRealtimeOptionsQuotes() { lock (RealTimeOptionsQuotesLocker) { try { Logger.Debug("option quots info start"); List <OptionQuoteInfo> optionQuotesInfo = MarketDataProvider.GetOptionQuotesInfo(); Logger.Debug("the item count of List Generic is:" + optionQuotesInfo.Count); _optionsQuoteInfo = _uow.OptionQuotesInfo.GetAll().ToList(); _uow.OptionQuotesInfo.Update(optionQuotesInfo, _optionsQuoteInfo); Logger.Debug("option quots info end"); } catch (System.IO.FileNotFoundException exFileNotFound) { Logger.Debug(exFileNotFound.StackTrace.ToString()); } catch (System.IO.IOException exIO) { Logger.Debug(exIO.StackTrace.ToString()); } catch (Exception ex) { Logger.Debug(ex.StackTrace.ToString()); } } }
public void Should_publish_price_once_started_and_when_MarketData_is_available() { // Mock and dependencies setup var unitOfExecutionsFactory = new UnitOfExecutionsFactory(); var publisher = Substitute.For<IPastaPricerPublisher>(); var marketDataProvider = new MarketDataProvider(); var pastaPricer = new PastaPricerEngine(unitOfExecutionsFactory.GetPool(), new[] { "gnocchi(eggs-potatoes-flour)" }, marketDataProvider, publisher); CheckThatNoPriceHasBeenPublished(publisher); pastaPricer.Start(); CheckThatNoPriceHasBeenPublished(publisher); // Turns on market data (note: make the pasta pricer start its dependencies instead?) marketDataProvider.Start(); // A sleep?!? There should be a better way ;-) Thread.Sleep(60); // It has publish a price now! publisher.Received().Publish("gnocchi", 0.50m); }
public void Should_return_the_same_instance_of_MarketData_given_the_same_rawMaterial_name() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); Check.That(marketDataProvider.GetRawMaterial("eggs")).IsSameReferenceThan(marketDataProvider.GetRawMaterial("eggs")); }
public void Should_provide_MarketData_for_eggs() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); Check.That(marketDataProvider.GetRawMaterial("eggs")).IsInstanceOf<RawMaterialMarketData>(); }
public void Should_publish_price_for_every_registered_pasta() { // Mock and dependencies setup var publisher = Substitute.For<IPastaPricerPublisher>(); var marketDataProvider = new MarketDataProvider(); var pastasConfiguration = new[] { "gnocchi(eggs-potatoes-flour)", "spaghetti(eggs-flour)", "organic spaghetti(organic eggs-flour)", "spinach farfalle(eggs-flour-spinach)", "tagliatelle(eggs-flour)", }; var unitOfExecutionsFactory = new UnitOfExecutionsFactory(); var pastaPricer = new PastaPricerEngine(unitOfExecutionsFactory.GetPool(), pastasConfiguration, marketDataProvider, publisher); pastaPricer.Start(); // Turns on market data (note: make the pasta pricer start its dependencies instead?) marketDataProvider.Start(); // A sleep?!? There should be a better way ;-) Thread.Sleep(100); publisher.Received().Publish("gnocchi", 2.32m); publisher.Received().Publish("spaghetti", 1.35m); publisher.Received().Publish("organic spaghetti", 0.5m); publisher.Received().Publish("spinach farfalle", 0.5m); publisher.Received().Publish("tagliatelle", 0.5m); }
public void Should_publish_price_once_started_and_when_MarketData_is_available() { // Mock and dependencies setup var unitOfExecutionsFactory = new UnitOfExecutionsFactory(); var marketDataProvider = new MarketDataProvider(); var pastaPricer = new PastaPricerEngine(unitOfExecutionsFactory.GetPool(), new[] { "gnocchi(eggs-potatoes-flour)" }, marketDataProvider, this); this.ClearDico(); Check.That(this.lastPrices).IsEmpty(); pastaPricer.Start(); Check.That(this.lastPrices).IsEmpty(); // Turns on market data (note: make the pasta pricer start its dependencies instead?) marketDataProvider.Start(); // A sleep?!? There should be a better way ;-) Thread.Sleep(1000); // It has publish a price now! Check.That(this.lastPrices.Keys).Contains("gnocchi"); }
///// <summary> ///// пример ///// </summary> ///// <param name="args"></param> //override public void Do(string[] args) //{ // //TradeConsole.ConsoleSetSize(); // //TradeConsole.LogAssemblyInfo(assemblies); // //список доступных команд // TradeConsole.ConsoleWriteCommands(); // Initialize(); // SetupStrategy(args); // base.Do(args); //} /// <summary> /// пример переопределения /// Program.Sample1.Initialize() /// </summary> override public void Initialize() { Console.WriteLine("Program.Sample1.Initialize()"); marketDataProvider = new MarketDataProvider(); rawTradingDataProvider = new RawTradingDataProvider(DefaultLogger.Instance); symbolsDataProvider = new SymbolsDataProvider(); traderBase = new TraderBase(new SmartComOrderManager()); adapter = new SmartComAdapter(); SmartComHandlers.Instance.Add <_IStClient_DisconnectedEventHandler>(IsDisconnected); SmartComHandlers.Instance.Add <_IStClient_ConnectedEventHandler>(IsConnected); sendItemTrade = new SendItemOnTrade(TradingData.Instance, DefaultLogger.Instance); //ObservableQueue<Order> orderQueue = TradingData.Instance.Get<ObservableQueue<Order>>(); //ObservableHashSet<Order> orderQueue = TradingData.Instance.Get<ObservableHashSet<Order>>(); //sendItemOrder = new SendItemOnOrder(TradingData.Instance.Get<ObservableQueue<Order>>()); //Отправляем данные клиентам { //sendItemBar.AddItemHandler(TradeConsole.ConsoleWriteLineBar); sendItemTrade.AddItemHandler(TradeConsole.ConsoleWriteLineTrade); //senderItemOrder.AddedItemHandler(TradeHubStarter.sendOrder); if (AppSettings.GetValue <bool>("SignalHub")) { //отправляем через signalR //sendItemBar.AddItemHandler(TradeHubStarter.sendBar); sendItemTrade.AddItemHandler(TradeHubStarter.sendTrade); } } }
public void Should_provide_MarketData_for_eggs() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); Check.That(marketDataProvider.GetRawMaterial("eggs")).IsInstanceOf <RawMaterialMarketData>(); }
public void Should_return_the_same_instance_of_MarketData_given_the_same_rawMaterial_name() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); Check.That(marketDataProvider.GetRawMaterial("eggs")).IsSameReferenceThan(marketDataProvider.GetRawMaterial("eggs")); }
public void Setup() { this.tradingData = new TradingDataContext(); this.orderBook = new OrderBookContext(); this.provider = new MarketDataProvider(this.Handlers, this.tradingData, this.orderBook, new NullLogger()); this.stServer = (StServerClassMock)this.StServerMockSingleton.Instance; this.Binder.Bind(); }
public void Should_only_get_MarketData_for_registered_rawMaterials_or_throw_an_exception_otherwise() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); marketDataProvider.RegisterRawMaterial("flour"); Check.That(marketDataProvider.GetRawMaterial("flour")).IsNotNull(); Check.ThatCode(() => marketDataProvider.GetRawMaterial("banana")).Throws<InvalidOperationException>(); Check.That(marketDataProvider.GetRawMaterial("eggs")).IsNotNull(); }
/// <summary> /// Default Constructor /// </summary> public HistoricalParametersViewModel() { // Initialize object _selectedProvider = new MarketDataProvider(); _availableProviders = new List <MarketDataProvider>(); _filePath = @"HistoricalDataConfiguration\HistoricalDataProvider.xml"; PopulateProviders(); ReadParameters(); _hasSettingsChanged = false; }
public void Should_only_get_MarketData_for_registered_rawMaterials_or_throw_an_exception_otherwise() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); marketDataProvider.RegisterRawMaterial("flour"); Check.That(marketDataProvider.GetRawMaterial("flour")).IsNotNull(); Check.ThatCode(() => marketDataProvider.GetRawMaterial("banana")).Throws <InvalidOperationException>(); Check.That(marketDataProvider.GetRawMaterial("eggs")).IsNotNull(); }
public ExtMarketDataFilter(MarketDataProvider provider, string Name) { switch (Name) { case "Simulator": // 3.9.2 版的混淆过后的模拟插件 this.Init(provider, "Jfm54PNt0q", "et95r7Su4r", "Sfk5bbMxSg"); break; default: // 反混淆后的模拟插件,CTP插件 this.Init(provider, "NewBarOpen", "NewBar", "NewMarketBar"); break; } }
private void Init(MarketDataProvider provider, string NewBarOpen, string NewBar, string NewMarketBar) { _NewBar = NewBar; _NewBarOpen = NewBarOpen; _NewMarketBar = NewMarketBar; //得到OpenQuant.API.MarketDataProvider内的SmartQuant.Providers.IMarketDataProvider接口 marketDataProvider = (IMarketDataProvider)provider.GetType().GetField("provider", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(provider); factory = marketDataProvider.BarFactory; // 遍历,得到对应的事件 foreach (var e in marketDataProvider.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic)) { switch (e.FieldType.ToString()) { case "SmartQuant.Providers.QuoteEventHandler": NewQuoteField = e; // 很遗憾,不能提前在保存下来 //(MulticastDelegate)NewQuoteField.GetValue(marketDataProvider); break; case "SmartQuant.Providers.TradeEventHandler": NewTradeField = e; break; case "SmartQuant.Providers.BarEventHandler": // 有三个这样的事件,怎么识别呢? // 由于混淆了代码,没法识别,只能人工先判断 // 判断的方法,1.断点, // 2.模拟下的 v8UpctWIWM(SeriesObjectEventArgs args1) if (e.Name == _NewBarOpen) { NewBarOpenField = e; } else if (e.Name == _NewBar) { NewBarField = e; } else if (e.Name == _NewMarketBar) { NewMarketBarField = e; } else { Console.WriteLine("{0} 没有识别出来,需人工处理!", e.Name); } break; } } }
public static IDataProvider CreateDataProvider() { IDictionary <string, IShop> shops = new Dictionary <string, IShop>(); IShop mall = new Mall(null); IShop bazaar = new Bazaar(mall); IShop store = new Store(bazaar); shops.Add("Mall", mall); shops.Add("Bazaar", bazaar); shops.Add("Store", store); var dataProvider = new MarketDataProvider(shops, new TypeProvider(typeof(IShop).Assembly)); return(dataProvider); }
public void Should_receive_price_for_registered_RawMaterials_once_started() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); marketDataProvider.GetRawMaterial("eggs").PriceChanged += (o, args) => this.priceChangedRaisedEvent.Set(); marketDataProvider.Start(); const int TimeoutInMsec = 100; var hasReceivedEvent = this.priceChangedRaisedEvent.WaitOne(TimeoutInMsec); Check.That(hasReceivedEvent).IsTrue(); marketDataProvider.Stop(); }
public async Task MarketDataProvider_DeltaCorrectAtJoinPoint() { var dataRepository = new Mock <IRepository <MarketData> >(); dataRepository .Setup(x => x.Get()) .ReturnsAsync(new[] { new MarketData { Date = new DateTime(2000, 1, 1), Price = 1, Volume = 1 }, new MarketData { Date = new DateTime(2000, 1, 2), Price = 1, Delta = 2, Volume = 2 }, }); var apiDataProvider = new Mock <IApiDataProvider>(); apiDataProvider .Setup(x => x.GetData()) .ReturnsAsync(new[] { new MarketData { Date = new DateTime(2000, 1, 3), Price = 5, Volume = 5 }, }); var target = new MarketDataProvider( apiDataProvider.Object, dataRepository.Object); var actual = await target.GetPriceData(); var last = actual.Last(); new { Delta = 4m, DeltaPercent = -0.5m, VolumePercent = -0.6m }.ToExpectedObject().ShouldEqual(new { last.Delta, last.DeltaPercent, last.VolumePercent }); }
public AnalysisService( IMarketDataCache marketDataCache, IResultsProvider resultsProvider, StrategyProvider strategyProvider, IInvestorProvider investorProvider, SimulatorFactory simulatorFactory, MarketDataProvider marketDataProvider, ICommunicationService communicationService) { _simulatorFactory = simulatorFactory; _marketDataCache = marketDataCache; _resultsProvider = resultsProvider; _strategyProvider = strategyProvider; _investorProvider = investorProvider; _marketDataProvider = marketDataProvider; _communicationService = communicationService; }
public void Should_publish_price_for_every_registered_pasta() { this.ClearDico(); // Mock and dependencies setup var marketDataProvider = new MarketDataProvider(); var pastasConfiguration = new[] { "gnocchi(eggs-potatoes-flour)", "spaghetti(eggs-flour)", "organic spaghetti(organic eggs-flour)", "spinach farfalle(eggs-flour-spinach)", "tagliatelle(eggs-flour)", }; var unitOfExecutionsFactory = new UnitOfExecutionsFactory(); var pastaPricer = new PastaPricerEngine(unitOfExecutionsFactory.GetPool(), pastasConfiguration, marketDataProvider, this); pastaPricer.Start(); // Turns on market data (note: make the pasta pricer start its dependencies instead?) marketDataProvider.Start(); // A sleep?!? There should be a better way ;-) Stopwatch timer = new Stopwatch(); timer.Start(); while (timer.ElapsedMilliseconds < 20000) { lock (this.lastPrices) { if (pastasConfiguration.Length == this.lastPrices.Count) { // all price received break; } Monitor.Wait(this.lastPrices, 100); } } Check.That(this.lastPrices.Keys).Contains("gnocchi"); Check.That(this.lastPrices.Keys).Contains("spaghetti"); Check.That(this.lastPrices.Keys).Contains("organic spaghetti"); Check.That(this.lastPrices.Keys).Contains("spinach farfalle"); Check.That(this.lastPrices.Keys).Contains("tagliatelle"); }
public void PopulateLatestStockQuotesToHistoricalQuotesPerDay() { lock (Locker) { Task a = new Task(() => { Logger.Debug("Getting LatestStockQuoteInfo"); var tradeDate = DateTime.UtcNow; var lastWriteTime = MarketDataProvider.GetLastWriteTime(); if (lastWriteTime.ToShortDateString() != tradeDate.ToShortDateString()) { Logger.Debug("The show2003 Dbf doesn't change intraday."); return; } var stockQuotesInfo = _uow.StockQuotesInfo.GetAll().ToList(); foreach (var stockQuote in stockQuotesInfo) { var histQuotes = _uow.HistoricalQuotes.GetAll().Where(m => m.StockCode == stockQuote.SecurityCode).ToList(); if (histQuotes.Count > 0) { var latestQuote = histQuotes.OrderByDescending(m => m.TradeDate).First(); if (latestQuote.TradeDate < tradeDate) { HistoricalQuote historicalQuote = Mapper.Map <StockQuoteInfo, HistoricalQuote>(stockQuote); historicalQuote.Id = new MongoDB.Bson.ObjectId(); historicalQuote.TradeDate = tradeDate; _uow.HistoricalQuotes.Add(historicalQuote); } } else { HistoricalQuote historicalQuote = Mapper.Map <StockQuoteInfo, HistoricalQuote>(stockQuote); historicalQuote.Id = new MongoDB.Bson.ObjectId(); historicalQuote.TradeDate = tradeDate; _uow.HistoricalQuotes.Add(historicalQuote); } } Logger.Debug("PopulateLatestStockQuotesToHistoricalQuotesPerDay Completed"); }); a.Start(); Task.WaitAll(a); } }
public void Should_receive_price_for_registered_RawMaterials_once_started() { var marketDataProvider = new MarketDataProvider(); marketDataProvider.RegisterRawMaterial("eggs"); void Handler(object o, RawMaterialPriceChangedEventArgs args) => this.priceChangedRaisedEvent.Set(); marketDataProvider.GetRawMaterial("eggs").PriceChanged += Handler; marketDataProvider.Start(); const int TimeoutInMsec = 500; var hasReceivedEvent = this.priceChangedRaisedEvent.WaitOne(TimeoutInMsec); Check.That(hasReceivedEvent).IsTrue(); marketDataProvider.Stop(); marketDataProvider.GetRawMaterial("eggs").PriceChanged -= Handler; }
public void PopulateRealtimeStocksQuotes() { lock (RealTimeStocksQuotesLocker) { try { List <StockQuoteInfo> stockQuotesInfo = MarketDataProvider.GetStockQuotesInfo(); _stocksQuoteInfo = _uow.StockQuotesInfo.GetAll().ToList(); _uow.StockQuotesInfo.Update(stockQuotesInfo, _stocksQuoteInfo); } catch (System.IO.FileNotFoundException exFileNotFound) { Logger.Debug(exFileNotFound.StackTrace.ToString()); } catch (System.IO.IOException exIO) { Logger.Debug(exIO.StackTrace.ToString()); } } }
public void PopulateRealTimeQuotes() { lock (Locker) { try { Task populateOptionQuotesInfo = new Task(() => { Logger.Debug("Getting OptionQuotesInfo"); List <OptionQuoteInfo> optionQuotesInfo = MarketDataProvider.GetOptionQuotesInfo(); Logger.Debug("Saving OptionQuotesInfo"); _optionsQuoteInfo = _uow.OptionQuotesInfo.GetAll().ToList(); _uow.OptionQuotesInfo.Update(optionQuotesInfo, _optionsQuoteInfo); }); populateOptionQuotesInfo.Start(); Task populateStockQuotesInfo = new Task(() => { Logger.Debug("Getting StockQuotesInfo"); List <StockQuoteInfo> stockQuotesInfo = MarketDataProvider.GetStockQuotesInfo(); Logger.Debug("Saving StockQuotesInfo"); _stocksQuoteInfo = _uow.StockQuotesInfo.GetAll().ToList(); _uow.StockQuotesInfo.Update(stockQuotesInfo, _stocksQuoteInfo); }); populateStockQuotesInfo.Start(); //Task.WaitAll(populateStockQuotesInfo); Task.WaitAll(populateOptionQuotesInfo, populateStockQuotesInfo); } catch (System.IO.FileNotFoundException exFileNotFound) { Logger.Debug(exFileNotFound.StackTrace.ToString()); } catch (System.IO.IOException exIO) { Logger.Debug(exIO.StackTrace.ToString()); } } }
public async Task MarketDataProvider_MergesHistoricAndLiveData() { var dataRepository = new Mock <IRepository <MarketData> >(); dataRepository .Setup(x => x.Get()) .ReturnsAsync(new[] { new MarketData { Date = new DateTime(2000, 1, 1) }, new MarketData { Date = new DateTime(2000, 1, 3) }, }); var apiDataProvider = new Mock <IApiDataProvider>(); apiDataProvider .Setup(x => x.GetData()) .ReturnsAsync(new[] { new MarketData { Date = new DateTime(2000, 1, 2) }, new MarketData { Date = new DateTime(2000, 1, 4) }, }); var target = new MarketDataProvider( apiDataProvider.Object, dataRepository.Object); var actual = await target.GetPriceData(); CollectionAssert.AreEqual( new[] { 1, 2, 3, 4 }, actual.Select(x => x.Date.Day)); }
///// <summary> ///// пример ///// </summary> ///// <param name="args"></param> //override public void Do(string[] args) //{ // //TradeConsole.ConsoleSetSize(); // //TradeConsole.LogAssemblyInfo(assemblies); // //список доступных команд // TradeConsole.ConsoleWriteCommands(); // Initialize(); // SetupStrategy(args); // base.Do(args); //} /// <summary> /// пример переопределения /// BackTest Sample1 Initialize() /// </summary> override public void Initialize() { Console.WriteLine("BackTest.Sample1.Initialize()"); marketDataProvider = new MarketDataProvider(); rawTradingDataProvider = new RawTradingDataProvider(DefaultLogger.Instance); symbolsDataProvider = new SymbolsDataProvider(); orderManager = new TRL.Emulation.BacktestOrderManager(TradingData.Instance, DefaultLogger.Instance); //private static SmartComAdapter adapter = // new SmartComAdapter(); traderBase = new TraderBase(orderManager); //new TraderBase(new SmartComOrderManager()); //strategySettings = new StrategySettings(1, // "ReversMaOnBar strategy", // AppSettings.GetStringValue("Portfolio"), // AppSettings.GetStringValue("Symbol"), // AppSettings.GetValue<double>("Amount")); //barSettings = new BarSettings( // strategySettings, // strategySettings.Symbol, // AppSettings.GetValue<int>("Interval"), // AppSettings.GetValue<int>("Period")); //assemblies = { "Interop.SmartCOM3Lib.dll", "TRL.Common.dll", "TRL.Connect.Smartcom.dll" }; }
public void PopulateStocksPerMinutesQuotes(string StockNameList) { lock (RealTimeStocksPerMinuteQuotesLocker) { List <string> StockNamedListResult = new List <string>(); if (StockNameList.Contains(",")) { StockNamedListResult = StockNameList.Split(new char[] { ',' }).ToList(); } else { StockNamedListResult.Add(StockNameList); } // List<string> StockNamedListResult=StockNameList.Split(new char[]{','}).ToList(); try { Logger.Debug("Getting StockQuotesInfoPerMinute:StockNameListtest=" + StockNamedListResult.Count()); List <StockQuoteInfo> list = MarketDataProvider.GetStockQuotesInfo().Where(p => StockNamedListResult.Contains(p.SecurityCode)).ToList(); Logger.Debug("Saving StockQuotesInfoPerMinute"); _uow.StockQuotePerMinuteRepository.Add(list); } catch (System.IO.FileNotFoundException exFileNotFound) { Logger.Debug(exFileNotFound.StackTrace.ToString()); } catch (System.IO.IOException exIO) { Logger.Debug(exIO.StackTrace.ToString()); } } }
public ExtMarketDataFilter(MarketDataProvider provider) { //得到OpenQuant.API.MarketDataProvider内的SmartQuant.Providers.IMarketDataProvider接口 marketDataProvider = (IMarketDataProvider)provider.GetType().GetField("provider", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(provider); factory = marketDataProvider.BarFactory; // 遍历,得到对应的两个事件 foreach (var e in marketDataProvider.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic)) { //Console.WriteLine(e); switch (e.FieldType.ToString()) { case "SmartQuant.Providers.QuoteEventHandler": NewQuoteField = e; // 很遗憾,不能提前在保存下来 //(MulticastDelegate)NewQuoteField.GetValue(marketDataProvider); break; case "SmartQuant.Providers.TradeEventHandler": NewTradeField = e; break; } } }
//private void MarketDataProviderOnValuesChanged(Security security, IEnumerable<KeyValuePair<Level1Fields, object>> changes, DateTime serverTime, DateTime localTime) //{ // var item = _optionDeskRowSides.TryGetValue(security); // if (item == null) // return; // Update(item, changes); //} private void Update(OptionDeskRow.OptionDeskRowSide side, DateTime now, out decimal?iv, out decimal?hv, out decimal?oi, out decimal?volume) { iv = hv = oi = volume = null; var option = side.Option; var changes = MarketDataProvider.GetSecurityValues(option); if (changes == null) { return; } foreach (var change in changes) { switch (change.Key) { case Level1Fields.BestAskPrice: side.BestAskPrice = (decimal)change.Value; break; case Level1Fields.BestBidPrice: side.BestBidPrice = (decimal)change.Value; break; case Level1Fields.Volume: volume = side.Volume = (decimal)change.Value; break; case Level1Fields.OpenInterest: oi = side.OpenInterest = (decimal)change.Value; break; case Level1Fields.ImpliedVolatility: iv = (decimal)change.Value; break; case Level1Fields.HistoricalVolatility: hv = (decimal)change.Value; break; } } const int round = 2; var bs = side.Model; side.TheorPrice = decimal.Round(bs.Premium(now, assetPrice: AssetPrice), round); side.Delta = decimal.Round(bs.Delta(now, assetPrice: AssetPrice), round); side.Gamma = decimal.Round(bs.Gamma(now, assetPrice: AssetPrice), round); side.Theta = decimal.Round(bs.Theta(now, assetPrice: AssetPrice), round); side.Vega = decimal.Round(bs.Vega(now, assetPrice: AssetPrice), round); side.Rho = decimal.Round(bs.Rho(now, assetPrice: AssetPrice), round); var assetPrice = bs.GetAssetPrice(AssetPrice); if (assetPrice == 0) { side.PnL = 0; } else { side.PnL = (option.OptionType == OptionTypes.Call ? 1 : -1) * (assetPrice - option.Strike); if (side.PnL < 0) { side.PnL = 0; } } }
public ExtMarketDataFilter(MarketDataProvider provider) : this(provider, null, null, null) { }
private decimal?GetSecurityValue(Level1Fields field) { return((decimal?)MarketDataProvider.GetSecurityValue(Security, field)); }
// 构造函数不能省 public MyExtFilter(MarketDataProvider provider, MarketDataFilter filter) : base(provider) { this.filter = filter; }
public ExtMarketDataFilter(MarketDataProvider provider, string NewBarOpen, string NewBar, string NewMarketBar) { this.Init(provider, NewBarOpen, NewBar, NewMarketBar); }
// 构造函数不能省 public MyExtFilter(MarketDataProvider provider, MarketDataFilter filter) : base(provider, "Simulator")//如果使用3.9.2版默认的Simulator { this.filter = filter; }