public static void Initialize(SimplexFundsData data, string[] fundsNames, IStockDataProvider dataProvider)
 {
     for (int i = 0; i < fundsNames.Length; i++)
     {
         data.Stocks[i] = dataProvider.GetStockDefinition(fundsNames[i]);
     }
 }
예제 #2
0
        /// <summary>
        /// Gets stocks by their symbols
        /// </summary>
        /// <param name="stockDataProvider"></param>
        /// <param name="symbols"></param>
        /// <returns></returns>
        public IEnumerable<Stock> GetStocks(IStockDataProvider stockDataProvider, IEnumerable<string> symbols)
        {
            if (stockDataProvider == null) throw new ArgumentNullException("stockDataProvider");

            // check that symbols were provided
            if (symbols == null) return new List<Stock>();

            // enumerate symbols, if necessary
            var symbolList = symbols as string[] ?? symbols.ToArray();

            // get stocks by symbols
            var stocks = _marketDataRepository.StocksQuery.Where(s => symbolList.Contains(s.Symbol)).ToList();

            // get list of symbols for stocks that were not found
            var missingStocks = symbolList.Except(stocks.Select(s => s.Symbol)).ToList();

            // get data for stocks that are missing
            if (missingStocks.Count > 0)
            {
                var newStocks = stockDataProvider.GetStockData(missingStocks).Select(CreateStock);

                // get data for missing stocks and insert it to the repository
                foreach (var newStock in newStocks)
                    _marketDataRepository.Stocks.Add(newStock);

                // save changes
                _marketDataRepository.SaveChanges();

                // add new stocks
                stocks.AddRange(newStocks);
            }

            return stocks;
        }
        /// <summary>
        /// Instantiates a <see cref="PennyPicksEmailStockProvider"/>
        /// </summary>
        /// <param name="emailAlertsAppSettings"></param>
        /// <param name="emailFeedFactory"></param>
        /// <param name="stockParser"></param>
        /// <param name="stockDataProviderFactory"></param>
        /// <param name="stockRetriever"></param>
        public PennyPicksEmailStockProvider(IEmailAlertsAppSettings emailAlertsAppSettings,
            IEmailFeedFactory emailFeedFactory,
            [Dependency(ParserName)] IEmailStockParser stockParser,
            IStockDataProviderFactory stockDataProviderFactory,
            IStockRetriever stockRetriever)
        {
            // check nulls
            if (emailAlertsAppSettings == null) throw new ArgumentNullException("emailAlertsAppSettings");
            if (emailFeedFactory == null) throw new ArgumentNullException("emailFeedFactory");
            if (stockParser == null) throw new ArgumentNullException("stockParser");
            if (stockRetriever == null) throw new ArgumentNullException("stockRetriever");
            
            // create feed
            _feed = emailFeedFactory.CreateFeed(emailAlertsAppSettings.PennyPicksFeedName);
            _feed.NewEmailsFound += FeedOnNewEmailsFound;

            // get the stock data provider
            _stockDataProvider = stockDataProviderFactory.GetStockDataProvider(emailAlertsAppSettings.PennyPicksStockDataProviderName);

            // set stock parser and retriever
            _stockParser = stockParser;
            _stockRetriever = stockRetriever;

            // start feed
            _feed.Start();
        }
