Search packages, repositories and app categories

Package detailsv1.0.14

yahoo_finance_data_reader

Data reader for yahoo finance to get daily stocks prices. It can be used to develop backtests and it can get all the historic daily data on yahoo finance

AndroidiOSmacOSWindowsLinux
30-day downloads
962
Likes
31
Pub points
160

Install package

flutter pub add yahoo_finance_data_reader

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A Flutter/Dart package that fetches daily stock prices from Yahoo Finance, enabling developers to access historical market data for building backtesting tools and financial analysis applications. It supports multiple platforms including Android, iOS, macOS, Windows, and Linux, making it versatile for cross-platform use. The package simplifies integration with Yahoo Finance's public API, allowing seamless retrieval of comprehensive historical price data for stocks and other financial instruments.

Use cases

  • Backtesting trading strategies
  • Building financial dashboards
  • Analyzing historical stock trends
  • Developing investment research tools
  • Creating portfolio tracking apps

Key features

  • Fetches daily historical stock prices
  • Supports cross-platform deployment
  • Simple API for data retrieval
  • Integrates with Yahoo Finance
  • Enables real-time and historical data access

Suitable for

  • Financial app developers
  • Quantitative analysts
  • Trading strategy builders
  • Data-driven investment tools
  • Flutter projects requiring market data

Considerations

  • Depends on external Yahoo Finance API stability
  • Limited to daily granularity
  • Requires internet connection
  • May have rate limits
  • Data accuracy depends on Yahoo Finance source

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

This project started as a migration of the pandas datareader functionality to read yahoo finance stock prices. In December of 2022 yahoo started to encrypt the data in the HTML, so I needed to investigate a way of evolving the package. And then found a yfinance package that used query2 of yahoo finance API, and started to use it

https://github.com/pydata/pandas-datareader/blob/main/pandas_datareader/yahoo/daily.py

This lib have a strong advantage on backtesting strategies as it can give all the dataframe in yahoo finance, this means that can get daily data on futures like NQ=F and ES=F since 2000 and it goes as far as getting data from 1927 on the SP500 yahoo finance symbol ^GSPC

Yahoo Finance data

Features

Get daily data from yahoo finance for the entire dataframe available

Getting started

Add the dependency to your pubspec.yaml:

yahoo_finance_data_reader: ^1.0.14

Usage

YahooFinanceResponse response = await YahooFinanceDailyReader().getDailyDTOs('GOOG');

You can also provide your own Dio instance when you need custom behavior like request caching or shared interceptors:

final dio = Dio()
  ..interceptors.add(DioCacheInterceptor(options: cacheOptions));

final reader = YahooFinanceDailyReader(dio: dio);
final response = await reader.getDailyDTOs('GOOG');

Additional information

To include in your app as a widget you can start with this future builder and debug your way until your desired result

class DTOSearch extends StatefulWidget {
  const DTOSearch({super.key});

  @override
  State<DTOSearch> createState() => _DTOSearchState();
}

class _DTOSearchState extends State<DTOSearch> {
  final TextEditingController controller = TextEditingController(
    text: 'GOOG',
  );
  late Future<YahooFinanceResponse> future;

  @override
  void initState() {
    super.initState();
    load();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        const Text('Ticker from yahoo finance'),
        TextField(
          controller: controller,
        ),
        MaterialButton(
          onPressed: load,
          child: Text('Load'),
          color: Theme.of(context).primaryColor,
        ),
        Expanded(
          child: FutureBuilder(
            future: future,
            builder: (BuildContext context,
                AsyncSnapshot<YahooFinanceResponse> snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.data == null) {
                  return Text('No data');
                }

                YahooFinanceResponse response = snapshot.data!;
                return ListView.builder(
                    itemCount: response.candlesData.length,
                    itemBuilder: (BuildContext context, int index) {
                      YahooFinanceCandleData candle =
                      response.candlesData[index];

                      return _CandleCard(candle);
                    });
              } else {
                return const Center(
                  child: SizedBox(
                    height: 50,
                    width: 50,
                    child: CircularProgressIndicator(),
                  ),
                );
              }
            },
          ),
        ),
      ],
    );
  }

  void load() {
    future = YahooFinanceDailyReader().getDailyDTOs(controller.text);
    setState(() {});
  }
}

class _CandleCard extends StatelessWidget {
  final YahooFinanceCandleData candle;
  const _CandleCard(this.candle);

  @override
  Widget build(BuildContext context) {
    final String date = candle.date.toIso8601String().split('T').first;

    return Card(
      child: Container(
        margin: const EdgeInsets.all(10),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Text(date),
              ],
            ),
            const SizedBox(
              height: 10,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Text('open: ${candle.open.toStringAsFixed(2)}'),
                Text('close: ${candle.close.toStringAsFixed(2)}'),
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Text('low: ${candle.low.toStringAsFixed(2)}'),
                Text('high: ${candle.high.toStringAsFixed(2)}'),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

Like us on pub.dev

Package url: https://pub.dev/packages/yahoo_finance_data_reader

Instruction to publish the package to pub.dev

dart pub publish

Categories

Dependencies

Dependency list 5 items

Source repository

Projects using this package