Example #1
0
 private void AddExchangeScreener(StockScreenerRequest request)
 {
     if (!string.IsNullOrWhiteSpace(SelectedExchange) && SelectedExchange != "Any")
     {
         request.Exchange = (Exchange)Enum.Parse(typeof(Exchange), SelectedExchange, true);
     }
     else
     {
         request.Exchange = null;
     }
 }
Example #2
0
        public async Task <List <StockScreenerResponse> > GetStocks(StockScreenerRequest request)
        {
            var client      = _httpClientFactory.CreateClient();
            var httpRequest = new HttpRequestMessage(HttpMethod.Get, GetUrl(request));

            using var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead);

            var result = await response.Content.ReadAsAsync <List <StockScreenerResponse> >();

            return(result);
        }
Example #3
0
 private void AddCountryScreener(StockScreenerRequest request)
 {
     if (!string.IsNullOrWhiteSpace(SelectedCountry) && SelectedCountry != "Any")
     {
         request.Country = (Country)Enum.Parse(typeof(Country), SelectedCountry, true);
     }
     else
     {
         request.Country = null;
     }
 }
Example #4
0
 private void AddSectorScreener(StockScreenerRequest request)
 {
     if (!string.IsNullOrWhiteSpace(SelectedSector) && SelectedSector != "Any")
     {
         request.Sector = (Sector)Enum.Parse(typeof(Sector), SelectedSector, true);
     }
     else
     {
         request.Sector = null;
     }
 }
Example #5
0
        public async Task <StockScreenerResponseList> GetStocks(StockScreenerRequest payload)
        {
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "/api/Screen/Screen");

            request.Content    = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
            using var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

            var result = await response.Content.ReadAsAsync <StockScreenerResponseList>();

            return(result);
        }
Example #6
0
        private async void GetStocks()
        {
            var request = new StockScreenerRequest();

            request.RowsPerPage = 50;
            AddMarketCapScreener(request);
            AddBetaScreener(request);
            AddPriceScreener(request);
            AddVolumeScreener(request);
            AddDividendYieldScreener(request);
            AddExchangeScreener(request);
            AddCountryScreener(request);
            AddIndustryScreener(request);
            AddSectorScreener(request);
            Response = await StockScreenerPrivider.GetStocks(request);

            GetItems(1);
        }
Example #7
0
        private string GetUrl(StockScreenerRequest request)
        {
            const string url   = "https://financialmodelingprep.com/api/v3/stock-screener";
            var          param = new Dictionary <string, string>();

            if (request.MarketCapMoreThan != null)
            {
                param.Add("marketCapMoreThan", request.MarketCapMoreThan.ToString());
            }
            if (request.MarketCapLowerThan != null)
            {
                param.Add("marketCapLowerThan", request.MarketCapLowerThan.ToString());
            }
            if (request.PriceMoreThan != null)
            {
                param.Add("priceMoreThan", request.PriceMoreThan.ToString());
            }
            if (request.PriceLowerThan != null)
            {
                param.Add("priceLowerThan", request.PriceLowerThan.ToString());
            }
            if (request.BetaMoreThan != null)
            {
                param.Add("betaMoreThan", request.BetaMoreThan.ToString());
            }
            if (request.BetaLowerThan != null)
            {
                param.Add("betaLowerThan", request.BetaLowerThan.ToString());
            }
            if (request.VolumeMoreThan != null)
            {
                param.Add("volumeMoreThan", request.VolumeMoreThan.ToString());
            }
            if (request.VolumeLowerThan != null)
            {
                param.Add("volumeLowerThan", request.VolumeLowerThan.ToString());
            }
            if (request.DividendMoreThan != null)
            {
                param.Add("dividendMoreThan", request.DividendMoreThan.ToString());
            }
            if (request.DividendLowerThan != null)
            {
                param.Add("dividendLowerThan", request.DividendLowerThan.ToString());
            }
            if (request.IsActivelyTrading != null)
            {
                param.Add("isActivelyTrading", request.IsActivelyTrading.ToString());
            }
            if (request.IsEtf != null)
            {
                param.Add("isEtf", request.IsEtf.ToString());
            }
            if (request.Limit != null)
            {
                param.Add("limit", request.Limit.ToString());
            }
            if (request.Exchange != null)
            {
                param.Add("exchange", request.Exchange.ToDescription());
            }
            if (request.Country != null)
            {
                param.Add("country", request.Country.ToString());
            }
            if (request.Industry != null)
            {
                param.Add("industry", request.Industry.ToDescription());
            }
            if (request.Sector != null)
            {
                param.Add("sector", request.Sector.ToDescription());
            }
            param.Add("apikey", _settings.ApiToken);
            var newUrl = new Uri(QueryHelpers.AddQueryString(url, param));

            return(newUrl.ToString());
        }
