web-dev-qa-db-ja.com

履歴在庫データのソース

私は株式市場シミュレーターを作成しようとしています(おそらく最終的には予測AIに成長します)が、使用するデータを見つけるのに問題があります。過去の株式市場データの(できれば無料の)ソースを探しています。

理想的には、NASDAQとNYSEのすべてのシンボルの価格とボリュームを含む非常にきめの細かい(2番目または1分間隔)データセットです(そして、もし私が冒険するなら他のシンボルも)。誰もがそのような情報のソースを知っていますか?

この質問 が見つかりました。これは、Yahooが履歴データをCSV形式で提供していることを示していますが、リンク先のサイトをざっと調べて取得する方法を見つけることができませんでした。

また、CSVファイルで断片的なデータをダウンロードするという考えも好きではありません。最初の数千件のリクエストの後、Yahooが動揺して私を締め出すと思います。

また、 別の質問 を発見したので、ジャックポットを打つと思いましたが、残念ながらOpenTickサイトはドアを閉めているようです...残念なことに、彼らはまさに私が望んでいたものだと思うので。

また、毎日すべてのシンボルのオープン/クローズ価格とボリュームのデータを使用することもできますが、取得できる場合はすべてのデータを使用したいと思います。他の提案はありますか?

233
rmeador

2¢を追加してみましょう。ヘッジファンドの適切でクリーンなデータを取得するのが私の仕事です。非常に多くのデータフィードと履歴データプロバイダーを見てきました。これは主に米国の株式データに関するものです。

そもそも、Yahooからのデータのダウンロードに煩わされないお金がある場合は、CSIデータ、これはYahooがEODデータを入手する場所です。彼らはあなたが望む形式にデータを抽出できるAPIを持っています。データの年間サブスクリプションは、数百ドルです。

無料サービスからデータをダウンロードする際の主な問題は、まだ存在する株式のみを取得することです。これは Survivorship Bias と呼ばれ、多くの株式を見ると間違った結果を与える可能性があります。これまでに作成したものを含め、リストから外したものは含めないでください。

IQFeedを調べて、日中のデータをいじってみると、履歴データを抽出するためのAPIがいくつかありますが、主にリアルタイムフィード用の衣装です。しかし、ここにはかなりの選択肢があり、一部のブローカーはAPI経由で履歴データのダウンロードを提供することもあるので、毒を選んでください。

しかし、通常、このすべてのデータはあまりきれいではありません。実際にテストを開始すると、特定の株が欠落しているか、2つの異なるシンボルとして表示されるか、株式分割が適切に考慮されないなどがわかります。配当データも必要であるため、サークルでの実行を開始し、100の異なるデータソースからのデータにパッチを適用します。そのため、「割引」データフィードで開始することはできますが、より包括的なバックテストを実行すると、実行内容によっては問題が発生する可能性があります。 S&P 500株を見てみると、これはそれほど問題にはなりませんが、日中の「安い」フィードで十分です。

見つからないのは、無料の日中データです。いくつかの例を見つけるかもしれませんが、MSFTのティックデータが5年間どこかに浮かんでいると思いますが、それほど遠くはありません。

次に、本物(レベルIIの注文書、すべての取引所で発生したすべてのティック)が必要な場合、「手頃な価格」の1つですが、優れたオプションはNanex です。 。実際にテラバイトのデータを備えたドライブを出荷します。私の記憶が正しければ、年間約300〜4,000ドルのデータです。しかし、私を信じてください。良い日中のデータを取得することがいかに難しいかを理解すれば、これはまったくお金だとは思わないでしょう。

あなたをがっかりさせるのではなく、良いデータを取得するのは難しいです。実際、多くのヘッジファンドや銀行は、彼らが信頼できるデータを得るために月に数十万ドルを費やしています。繰り返しますが、どこかから始めて、そこから行くことができますが、コンテキストで少し見るのは良いことです。


編集:上記の答えは私自身の経験からです。 Caltechからのこの記事 利用可能なデータフィードについて、より多くの洞察が得られ、特に推奨QuantQuote

220
lukebuehler

この回答IS YAHOOフィードが存在しなくなったため、もはや正確ではありません

上記のYahooのCSVアプローチを使用すると、履歴データも取得できます!次の例をリバースエンジニアリングできます。

http://ichart.finance.yahoo.com/table.csv?s=YHOO&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv

基本的に:

sn = TICKER
a = fromMonth-1
b = fromDay (two digits)
c = fromYear
d = toMonth-1
e = toDay (two digits)
f = toYear
g = d for day, m for month, y for yearly

パラメーターの完全なリスト:

a   Ask
a2  Average Daily Volume
a5  Ask Size
b   Bid
b2  Ask (Real-time)
b3  Bid (Real-time)
b4  Book Value
b6  Bid Size
c   Change & Percent Change
c1  Change
c3  Commission
c6  Change (Real-time)
c8  After Hours Change (Real-time)
d   Dividend/Share
d1  Last Trade Date
d2  Trade Date
e   Earnings/Share
e1  Error Indication (returned for symbol changed / invalid)
e7  EPS Estimate Current Year
e8  EPS Estimate Next Year
e9  EPS Estimate Next Quarter
f6  Float Shares
g   Day's Low
h   Day's High
j   52-week Low
k   52-week High
g1  Holdings Gain Percent
g3  Annualized Gain
g4  Holdings Gain
g5  Holdings Gain Percent (Real-time)
g6  Holdings Gain (Real-time)
i   More Info
i5  Order Book (Real-time)
j1  Market Capitalization
j3  Market Cap (Real-time)
j4  EBITDA
j5  Change From 52-week Low
j6  Percent Change From 52-week Low
k1  Last Trade (Real-time) With Time
k2  Change Percent (Real-time)
k3  Last Trade Size
k4  Change From 52-week High
k5  Percent Change From 52-week High
l   Last Trade (With Time)
l1  Last Trade (Price Only)
l2  High Limit
l3  Low Limit
m   Day's Range
m2  Day's Range (Real-time)
m3  50-day Moving Average
m4  200-day Moving Average
m5  Change From 200-day Moving Average
m6  Percent Change From 200-day Moving Average
m7  Change From 50-day Moving Average
m8  Percent Change From 50-day Moving Average
n   Name
n4  Notes
o   Open
p   Previous Close
p1  Price Paid
p2  Change in Percent
p5  Price/Sales
p6  Price/Book
q   Ex-Dividend Date
r   P/E Ratio
r1  Dividend Pay Date
r2  P/E Ratio (Real-time)
r5  PEG Ratio
r6  Price/EPS Estimate Current Year
r7  Price/EPS Estimate Next Year
s   Symbol
s1  Shares Owned
s7  Short Ratio
t1  Last Trade Time
t6  Trade Links
t7  Ticker Trend
t8  1 yr Target Price
v   Volume
v1  Holdings Value
v7  Holdings Value (Real-time)
w   52-week Range
w1  Day's Value Change
w4  Day's Value Change (Real-time)
x   Stock Exchange
y   Dividend Yield
93
Fredrik E

あなたが「無料」を望んでいたことは知っていますが、私があなただったら csidata.com から年間約300ドルでデータを取得することを真剣に検討します。

これは、yahooがデータを提供するために使用するものです。

適切なAPIが付属しており、データは(私が知る限り)非常にクリーンです。

購読すると10年の歴史があり、その後は毎晩更新されます。

彼らはまた、あなたのためにスプリットや配当のようなあらゆる厄介なことを処理します。データクリーニングの喜びをまだ発見していない場合、ATS(Automated Trading System)が在庫が本当に安いと初めて考えるまで、これがどれほど必要か気付かないでしょう。 :1気づかなかった。

43
Eric H.

イントロ:
yahooからEOD(1日の終わり)の過去の価格、またはリアルタイムの価格を取得できます。 EOD価格は驚くほど簡単にダウンロードできます。データの取得方法の説明とC#コードの例については、 my blog をご覧ください。

私は、リアルタイムの価格をダウンロードしてデータベースに保存するリアルタイムのデータフィード「エンジン」を作成しています。このエンジンは当初、YahooおよびInteractive Brokersから過去の価格をダウンロードし、選択したデータベース(MS SQL、MySQL、SQLiteなど)にデータを保存することができます。オープンソースですが、さらに投稿します。 (数日以内に)公開に近づいたときのブログの情報。

別のオプションは Eclipse trader ...です。これにより、1分という短い粒度で履歴データを記録し、テキストファイルにローカルに価格を保存できます。基本的には、Yahooからリアルタイムデータを15分遅れでダウンロードします。より堅牢なソリューションが必要であり、データが必要な大規模な学校プロジェクトに取り組んでいるので、独自のデータフィードエンジンを作成することにしました(上記を参照)。

