私は株式市場シミュレーターを作成しようとしています(おそらく最終的には予測AIに成長します)が、使用するデータを見つけるのに問題があります。過去の株式市場データの(できれば無料の)ソースを探しています。
理想的には、NASDAQとNYSEのすべてのシンボルの価格とボリュームを含む非常にきめの細かい(2番目または1分間隔)データセットです(そして、もし私が冒険するなら他のシンボルも)。誰もがそのような情報のソースを知っていますか?
この質問 が見つかりました。これは、Yahooが履歴データをCSV形式で提供していることを示していますが、リンク先のサイトをざっと調べて取得する方法を見つけることができませんでした。
また、CSVファイルで断片的なデータをダウンロードするという考えも好きではありません。最初の数千件のリクエストの後、Yahooが動揺して私を締め出すと思います。
また、 別の質問 を発見したので、ジャックポットを打つと思いましたが、残念ながらOpenTickサイトはドアを閉めているようです...残念なことに、彼らはまさに私が望んでいたものだと思うので。
また、毎日すべてのシンボルのオープン/クローズ価格とボリュームのデータを使用することもできますが、取得できる場合はすべてのデータを使用したいと思います。他の提案はありますか?
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。
この回答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
あなたが「無料」を望んでいたことは知っていますが、私があなただったら csidata.com から年間約300ドルでデータを取得することを真剣に検討します。
これは、yahooがデータを提供するために使用するものです。
適切なAPIが付属しており、データは(私が知る限り)非常にクリーンです。
購読すると10年の歴史があり、その後は毎晩更新されます。
彼らはまた、あなたのためにスプリットや配当のようなあらゆる厄介なことを処理します。データクリーニングの喜びをまだ発見していない場合、ATS(Automated Trading System)が在庫が本当に安いと初めて考えるまで、これがどれほど必要か気付かないでしょう。 :1気づかなかった。
イントロ:
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
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データポイントになります。
小さいセットから最初に始めたいかもしれませんか?
ナスダックは、各シンボルの10年間の履歴EODデータを提供します
http://www.nasdaq.com/aspx/historical_quotes.aspx?symbol=AAPL&selected=AAPL
このデータをダウンロードするプロセスを自動化できます。
生存バイアスのないデータについて、私が見つけた唯一の信頼できるソースはQuantQuote( http://quantquote.com )
データは、分、秒、またはティックの解像度で提供され、 歴史的な株式データ にリンクされます。
上記のキボットの提案がありました。私は彼らから購入する前に簡単なグーグル検索を行います、あなたはたくさんの投稿を見つけるでしょう このように キボットデータ品質問題についての警告とともに。また、サバイバーシップバイアスのないsp500には14年間で570個のシンボルしかないことを示しています。それはほとんど不可能です。sp500は、monthあたり1-2シンボルずつ変化します。
残念ながら、無料の過去のティッカーデータを入手するのは困難です。 opentickが死んだ今、私は他のプロバイダーを知りません。
以前の生涯では、自動取引システムを備えたヘッジファンドで働いていましたが、履歴データを多用していました。
ソースにはTickDataを使用しました。彼らの価格は手ごろであり、データには1秒未満の解像度がありました。
Kibot.com から12年間の日中データを購入し、品質にかなり満足しています。
ストレージ要件について:すべての米国株式(8000以上のシンボル)の12年間の1分間のデータは約100GBです。
ティックごとのデータでは、状況はほとんど変わりません。時間と売上のみを記録する場合、米国のすべての株式について月あたり約30GBのデータになります。トランザクションとともに入札/依頼の変更を保存する場合、1か月あたり約150 GBを期待できます。
これがお役に立てば幸いです。他に何かお手伝いできることがあれば教えてください。
here で見つかったソースを追加します。
それはcsv形式の多くの歴史的なストックデータを持ち、彼のホームページによると「カーネギーメロン大学のコンピューターサイエンス部の助教授」であるアンディ・パブロによって収集されました。
現在のMathematicaでは、現在の株価と過去の株価の両方にアクセスすることもできます。そのコピーがある場合は、 http://reference.wolfram.com/mathematica/ref/FinancialData.html を参照してください。
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などの信頼できるデータサプライヤを使用する必要があります
私はeodData.comを使用します。そのかなりきちんとした価格。 1か月あたり30ドルで、米国のすべての取引所で30日間の1,5および60分のバーが、他のほとんどの取引所で1年間のEODデータが得られます。
Brownian Motionで偽の株式市場をモデル化してみませんか?
それを行うための豊富なリソース。実装が簡単。
私は(引用のために)finance.google.comまたはfinance.yahoo.comをクロールします。
これらは両方とも、歴史的なものを含め、世界中のほとんどの交換でhtmlページを返します。次に、HTMLを解析して必要なものを抽出するだけです。
私は過去にこれをやったことがあり、大成功を収めました。あるいは、Perlの使用を気にしない場合は、CPANにこの作業を行ったモジュールがいくつかあります。つまり、Google/Yahooから引用を抽出します。
詳細については、「 見積履歴 」を参照してください
私の以前のプロジェクトでは、 EODData から自由にダウンロード可能なデータを使用していました。
Mergent Historical Securities Data APIをご覧ください- http://www.mergent.com/servius