Example #8
0
        public async Task <StockScreenerResponseList> GetStocks(StockScreenerRequest request)
        {
            var stocks = await _stockScreenerService.GetStocks(request);

            foreach (var stock in stocks)
            {
                if (stock.price > 1)
                {
                    stock.DividendYield = (decimal)(stock.lastAnnualDividend / stock.price);
                }
                else
                {
                    stock.DividendYield = 0;
                }
            }

            var filteredStocks = new List <StockScreenerResponse>();

            foreach (var stock in stocks)
            {
                if (request.DividendYieldLowerThan != null && request.DividendYieldMoreThan != null)
                {
                    if (stock.DividendYield >= request.DividendYieldMoreThan &&
                        stock.DividendYield <= request.DividendYieldLowerThan)
                    {
                        filteredStocks.Add(stock);
                    }
                }

                if (request.DividendYieldLowerThan == null && request.DividendYieldMoreThan != null)
                {
                    if (stock.DividendYield >= request.DividendYieldMoreThan)
                    {
                        filteredStocks.Add(stock);
                    }
                }

                if (request.DividendYieldLowerThan != null && request.DividendYieldMoreThan == null)
                {
                    if (stock.DividendYield <= request.DividendYieldLowerThan)
                    {
                        filteredStocks.Add(stock);
                    }
                }

                if (request.DividendYieldLowerThan == null && request.DividendYieldMoreThan == null)
                {
                    filteredStocks.Add(stock);
                }
            }
            return(new StockScreenerResponseList()
            {
                Items = filteredStocks,
                Paging = new PagingModel()
                {
                    Page = 1,
                    PageSize = request.RowsPerPage,
                    TotalItems = stocks.Count
                }
            });
        }
Example #9
0
        private void AddMarketCapScreener(StockScreenerRequest request)
        {
            switch (SelectedMarketCap)
            {
            case "Any":
                request.MarketCapLowerThan = null;
                request.MarketCapMoreThan  = null;
                break;

            case "Mega ($200bln and more)":
                request.MarketCapMoreThan  = 200000000000;
                request.MarketCapLowerThan = null;
                break;

            case "Large ($10bln to $200bln)":
                request.MarketCapLowerThan = 200000000000;
                request.MarketCapMoreThan  = 10000000000;
                break;

            case "Mid ($2bln to $10bln)":
                request.MarketCapLowerThan = 10000000000;
                request.MarketCapMoreThan  = 2000000000;
                break;

            case "Small ($300mln to $2bln)":
                request.MarketCapLowerThan = 2000000000;
                request.MarketCapMoreThan  = 300000000;
                break;

            case "Micro ($50mln $300mln)":
                request.MarketCapLowerThan = 300000000;
                request.MarketCapMoreThan  = 50000000;
                break;

            case "Nano (under $50mln)":
                request.MarketCapLowerThan = 50000000;
                request.MarketCapMoreThan  = null;
                break;

            case "+Large (over $10bln)":
                request.MarketCapMoreThan  = 10000000000;
                request.MarketCapLowerThan = null;
                break;

            case "+Mid (over $2bln)":
                request.MarketCapMoreThan  = 2000000000;
                request.MarketCapLowerThan = null;
                break;

            case "+Small (over $300mln)":
                request.MarketCapMoreThan  = 300000000;
                request.MarketCapLowerThan = null;
                break;

            case "+Micro (over $50mln)":
                request.MarketCapMoreThan  = 50000000;
                request.MarketCapLowerThan = null;
                break;

            case "-Large (under $200bln)":
                request.MarketCapLowerThan = 200000000000;
                request.MarketCapMoreThan  = null;
                break;

            case "-Mid (under $10bln)":
                request.MarketCapLowerThan = 10000000000;
                request.MarketCapMoreThan  = null;
                break;

            case "-Small (under $2bln)":
                request.MarketCapLowerThan = 2000000000;
                request.MarketCapMoreThan  = null;
                break;

            case "-Micro (under $300 mln)":
                request.MarketCapLowerThan = 300000000;
                request.MarketCapMoreThan  = null;
                break;

            default:
                request.MarketCapLowerThan = null;
                request.MarketCapMoreThan  = null;
                break;
            }
        }