예제 #4
0
 public SystemDefinitionFactory(IStockDataProvider dataProvider, ISystemDataLoader dataLoader, ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
 {
     _dataProvider          = dataProvider;
     _dataLoader            = dataLoader;
     _slippage              = slippage;
     _commission            = commission;
     _systemExecutionLogger = systemExecutionLogger;
 }
        public void SetUp()
        {
            _dataProvider = StockDataProviderUtils.CreateSubstitute(DateTime.MinValue);
            _dataLoader   = SystemDataLoaderUtils.CreateSubstitute(2 * BackBufRange, BackBufRange, DateTime.Now.Date);
            TestObj       = new StocksDataPreloader(_dataProvider, _dataLoader);

            _stat = new StockStatMock("", BackBufRange);
        }
 public SignalsBBTrendFunds(ISystemDataLoader dataLoader, IStockDataProvider dataProvider, ISystemExecutionLogger systemExecutionLogger)
 {
     _dataLoader            = dataLoader;
     _systemExecutionLogger = systemExecutionLogger;
     _dataRange             = StockDataRange.Monthly;
     _fundsData             = new BBTrendFundsData(_fundsNames.Length);
     BBTrendFundsDataCalculator.Initialize(_fundsData, _fundsNames, BBPeriod, BBSigmaWidth, HLPeriod, dataProvider);
     _rebalanceSignal = new ModNCounter(RebalanceInterval);
 }
예제 #7
0
        public PriceUpdate(IStockDataProvider stockDataProvider,
                           IAutomationProvider automationProvider,
                           IRepository repository)
        {
            Condition.Requires(stockDataProvider).IsNotNull();
            Condition.Requires(automationProvider).IsNotNull();
            Condition.Requires(repository).IsNotNull();

            this._stockDataProvider  = stockDataProvider;
            this._automationProvider = automationProvider;
            this._repository         = repository;
        }
예제 #8
0
        public PriceCrossingSMA(IStockDataProvider dataProvider, ISystemDataLoader dataLoader,
                                ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
        {
            _dataProvider          = dataProvider;
            _dataLoader            = dataLoader;
            _slippage              = slippage;
            _commission            = commission;
            _systemExecutionLogger = systemExecutionLogger;

            SystemParams.Set(PriceCrossingSMAParams.StockName, "");
            SystemParams.Set(PriceCrossingSMAParams.SMAPeriod, 20);
        }
예제 #9
0
        public BBTrendFunds(IStockDataProvider dataProvider, ISystemDataLoader dataLoader,
                            ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
        {
            _dataProvider          = dataProvider;
            _dataLoader            = dataLoader;
            _slippage              = slippage;
            _commission            = commission;
            _systemExecutionLogger = systemExecutionLogger;

            //SystemParams.Set(BBTrendParams.StockName, "");
            //SystemParams.Set(BBTrendParams.BBPeriod, 20);
            //SystemParams.Set(BBTrendParams.BBSigmaWidth, 2f);
        }
예제 #10
0
 public void SetUp()
 {
     _dataProvider = Substitute.For <IStockDataProvider>();
     _dataProvider.GetStockDefinition(Arg.Compat.Any <string>())
     .Returns((x) =>
     {
         _getStockDefinitionCalls++;
         return(new StockDefinition());
     });
     _testObj = new BufferedDataLoader(_dataProvider);
     _getStockDefinitionCalls = 0;
     _getPricesDataCalls      = 0;
 }
예제 #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GatherPriceData"/> class.
        /// </summary>
        /// <param name="stockPriceProvider">The stock price provider.</param>
        public GatherPriceData(IStockPriceProvider stockPriceProvider,
                               IStockDataProvider stockDataProvider)
        {
            Condition.Requires(stockPriceProvider).IsNotNull();
            Condition.Requires(stockDataProvider).IsNotNull();

            this._priceProvider     = stockPriceProvider;
            this._stockDataProvider = stockDataProvider;

            // TODO - inject this
            this._scheduler = new Scheduler.Scheduler();

            // Schedule the scrape every minute
            this._scheduler.AddScheduledAction(() => GetStockPrices(), new TimeSpan(0, 1, 0));
        }
        public SignalsPriceCrossingSMA(string stockName, StockDataRange dataRange, int smaPeriod, ISystemDataLoader dataLoader, IStockDataProvider dataProvider, IMMSignalVolume signalVolumeCalculator)
        {
            _dataRange              = dataRange;
            _smaPeriod              = smaPeriod;
            _dataLoader             = dataLoader;
            _dataProvider           = dataProvider;
            _signalVolumeCalculator = signalVolumeCalculator;

            _stock   = _dataProvider.GetStockDefinition(stockName);
            _statSMA = new StatSMA("")
                       .SetParam(StatSMAParams.Period, new MOParamInt()
            {
                Value = _smaPeriod
            });
        }
        //private readonly ModNCounter _rebalanceSignal;

        public SignalsBBTrendMultiFunds(ISystemDataLoader dataLoader, IStockDataProvider dataProvider, ISystemExecutionLogger systemExecutionLogger)
        {
            _aggressiveFunds = _fundsNames.Select((_, i) => i > 0).ToArray();
            if (_fundsNames.Length != _aggressiveFunds.Length)
            {
                throw new Exception("_fundsNames != _aggressiveFunds");
            }

            _dataLoader            = dataLoader;
            _systemExecutionLogger = systemExecutionLogger;
            _dataRange             = StockDataRange.Monthly;
            _fundsData             = new BBTrendFundsData(_fundsNames.Length);
            BBTrendFundsDataCalculator.Initialize(_fundsData, _fundsNames, BBPeriod, BBSigmaWidth, HLPeriod, dataProvider);
            //_rebalanceSignal = new ModNCounter(RebalanceInterval);
        }
        public void SetUp()
        {
            _dataProvider           = StockDataProviderUtils.CreateSubstitute(DateTime.MinValue);
            _dataLoader             = SystemDataLoaderUtils.CreateSubstituteWithConstantPriceInRange(PricesCount, StartingPrice, PriceRange, LastDate);
            _dataDefinitionProvider = Substitute.For <ISystemDataDefinitionProvider>();
            _signalGeneratorOnOpen  = Substitute.For <ISignalGeneratorOnOpen>();
            _signalGeneratorOnClose = Substitute.For <ISignalGeneratorOnClose>();
            _commission             = CommissionUtils.CreateSubstitute();
            _slippage = SlippageUtils.CreateSusbstitute();
            _mmPositionCloseCalculator = Substitute.For <IMMPositionCloseCalculator>();
            _systemState = new SystemState()
            {
                Cash = InitialCash
            };

            _slippage.CalculateOpen(default, default, default, default).ReturnsForAnyArgs(args => args.ArgAt <float>(3));
예제 #15
0
        public BetCommandHandler(
            IPortfolioDataProvider portfolioDataProvider,
            IAccountDataProvider accountDataProvider,
            IStockDataProvider stockDataProvider,
            IBetController betController)
        {
            Condition.Requires(portfolioDataProvider).IsNotNull();
            Condition.Requires(accountDataProvider).IsNotNull();
            Condition.Requires(stockDataProvider).IsNotNull();
            Condition.Requires(betController).IsNotNull();

            this._accountDataProvider   = accountDataProvider;
            this._portfolioDataProvider = portfolioDataProvider;
            this._stockDataProvider     = stockDataProvider;
            this._betController         = betController;
        }
예제 #16
0
        public SimplexMultiFunds(IStockDataProvider dataProvider, ISystemDataLoader dataLoader,
                                 ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
        {
            _dataProvider          = dataProvider;
            _dataLoader            = dataLoader;
            _slippage              = slippage;
            _commission            = commission;
            _systemExecutionLogger = systemExecutionLogger;

            SystemParams.Set(SimplexMultiFundsParams.AvgProfitRange, 3);
            SystemParams.Set(SimplexMultiFundsParams.AvgChangeRange, 6);
            SystemParams.Set(SimplexMultiFundsParams.AcceptableSingleDD, 0.1);
            SystemParams.Set(SimplexMultiFundsParams.RiskSigmaMultiplier, 2.0);
            SystemParams.Set(SimplexMultiFundsParams.MaxSinglePositionSize, 0.8);
            SystemParams.Set(SimplexMultiFundsParams.MaxPortfolioRisk, 0.8);
            SystemParams.Set(SimplexMultiFundsParams.TruncateBalanceToNthPlace, 3);
        }
예제 #17
0
        public GetBetDecisions(
            IStockDataProvider stockDataProvider,
            IStockFilter stockFilter,
            IInvestDecider investDecider,
            ICommandBus commandBus,
            IUpdate priceUpdate)
        {
            Condition.Requires(stockDataProvider).IsNotNull();
            Condition.Requires(stockFilter).IsNotNull();
            Condition.Requires(investDecider).IsNotNull();
            Condition.Requires(commandBus).IsNotNull();
            Condition.Requires(priceUpdate).IsNotNull();

            this._stockDataProvider = stockDataProvider;
            this._stockFilter       = stockFilter;
            this._investDecider     = investDecider;
            this._commandBus        = commandBus;
            this._priceUpdate       = priceUpdate;
        }
예제 #18
0
        public FormMain()
        {
            InitializeComponent();
            _msgDisplay              = new MsgDisplay(this, "MarketOps");
            _dataProvider            = DataProvidersFactory.GetStockDataProvider();
            _systemDataLoader        = SystemDataLoaderFactory.Get(_dataProvider);
            _systemExecutionLogger   = new SystemExecutionLoggerToTextBox(edtSimDataLog);
            _configSystemDefinitions = ConfigSystemDefsLoader.Load();
            _systemDefinitionFactory = new SystemDefinitionFactory(_dataProvider, _systemDataLoader, new SlippageNone(), new CommissionNone(), _systemExecutionLogger);
            StatsFactories.Initialize();

            dbgPositions.OnPositionClick += dbgPositions_OnPositionClick;

            this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
            tcCharts.TabPages.Clear();
            PrepareStockDataRangeSource();
            InitializeSim();
            LoadConfig();
        }
예제 #19
0
        /// <summary>
        /// Gets stocks by their symbols
        /// </summary>
        /// <param name="stockDataProvider"></param>
        /// <param name="symbols"></param>
        /// <returns></returns>
        public IEnumerable <Stock> GetStocks(IStockDataProvider stockDataProvider, IEnumerable <string> symbols)
        {
            if (stockDataProvider == null)
            {
                throw new ArgumentNullException("stockDataProvider");
            }

            // check that symbols were provided
            if (symbols == null)
            {
                return(new List <Stock>());
            }

            // enumerate symbols, if necessary
            var symbolList = symbols as string[] ?? symbols.ToArray();

            // get stocks by symbols
            var stocks = _marketDataRepository.StocksQuery.Where(s => symbolList.Contains(s.Symbol)).ToList();

            // get list of symbols for stocks that were not found
            var missingStocks = symbolList.Except(stocks.Select(s => s.Symbol)).ToList();

            // get data for stocks that are missing
            if (missingStocks.Count > 0)
            {
                var newStocks = stockDataProvider.GetStockData(missingStocks).Select(CreateStock);

                // get data for missing stocks and insert it to the repository
                foreach (var newStock in newStocks)
                {
                    _marketDataRepository.Stocks.Add(newStock);
                }

                // save changes
                _marketDataRepository.SaveChanges();

                // add new stocks
                stocks.AddRange(newStocks);
            }

            return(stocks);
        }
예제 #20
0
        public SignalsBBTrend(string stockName, StockDataRange dataRange, int bbPeriod, float bbSigmaWidth, ISystemDataLoader dataLoader, IStockDataProvider dataProvider, IMMSignalVolume signalVolumeCalculator)
        {
            _dataRange              = dataRange;
            _bbPeriod               = bbPeriod;
            _bbSigmaWidth           = bbSigmaWidth;
            _dataLoader             = dataLoader;
            _dataProvider           = dataProvider;
            _signalVolumeCalculator = signalVolumeCalculator;

            _stock  = _dataProvider.GetStockDefinition(stockName);
            _statBB = new StatBB("")
                      .SetParam(StatBBParams.Period, new MOParamInt()
            {
                Value = _bbPeriod
            })
                      .SetParam(StatBBParams.SigmaWidth, new MOParamFloat()
            {
                Value = bbSigmaWidth
            });
        }
예제 #21
0
 public SystemProcessor(
     IStockDataProvider dataProvider,
     ISystemDataLoader dataLoader,
     ISystemDataDefinitionProvider dataDefinitionProvider,
     ISignalGeneratorOnOpen signalGeneratorOnOpen,
     ISignalGeneratorOnClose signalGeneratorOnClose,
     ICommission commission,
     ISlippage slippage,
     IMMPositionCloseCalculator mmPositionCloseCalculator)
 {
     _dataProvider           = dataProvider;
     _dataLoader             = dataLoader;
     _dataDefinitionProvider = dataDefinitionProvider;
     _signalGeneratorOnOpen  = signalGeneratorOnOpen;
     _signalGeneratorOnClose = signalGeneratorOnClose;
     _commission             = commission;
     _slippage = slippage;
     _mmPositionCloseCalculator = mmPositionCloseCalculator;
     _signalsProcessor          = new SignalsProcessor(_dataLoader, _commission, _slippage);
     _positionCloser            = new PositionsCloser(_dataLoader, _commission, _slippage);
 }
예제 #22
0
        public SignalsSimplexMultiFunds(ISystemDataLoader dataLoader, IStockDataProvider dataProvider, ISystemExecutionLogger systemExecutionLogger, MOParams systemParams)
        {
            _avgProfitRange            = systemParams.Get(SimplexMultiFundsParams.AvgProfitRange).As <int>();
            _avgChangeRange            = systemParams.Get(SimplexMultiFundsParams.AvgChangeRange).As <int>();
            _acceptableSingleDD        = systemParams.Get(SimplexMultiFundsParams.AcceptableSingleDD).As <double>();
            _riskSigmaMultiplier       = systemParams.Get(SimplexMultiFundsParams.RiskSigmaMultiplier).As <double>();
            _maxSinglePositionSize     = systemParams.Get(SimplexMultiFundsParams.MaxSinglePositionSize).As <double>();
            _maxPortfolioRisk          = systemParams.Get(SimplexMultiFundsParams.MaxPortfolioRisk).As <double>();
            _truncateBalanceToNthPlace = systemParams.Get(SimplexMultiFundsParams.TruncateBalanceToNthPlace).As <int>();

            _aggressiveFunds = _fundsNames.Select((_, i) => i > 0).ToArray();
            if (_fundsNames.Length != _aggressiveFunds.Length)
            {
                throw new Exception("_fundsNames != _aggressiveFunds");
            }

            _dataLoader            = dataLoader;
            _systemExecutionLogger = systemExecutionLogger;
            _dataRange             = StockDataRange.Monthly;
            _fundsData             = new SimplexFundsData(_fundsNames.Length);
            SimplexFundsDataCalculator.Initialize(_fundsData, _fundsNames, dataProvider);
        }
예제 #23
0
        /// <summary>
        /// Instantiates a <see cref="PennyPicksEmailStockProvider"/>
        /// </summary>
        /// <param name="emailAlertsAppSettings"></param>
        /// <param name="emailFeedFactory"></param>
        /// <param name="stockParser"></param>
        /// <param name="stockDataProviderFactory"></param>
        /// <param name="stockRetriever"></param>
        public PennyPicksEmailStockProvider(IEmailAlertsAppSettings emailAlertsAppSettings,
                                            IEmailFeedFactory emailFeedFactory,
                                            [Dependency(ParserName)] IEmailStockParser stockParser,
                                            IStockDataProviderFactory stockDataProviderFactory,
                                            IStockRetriever stockRetriever)
        {
            // check nulls
            if (emailAlertsAppSettings == null)
            {
                throw new ArgumentNullException("emailAlertsAppSettings");
            }
            if (emailFeedFactory == null)
            {
                throw new ArgumentNullException("emailFeedFactory");
            }
            if (stockParser == null)
            {
                throw new ArgumentNullException("stockParser");
            }
            if (stockRetriever == null)
            {
                throw new ArgumentNullException("stockRetriever");
            }

            // create feed
            _feed = emailFeedFactory.CreateFeed(emailAlertsAppSettings.PennyPicksFeedName);
            _feed.NewEmailsFound += FeedOnNewEmailsFound;

            // get the stock data provider
            _stockDataProvider = stockDataProviderFactory.GetStockDataProvider(emailAlertsAppSettings.PennyPicksStockDataProviderName);

            // set stock parser and retriever
            _stockParser    = stockParser;
            _stockRetriever = stockRetriever;

            // start feed
            _feed.Start();
        }
예제 #24
0
 public EditPositionPresenter(IPortfolioRepository portfolioRepository, IStockDataProvider stockService)
 {
     _portfolioRepository = portfolioRepository;
     _stockService        = stockService;
 }
        public static IStockDataProvider CreateSubstitute(DateTime nearestTickGETicksBefore)
        {
            IStockDataProvider dataProvider = Substitute.For <IStockDataProvider>();

            dataProvider.GetNearestTickGETicksBefore(default, default, default, default, default).ReturnsForAnyArgs(nearestTickGETicksBefore);
예제 #26
0
        }                                                        // used for dropdown select options

        public StockViewerModel(IHtmlHelper htmlHelper, IStockDataProvider stockDataProvider)
        {
            this._stockData  = stockDataProvider;
            this._htmlHelper = htmlHelper;
            this.Yh          = new YahooHistoryConfig();
        }
예제 #27
0
 public StockSymbolUpdateReader(IStockDataProvider provider) => _stockProvider = provider;
 public PortfolioService(IPortfolioRepository portfolioRepository, IStockDataProvider stockDataProvider)
 {
     _portRepo = portfolioRepository;
     _stockRepo = stockDataProvider;
 }
예제 #29
0
 public StocksDataPreloader(IStockDataProvider dataProvider, ISystemDataLoader dataLoader)
 {
     _dataProvider = dataProvider;
     _dataLoader   = dataLoader;
 }
예제 #30
0
 public SystemRunner(IStockDataProvider dataProvider, ISystemDataLoader dataLoader)
 {
     _dataProvider = dataProvider;
     _dataLoader   = dataLoader;
 }
예제 #31
0
 public IndicatorsCalculator(IStockDataProvider dataProvider)
 {
     _dataProvider = dataProvider;
 }
예제 #32
0
 public static void Initialize(BBTrendFundsData data, string[] fundsNames, int bbPeriod, float bbSigmaWidth, int hlPeriod, IStockDataProvider dataProvider)
 {
     for (int i = 0; i < fundsNames.Length; i++)
     {
         data.Stocks[i] = dataProvider.GetStockDefinition(fundsNames[i]);
         StockStat statBB = new StatBB("")
                            .SetParam(StatBBParams.Period, new MOParamInt()
         {
             Value = bbPeriod
         })
                            .SetParam(StatBBParams.SigmaWidth, new MOParamFloat()
         {
             Value = bbSigmaWidth
         });
         data.StatsBB[i]             = (StatBB)statBB;
         data.CurrentTrends[i]       = BBTrendType.Unknown;
         data.CurrentExpectations[i] = BBTrendExpectation.Unknown;
         StockStat statHL = new StatHLChannel("")
                            .SetParam(StatHLChannelParams.Period, new MOParamInt()
         {
             Value = hlPeriod
         });
         data.StatsHLChannel[i]     = (StatHLChannel)statHL;
         data.ExpectationChanged[i] = false;
     }
 }
예제 #33
0
 public PortfolioService(IPortfolioRepository portfolioRepository, IStockDataProvider stockDataProvider)
 {
     _portRepo  = portfolioRepository;
     _stockRepo = stockDataProvider;
 }
 public EditPositionPresenter(IPortfolioRepository portfolioRepository, IStockDataProvider stockService)
 {
     _portfolioRepository = portfolioRepository;
     _stockService = stockService;
 }