首先给到需要获取和计算的股票,存入一个文本中,如stocks.txt
然后定义个抽象类,用于读取这个stocks.txt中存放的股票信息,并计算出股票的总值和读取花费的时间。代码如下:
01 |
public abstract class AbstractNAV{
|
02 |
public static Map<String,Integer>readTickers() throws IOException{
|
03 |
final BufferedReaderreader=
|
04 |
new BufferedReader( new FileReader( "d:/stocks.txt" ));
|
06 |
final Map<String,Integer>stocks= new HashMap<String,Integer>();
|
09 |
while ((stockInfo=reader.readLine())!= null ){
|
10 |
final String[]stockInfoData=stockInfo.split( "," );
|
11 |
final StringstockTicker=stockInfoData[ 0 ];
|
12 |
final Integerquantity=Integer.valueOf(stockInfoData[ 1 ]);
|
14 |
stocks.put(stockTicker,quantity);
|
20 |
public void timeAndComputeValue()
|
21 |
throws ExecutionException,InterruptedException,IOException{
|
22 |
final long start=System.nanoTime();
|
24 |
final Map<String,Integer>stocks=readTickers();
|
25 |
final double nav=computeNetAssetValue(stocks);
|
27 |
final long end=System.nanoTime();
|
29 |
final Stringvalue= new DecimalFormat( "$##,##0.00" ).format(nav);
|
30 |
System.out.println( "Yournetassetvalueis" +value);
|
31 |
System.out.println( "Time(seconds)taken" +(end-start)/ 1 .0e9);
|
34 |
public abstract double computeNetAssetValue(
|
35 |
final Map<String,Integer>stocks)
|
36 |
throws ExecutionException,InterruptedException,IOException;
|
然后,我们用传统的单线程方式,依次去读取并计算股票,并打印总价和花费的时间,代码如下:
01 |
public class SequentialNAV extends AbstractNAV{
|
02 |
public double computeNetAssetValue(
|
03 |
final Map<String,Integer>stocks) throws IOException{
|
04 |
double netAssetValue= 0.0 ;
|
05 |
for (Stringticker:stocks.keySet()){
|
06 |
netAssetValue+=stocks.get(ticker)*YahooFinance.getPrice(ticker);
|
11 |
public static void main( final String[]args)
|
12 |
throws ExecutionException,IOException,InterruptedException{
|
13 |
new SequentialNAV().timeAndComputeValue();
|
由于网络问题,我这里运行之后,得到的结果是:
1 |
Yournetassetvalueis$ 18 , 317 , 338.21
|
2 |
Time(seconds)taken 18.080151543
|
紧接着,我们用多线程方式,读取并计算,并打印总价和时间花费
01 |
public class ConcurrentNAV extends AbstractNAV{
|
02 |
public double computeNetAssetValue( final Map<String,Integer>stocks)
|
03 |
throws InterruptedException,ExecutionException{
|
04 |
final int numberOfCores=Runtime.getRuntime().availableProcessors();
|
05 |
final double blockingCoefficient= 0.9 ;
|
06 |
final int poolSize=( int )(numberOfCores/( 1 -blockingCoefficient));
|
08 |
System.out.println( "NumberofCoresavailableis" +numberOfCores);
|
09 |
System.out.println( "Poolsizeis" +poolSize);
|
12 |
final List<Callable<Double>>partitions=
|
13 |
new ArrayList<Callable<Double>>();
|
14 |
for ( final Stringticker:stocks.keySet()){
|
15 |
partitions.add( new Callable<Double>(){
|
16 |
public Doublecall() throws Exception{
|
17 |
return stocks.get(ticker)*YahooFinance.getPrice(ticker);
|
23 |
final ExecutorServiceexecutorPool=
|
24 |
Executors.newFixedThreadPool(poolSize);
|
27 |
final List<Future<Double>>valueOfStocks=
|
28 |
executorPool.invokeAll(partitions, 10000 ,TimeUnit.SECONDS);
|
30 |
double netAssetValue= 0.0 ;
|
31 |
for ( final Future<Double>valueOfAStock:valueOfStocks)
|
32 |
netAssetValue+=valueOfAStock.get();
|
34 |
executorPool.shutdown();
|
38 |
public static void main( final String[]args)
|
39 |
throws ExecutionException,InterruptedException,IOException{
|
40 |
new ConcurrentNAV().timeAndComputeValue();
|
在跟上面同等的网络环境下,这段代码运行之后的结果为:
1 |
NumberofCoresavailableis 4
|
3 |
Yournetassetvalueis$ 18 , 317 , 338.21
|
4 |
Time(seconds)taken 0.715660335
|
分享到:
相关推荐
6. **多线程(Multithreading)**:为提高爬取效率,项目可能采用了多线程或异步处理。每个线程负责爬取一个或多个股票的数据,这样可以并行处理多个请求,减少整体的爬取时间。 7. **数据存储**:抓取到的股票数据...
# 使用多线程获取上证50股票数据 symbols = ['SH000001'] # 上证50股票代码示例 threads = [MyThread(target=get_stock_data, args=(symbol,)) for symbol in symbols] for thread in threads: thread.start() # ...
6. **多线程**:为了不影响用户界面的响应,数据获取和处理过程通常在后台线程执行,使用TThread或Delphi的异步操作。 7. **数据缓存与更新**:为了减少频繁的网络请求,可以采用本地缓存策略,仅在必要时更新数据...
- **多线程**:如果需要同时获取多只股票的数据,可以考虑使用多线程技术,提升效率。 通过以上步骤,你就可以利用VBA在Excel中创建一个自定义工具,轻松获取和分析股票历史数据。这个工具对于个人投资者进行股票...
通过调用这个接口,我们可以获取到想要的股票信息,并进行进一步的数据分析或应用开发。 要实现一个Java应用程序来获取Yahoo股票数据,我们需要以下步骤: 1. **设置HTTP请求**:使用Java的HttpURLConnection或第...
综上所述,通过Python编程,结合Yahoo Finance API、多线程技术和pandas库,我们可以高效地获取和处理上证50成分股的交易数据,为股票市场分析提供基础。同时,项目中还涉及到异常处理、数据存储与解析、数据可视化...
本文将深入探讨如何使用C# WinForm来实现股票分时走势的显示功能,以及多线程在其中的应用。 股票分时走势是股票交易中非常重要的一个视觉表示,它展示了股票在特定时间内的价格变化。在C# WinForm中实现这个功能,...
在Python编程语言中,爬取股票数据是一种常见的任务,尤其对于数据分析、投资研究以及金融建模的从业者来说,这是获取实时或历史股票信息的重要手段。本实现方案将深入探讨如何利用Python来爬取股票数据,并提供相关...
获取到网页数据后,需要解析其中的股票信息。`BeautifulSoup`库是常用的HTML解析工具,而`json`库则用于解析JSON格式的数据。通过它们,我们可以提取出股票代码、价格、成交量等关键信息。 4. **多线程与多进程**...
总的来说,Java实时股票报价系统结合了Java语言的强大功能和NeatBeans IDE的便利性,为用户提供了获取和管理股票信息的有效工具。通过深入研究这个系统的源代码,无论是初学者还是经验丰富的开发者,都能从中学习到...
首先,`StockInfo.java`可能是一个Java类,用于封装获取股票信息的相关逻辑。这个类可能包含了连接股票数据提供商的接口调用方法,例如Yahoo Finance API、Alpha Vantage、Quandl等。这些API通常会提供实时报价、...
4. **多线程**:为了不阻塞主线程,数据获取和解析可能需要在单独的线程中进行,以确保用户界面的响应速度。 5. **用户配置**:允许用户添加或删除关注的股票,这需要在代码中实现动态配置和存储功能。 6. **错误...
`NSOperationQueue`和GCD(Grand Central Dispatch)是实现多线程操作的常用工具。 总的来说,这个"ios应用源码之横条显示滚动的股票动态"项目涵盖了iOS应用开发中的多个核心概念,包括界面设计、网络通信、数据...
8. **多线程**:为了处理复杂的计算任务或避免UI冻结,系统可能使用后台线程来执行计算,例如计算股票的技术指标。 9. **设计模式**:软件设计中可能运用到一些常见的设计模式,如单例模式(用于数据库连接管理)、...
6. **多线程或异步处理**:实时股票应用通常需要在不阻塞用户界面的情况下获取和处理数据,这可能涉及到多线程或多进程编程,或者是Python的异步I/O模型,如asyncio库。 7. **用户交互设计**:自动隐藏功能反映了...
1. 数据获取模块:通过连接到股票市场数据提供商,如Yahoo Finance、Google Finance或专业金融数据服务,获取实时的股票报价、历史数据以及公司新闻等信息。 2. 数据解析模块:接收来自服务器的数据流,并进行解析...
4. **多线程与并发**:为了实时接收数据,程序可能需要使用多线程或多进程技术,确保数据获取的高效性和及时性。 5. **数据库存储**:接收到的数据通常需要存储在数据库中,以便后续分析和查询,所以SQL知识和...
为了实现股票数据的获取,Python有多个库可供选择,如`yfinance`用于获取Yahoo Finance的数据,`pandas_datareader`可以读取Google Finance、Yahoo Finance等平台的数据。数据获取后,`pandas`库常用于数据清洗、...
7. **多线程处理**:为了保证界面的流畅性,获取和处理股票数据可能在后台线程中进行,避免阻塞主线程。这需要理解并发编程和线程同步机制,如TThread或异步方法。 8. **错误处理和异常安全**:任何程序都应考虑...