Example #10
0
        private void AddBetaScreener(StockScreenerRequest request)
        {
            switch (SelectedBeta)
            {
            case "Any":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = null;
                break;

            case "Under 0":
                request.BetaLowerThan = 0;
                request.BetaMoreThan  = null;
                break;

            case "Under 0.5":
                request.BetaLowerThan = 0.5M;
                request.BetaMoreThan  = null;
                break;

            case "Under 1":
                request.BetaLowerThan = 1;
                request.BetaMoreThan  = null;
                break;

            case "Under 1.5":
                request.BetaLowerThan = 1.5M;
                request.BetaMoreThan  = null;
                break;

            case "Under 2":
                request.BetaLowerThan = 2;
                request.BetaMoreThan  = null;
                break;

            case "Over 0":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 0;
                break;

            case "Over 0.5":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 0.5M;
                break;

            case "Over 1":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 1;
                break;

            case "Over 1.5":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 1.5M;
                break;

            case "Over 2":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 2;
                break;

            case "Over 2.5":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 2.5M;
                break;

            case "Over 3":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 3;
                break;

            case "Over 4":
                request.BetaLowerThan = null;
                request.BetaMoreThan  = 4;
                break;

            case "0 to 0.5":
                request.BetaLowerThan = 0.5M;
                request.BetaMoreThan  = 0;
                break;

            case "0 to 1":
                request.BetaLowerThan = 1;
                request.BetaMoreThan  = 0;
                break;

            case "0.5 to 1.5":
                request.BetaLowerThan = 1.5M;
                request.BetaMoreThan  = 0.5M;
                break;

            case "1 to 2":
                request.BetaLowerThan = 2;
                request.BetaMoreThan  = 1;
                break;

            default:
                request.BetaLowerThan = null;
                request.BetaMoreThan  = null;
                break;
            }
        }
Example #11
0
        private void AddPriceScreener(StockScreenerRequest request)
        {
            switch (SelectedPrice)
            {
            case "Any":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = null;
                break;

            case "Under 1$":
                request.PriceLowerThan = 1;
                request.PriceMoreThan  = null;
                break;

            case "Under 2$":
                request.PriceLowerThan = 2;
                request.PriceMoreThan  = null;
                break;

            case "Under 3$":
                request.PriceLowerThan = 3;
                request.PriceMoreThan  = null;
                break;

            case "Under 4$":
                request.PriceLowerThan = 4;
                request.PriceMoreThan  = null;
                break;

            case "Under 5$":
                request.PriceLowerThan = 5;
                request.PriceMoreThan  = null;
                break;

            case "Under 7$":
                request.PriceLowerThan = 7;
                request.PriceMoreThan  = null;
                break;

            case "Under 10$":
                request.PriceLowerThan = 10;
                request.PriceMoreThan  = null;
                break;

            case "Under 15$":
                request.PriceLowerThan = 15;
                request.PriceMoreThan  = null;
                break;

            case "Under 20$":
                request.PriceLowerThan = 20;
                request.PriceMoreThan  = null;
                break;

            case "Under 30$":
                request.PriceLowerThan = 30;
                request.PriceMoreThan  = null;
                break;

            case "Under 40$":
                request.PriceLowerThan = 40;
                request.PriceMoreThan  = null;
                break;

            case "Under 50$":
                request.PriceLowerThan = 50;
                request.PriceMoreThan  = null;
                break;

            case "Over $1":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 1;
                break;

            case "Over $2":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 2;
                break;

            case "Over $3":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 3;
                break;

            case "Over $4":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 4;
                break;

            case "Over $5":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 5;
                break;

            case "Over $7":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 7;
                break;

            case "Over $10":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 10;
                break;

            case "Over $15":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 15;
                break;

            case "Over $20":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 20;
                break;

            case "Over $30":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 30;
                break;

            case "Over $40":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 40;
                break;

            case "Over $50":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 50;
                break;

            case "Over $60":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 60;
                break;

            case "Over $70":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 70;
                break;

            case "Over $80":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 80;
                break;

            case "Over $90":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 90;
                break;

            case "Over $100":
                request.PriceLowerThan = null;
                request.PriceMoreThan  = 100;
                break;

            case "$1 to $5":
                request.PriceLowerThan = 5;
                request.PriceMoreThan  = 1;
                break;

            case "$1 to $10":
                request.PriceLowerThan = 10;
                request.PriceMoreThan  = 1;
                break;

            case "$1 to $20":
                request.PriceLowerThan = 20;
                request.PriceMoreThan  = 1;
                break;

            case "$5 to $10":
                request.PriceLowerThan = 10;
                request.PriceMoreThan  = 5;
                break;

            case "$5 to $20":
                request.PriceLowerThan = 20;
                request.PriceMoreThan  = 5;
                break;

            case "$5 to $50":
                request.PriceLowerThan = 50;
                request.PriceMoreThan  = 5;
                break;

            case "$10 to $20":
                request.PriceLowerThan = 20;
                request.PriceMoreThan  = 10;
                break;

            case "$10 to $50":
                request.PriceLowerThan = 50;
                request.PriceMoreThan  = 10;
                break;

            case "$20 to $50":
                request.PriceLowerThan = 50;
                request.PriceMoreThan  = 20;
                break;

            case "$50 to $100":
                request.PriceLowerThan = 100;
                request.PriceMoreThan  = 50;
                break;

            default:
                request.PriceLowerThan = null;
                request.PriceMoreThan  = null;
                break;
            }
        }
