Не используйте строки c, используйте std :: string. Не используйте массивы, используйте std :: array или std :: vector или аналогичный контейнер. Это наверняка решит вашу проблему.
class SportShoe {
private:
struct nodeSport {
int ShoeIDList;
std::string BrandShoeList;
float PriceShoeList;
nodeSport *last;
};
nodeSport *first = NULL;
struct Shoe {
int ShoeID;
std::string BrandShoe;
float PriceShoe;
};
std::array<Shoe, SIZE> MySepatu;
public:
void AddSportShoe();
};
void SportShoe::AddSportShoe() {
std::array<SportShoe, SIZE> MySepatu;
int numOfShoe = 0;
nodeSport *tempShoe1;
while (numOfShoe < SIZE){
cout << "Please enter the Shoe ID : (eg. 23210) " << endl;
cin >> SportShoe::MySepatu[numOfShoe].ShoeID;
cout << "Please enter the Shoe Brand: (eg. Adidas) " << endl;
cin.sync();
std::getline(cin, SportShoe::MySepatu[numOfShoe].BrandShoe);
cout << "Please enter the price of the Shoe : (eg. RM123.22) " << endl;
cin >> SportShoe::MySepatu[numOfShoe].PriceShoe;
cout << endl;
//passing the value from 'MySepatu' to 'tempShoe'
SportShoe::MySepatu[numOfShoe].ShoeID = tempShoe1->ShoeIDList;
SportShoe::MySepatu[numOfShoe].BrandShoe = tempShoe1->BrandShoeList;
SportShoe::MySepatu[numOfShoe].PriceShoe = tempShoe1->PriceShoeList;
//i do some dummy to see what stored in tempShoe1
cout << "ID =>> " << tempShoe1->ShoeIDList << endl;
cout << "Brand =>> " << tempShoe1->BrandShoeList << endl;
cout << "Price =>> " << tempShoe1->PriceShoeList << endl;
}
while (numOfShoe >= SIZE-1){
cout << ">> List is already full !! <<";
system("PAUSE");
MenuSportShoe();
}
}
Вы можете использовать Yahoo для получения ежедневных данных (гораздо более управляемый набор данных), но вы должны структурировать URL-адреса. Смотрите эту ссылку . Вы не делаете много маленьких запросов, вы делаете меньше больших запросов. Многие бесплатные программы используют это, чтобы они не закрывали вас.
РЕДАКТИРОВАТЬ: Этот парень делает это, может быть, вы можете посмотреть на звонки, которые делает его программное обеспечение.
К сожалению, бесплатные исторические данные о тикерах трудно найти. Теперь, когда opentick мертв, я не знаю ни одного другого провайдера.
В прошлой жизни я работал в хедж-фонде, который имел автоматизированную торговую систему, и мы широко использовали исторические данные.
Мы использовали TickData для нашего источника. Их цены были разумными, и данные имели второе разрешение.
A набор данных по каждому символу на NASDAQ и NYSE за второй или минутный интервал будет огромным .
Предположим, что на обеих биржах есть в общей сложности 4000 компаний (это, вероятно, на очень низкая сторона, поскольку на NASDAQ есть более 3200 компаний . Для данных с вторым интервалом, если предположить, что в день торгуют 6,5 часов, это даст вам 23400 точек данных в день на компанию, или около 93 600 000 точек данных в целом за этот один день. Предполагая 200 торговых дней в году, это около 18 720 000,
Я бы просканировал financial.google.com (цитаты) или financial.yahoo.com.
Оба они будут возвращать html-страницы для большинства бирж по всему миру, включая исторические. Затем остается лишь разобрать HTML, чтобы извлечь то, что вам нужно.
Я делал это в прошлом с большим успехом. В качестве альтернативы, если вы не против использования Perl - на CPAN есть несколько модулей, которые проделали эту работу за вас, то есть извлекли цитаты из Google / Yahoo.
Подробнее см. История цитат
Я знаю, что вы хотели "бесплатно", но я бы серьезно подумал о получении данных с csidata.com примерно за 300 долларов в год, если бы я был вами.
Это то, что yahoo использует для предоставления своих данных.
Он поставляется с приличным API, и данные (насколько я могу судить) очень чистые.
Вы получаете 10-летнюю историю, когда подписываетесь, а затем потом - еженощные обновления.
Они также позаботятся о всевозможных неприятных вещах, таких как сплиты и дивиденды. Если вы еще не открыли для себя радость очистки данных, вы не поймете, насколько она вам нужна, пока в первый раз ваша ATS (автоматизированная торговая система) не решит, что некоторые акции действительно очень дешевы, только потому, что они разделились на 2 : 1 и вы не заметили.
Мой бывший проект собирался использовать бесплатно загружаемые данные из EODData .
Мы приобрели внутридневные данные за 12 лет у Kibot.com и вполне довольны качеством.
Что касается требований к хранению: 12 лет 1-минутных данных для всех акций США (более 8000 символов) составляет около 100 ГБ.
При использовании данных по тикам ситуация мало чем отличается. Если фиксировать только время и продажи, то это будет около 30 ГБ данных в месяц для всех акций США. Если вы хотите хранить изменения бид / аск вместе со сделками, вы можете ожидать около 150 ГБ в месяц.
Надеюсь, это поможет. Пожалуйста, дайте мне знать, если я могу ещё чем-нибудь помочь.
.Этот ответ больше не точен, поскольку подача Yahoo перестала существовать
, используя подход CSV Yahoo, вы также можете получить исторические данные! Вы можете обратить вспять инженер следующего примера:
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
Введение:
На Yahoo вы можете получить исторические цены EOD (конец дня) или цены в реальном времени. Цены на EOD удивительно просто скачать. См. мой блог для объяснения того, как получить данные, и примеров кода C #.
Я занимаюсь написанием «механизма» подачи данных в реальном времени, который загружает и хранит цены в реальном времени в базе данных. Первоначально движок сможет загружать исторические цены из 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();
}
}
База данных:
На стороне базы данных я использую подключение OleDb
к CSV файл для заполнения DataSet
, а затем я обновляю свою фактическую базу данных с помощью DataSet
, это в основном позволяет сопоставить все столбцы из CSV-файла, возвращенного Yahoo, непосредственно в вашу базу данных (если ваша база данных не поддерживает пакетную вставку данных CSV, например SQLite).В противном случае вставка данных является однострочным ... просто пакетно вставьте CSV в свою базу данных.
Подробнее о форматировании URL-адреса можно прочитать здесь: http://www.gummy-stuff.org/Yahoo-data.htm