サンプルコード:
リアルタイムデータをダウンロードする方法を示すサンプルC#コードを次に示します。

public void Start()
{
    string url = "http://finance.yahoo.com/d/quotes.csv?s=MSFT+GOOG&f=snl1d1t1ohgdr";
    //Get page showing the table with the chosen indices
    HttpWebRequest request = null;
    IDatabase database =
        DatabaseFactory.CreateDatabase(
        DatabaseFactory.DatabaseType.SQLite);

    //csv content
    try
    {
        while (true)
        {
            using (Stream file = File.Create("quotes.csv"))
            {
                request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                request.Timeout = 30000;
                using (var response = (HttpWebResponse)request.GetResponse())
                using (Stream input = response.GetResponseStream())
                {
                    CopyStream(input, file);
                }
            }
            Console.WriteLine("------------------------------------------------");
            database.InsertData(Directory.GetCurrentDirectory() + "/quotes.csv");

            File.Delete("quotes.csv");
            Thread.Sleep(10000); // 10 seconds
        }
    }
    catch (Exception exc)
    {
        Console.WriteLine(exc.ToString());
        Console.ReadKey();
    }
}

データベース:
データベース側では、CSVファイルへのOleDb接続を使用してDataSetにデータを入力し、DataSetを介して実際のデータベースを更新します。 Yahooからデータベースに直接返されたCSVファイルのすべての列を一致させる(データベースがSQLiteなどのCSVデータのバッチ挿入をサポートしていない場合)。それ以外の場合、データの挿入はワンライナーです... CSVをデータベースにバッチ挿入するだけです。

URLのフォーマットの詳細については、こちらをご覧ください。 http://www.gummy-stuff.org/Yahoo-data.htm

15
Kiril

NASDAQおよびNYSEのすべてのシンボルの1秒または1分間隔のデータセットは、massiveになります。

両方の取引所に合計4000社がリストされているとしましょう(NASDAQに 200社以上 がリストされているため、これはおそらく非常に低い側にあります)。 2番目の間隔のデータの場合、1日の取引時間が6.5時間であると仮定すると、企業あたり1日あたり23400データポイント、またはその1日で合計約93,600,000データポイントが得られます。 1年で200取引日と仮定すると、たった1年間で約18,720,000,000データポイントになります。

小さいセットから最初に始めたいかもしれませんか?

14
matt b

ナスダックは、各シンボルの10年間の履歴EODデータを提供します

http://www.nasdaq.com/aspx/historical_quotes.aspx?symbol=AAPL&selected=AAPL

このデータをダウンロードするプロセスを自動化できます。

9
Navi