Example #12
0
        private void AddVolumeScreener(StockScreenerRequest request)
        {
            switch (SelectedVolume)
            {
            case "Any":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = null;
                break;

            case "Under 50K":
                request.VolumeLowerThan = 50000;
                request.VolumeMoreThan  = null;
                break;

            case "Under 100K":
                request.VolumeLowerThan = 100000;
                request.VolumeMoreThan  = null;
                break;

            case "Under 500K":
                request.VolumeLowerThan = 500000;
                request.VolumeMoreThan  = null;
                break;

            case "Under 750K":
                request.VolumeLowerThan = 750000;
                request.VolumeMoreThan  = null;
                break;

            case "Under 1M":
                request.VolumeLowerThan = 1000000;
                request.VolumeMoreThan  = null;
                break;

            case "Over 50K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 50000;
                break;

            case "Over 100K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 100000;
                break;

            case "Over 200K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 200000;
                break;

            case "Over 300K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 300000;
                break;

            case "Over 400K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 400000;
                break;

            case "Over 500K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 500000;
                break;

            case "Over 750K":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 750000;
                break;

            case "Over 1M":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 1000000;
                break;

            case "Over 2M":
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = 2000000;
                break;

            case "100K to 500K":
                request.VolumeLowerThan = 500000;
                request.VolumeMoreThan  = 100000;
                break;

            case "100K to 1M":
                request.VolumeLowerThan = 1000000;
                request.VolumeMoreThan  = 100000;
                break;

            case "500K to 1M":
                request.VolumeLowerThan = 1000000;
                request.VolumeMoreThan  = 500000;
                break;

            case "500K to 10M":
                request.VolumeLowerThan = 10000000;
                request.VolumeMoreThan  = 500000;
                break;

            default:
                request.VolumeLowerThan = null;
                request.VolumeMoreThan  = null;
                break;
            }
        }
Example #13
0
        private void AddDividendYieldScreener(StockScreenerRequest request)
        {
            switch (SelectedDividendYield)
            {
            case "Any":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = null;
                break;

            case "None (0%)":
                request.DividendYieldLowerThan = 0;
                request.DividendYieldMoreThan  = 0;
                break;

            case "Positive (>0%)":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0;
                break;

            case "High (>5%)":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.05M;
                break;

            case "Very High (>10%)":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.10M;
                break;

            case "Over 1%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.01M;
                break;

            case "Over 2%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.02M;
                break;

            case "Over 3%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.03M;
                break;

            case "Over 4%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.04M;
                break;

            case "Over 5%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.05M;
                break;

            case "Over 6%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.06M;
                break;

            case "Over 7%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.07M;
                break;

            case "Over 8%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.08M;
                break;

            case "Over 9%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.09M;
                break;

            case "Over 10%":
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = 0.10M;
                break;

            default:
                request.DividendYieldLowerThan = null;
                request.DividendYieldMoreThan  = null;
                break;
            }
        }
Example #14
0
        public async Task <StockScreenerResponseList> Screen(StockScreenerRequest request)
        {
            var result = await _stockScreenerPrivider.GetStocks(request);

            return(result);
        }