Example #1
0
 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);
        }
Example #6
0
        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");
        }
Example #7
0
        ///// <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"));
        }
Example #10
0
        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();
        }
Example #14
0
        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;
            }
        }
Example #15
0
        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();
        }
Example #18
0
        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;
 }
Example #20
0
        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");
        }
Example #21
0
        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;
        }
Example #23
0
 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());
         }
     }
 }
Example #24
0
        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());
                }
            }
        }
Example #25
0
        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));
        }
Example #26
0
        ///// <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" };
        }
Example #27
0
        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;
                }
            }
        }
Example #29
0
        //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;
                }
            }
        }
Example #30
0
 public ExtMarketDataFilter(MarketDataProvider provider)
     : this(provider, null, null, null)
 {
 }
Example #31
0
 private decimal?GetSecurityValue(Level1Fields field)
 {
     return((decimal?)MarketDataProvider.GetSecurityValue(Security, field));
 }
 // 构造函数不能省
 public MyExtFilter(MarketDataProvider provider, MarketDataFilter filter) : base(provider)
 {
     this.filter = filter;
 }
Example #33
0
 public ExtMarketDataFilter(MarketDataProvider provider, string NewBarOpen, string NewBar, string NewMarketBar)
 {
     this.Init(provider, NewBarOpen, NewBar, NewMarketBar);
 }
Example #34
0
 // 构造函数不能省
 public MyExtFilter(MarketDataProvider provider, MarketDataFilter filter)
     : base(provider, "Simulator")//如果使用3.9.2版默认的Simulator
 {
     this.filter = filter;
 }