生存バイアスのないデータについて、私が見つけた唯一の信頼できるソースはQuantQuote( http://quantquote.com

データは、分、秒、またはティックの解像度で提供され、 歴史的な株式データ にリンクされます。

上記のキボットの提案がありました。私は彼らから購入する前に簡単なグーグル検索を行います、あなたはたくさんの投稿を見つけるでしょう このように キボットデータ品質問題についての警告とともに。また、サバイバーシップバイアスのないsp500には14年間で570個のシンボルしかないことを示しています。それはほとんど不可能です。sp500は、monthあたり1-2シンボルずつ変化します。

8
user788171

残念ながら、無料の過去のティッカーデータを入手するのは困難です。 opentickが死んだ今、私​​は他のプロバイダーを知りません。

以前の生涯では、自動取引システムを備えたヘッジファンドで働いていましたが、履歴データを多用していました。

ソースにはTickDataを使用しました。彼らの価格は手ごろであり、データには1秒未満の解像度がありました。

7
Alan

Kibot.com から12年間の日中データを購入し、品質にかなり満足しています。

ストレージ要件について:すべての米国株式(8000以上のシンボル)の12年間の1分間のデータは約100GBです。

ティックごとのデータでは、状況はほとんど変わりません。時間と売上のみを記録する場合、米国のすべての株式について月あたり約30GBのデータになります。トランザクションとともに入札/依頼の変更を保存する場合、1か月あたり約150 GBを期待できます。

これがお役に立てば幸いです。他に何かお手伝いできることがあれば教えてください。

6
boe100

here で見つかったソースを追加します。

それはcsv形式の多くの歴史的なストックデータを持ち、彼のホームページによると「カーネギーメロン大学のコンピューターサイエンス部の助教授」であるアンディ・パブロによって収集されました。

6
Noam

現在のMathematicaでは、現在の株価と過去の株価の両方にアクセスすることもできます。そのコピーがある場合は、 http://reference.wolfram.com/mathematica/ref/FinancialData.html を参照してください。

5
Tom Wenseleers

Yahooは予備の無料データを取得する最も簡単なオプションです。 eckesicleの回答で説明されているリンクは、pythonコードで簡単に使用できますが、最初にすべてのティッカーが必要です。この例ではNYSEを使用しますが、これはさまざまな交換にも使用できます。

このwikiページ を使用して、次のスクリプトですべての会社のティッカーをダウンロードしました(私はあまり才能のあるPythonistではありません。このコードがあまり効率的でない場合は申し訳ありません)。

import string
import urllib2
from bs4 import BeautifulSoup

global f

def download_page(url):
    aurl = urllib2.urlopen(url)
    soup = BeautifulSoup(aurl.read())

    print url

    for row in soup('table')[1]('tr'):
        tds = row('td')
        if (len(tds) > 0):
            f.write(tds[1].string + '\n')


f = open('stock_names.txt', 'w')

url_part1 = 'http://en.wikipedia.org/wiki/Companies_listed_on_the_New_York_Stock_Exchange_'
url = url_part1 + '(0-9)'
download_page(url)

for letter in string.uppercase[:26]:
    url_part2 = letter
    url = url_part1 + '(' + letter + ')'

    download_page(url)

f.close()

各ティッカーをダウンロードするために、私は非常によく似た別のスクリプトを使用しました。

import string
import urllib2
from bs4 import BeautifulSoup


global f

url_part1 = 'http://ichart.finance.yahoo.com/table.csv?s='
url_part2 = '&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv'

print "Starting"

f = open('stock_names.txt', 'r')
file_content = f.readlines()
count = 1;
print "About %d tickers will be downloaded" % len(file_content)

for ticker in file_content:
    ticker = ticker.strip()
    url = url_part1 + ticker + url_part2

    try:
        # This will cause exception on a 404
        response = urllib2.urlopen(url)

        print "Downloading ticker %s (%d out of %d)" % (ticker, count, len(file_content))

        count = count + 1
        history_file = open('C:\\Users\\Nitay\\Desktop\\Historical Data\\' + ticker + '.csv', 'w')
        history_file.write(response.read())
        history_file.close()

    except Exception, e:
        pass

f.close()

この方法の主な欠点は、さまざまな企業でさまざまなデータが利用できることです。要求された日付にデータが存在しない企業(新しくリストされている)には、404ページが表示されます。

また、この方法は予備データにのみ適していることに注意してください-アルゴリズムを本当にテストしたい場合は、少額を支払い、CSIDataなどの信頼できるデータサプライヤを使用する必要があります

4
Nitay

Yahooを使用して毎日のデータ(はるかに管理しやすいデータセット)を取得できますが、URLを構造化する必要があります。こちらをご覧ください link 。少ないリクエストを大量に行っているのではなく、大きなリクエストを少なくしています。多くのフリーソフトウェアがこれを使用しているので、彼らはあなたをシャットダウンすべきではありません。

編集: これ やる人、彼のソフトウェアの呼び出しを見ることができます。

4
jimconstable

私はeodData.comを使用します。そのかなりきちんとした価格。 1か月あたり30ドルで、米国のすべての取引所で30日間の1,5および60分のバーが、他のほとんどの取引所で1年間のEODデータが得られます。

3
Dez Udezue

Brownian Motionで偽の株式市場をモデル化してみませんか?

それを行うための豊富なリソース。実装が簡単。

http://introcs.cs.princeton.edu/Java/98simulation/

3
Michael Thamm

私は(引用のために)finance.google.comまたはfinance.yahoo.comをクロールします。

これらは両方とも、歴史的なものを含め、世界中のほとんどの交換でhtmlページを返します。次に、HTMLを解析して必要なものを抽出するだけです。

私は過去にこれをやったことがあり、大成功を収めました。あるいは、Perlの使用を気にしない場合は、CPANにこの作業を行ったモジュールがいくつかあります。つまり、Google/Yahooから引用を抽出します。

詳細については、「 見積履歴 」を参照してください

2
Chaos

私の以前のプロジェクトでは、 EODData から自由にダウンロード可能なデータを使用していました。

1
Shaggy Frog

Mergent Historical Securities Data APIをご覧ください- http://www.mergent.com/servius

1