yahoo-stock-client
Version:
Module to fetch stock information via yahoo's stock api. Returns data in csv format.
135 lines (127 loc) • 3.62 kB
text/coffeescript
formats =
Pricing:
a: 'Ask'
b: 'Bid'
b2: 'Ask (Realtime)'
b3: 'Bid (Realtime)'
p: 'Previous Close'
o: 'Open'
Dividends:
y: 'Dividend Yield'
d: 'Dividend per Share'
r1: 'Dividend Pay Date'
q: 'Ex-Dividend Date'
'Date':
c1: 'Change'
d1: 'Last Trade Date'
c: 'Change & Percent Change'
d2: 'Trade Date'
c6: 'Change (Realtime)'
t1: 'Last Trade Time'
k2: 'Change Percent (Realtime)'
p2: 'Change in Percent'
Averages:
c8: 'After Hours Change (Realtime)'
m5: 'Change From 200 Day Moving Average'
c3: 'Commission'
m6: 'Percent Change From 200 Day Moving Average'
g: 'Day’s Low'
m7: 'Change From 50 Day Moving Average'
h: 'Day’s High'
m8: 'Percent Change From 50 Day Moving Average'
k1: 'Last Trade (Realtime) With Time'
m3: '50 Day Moving Average'
l: 'Last Trade (With Time)'
m4: '200 Day Moving Average'
l1: 'Last Trade (Price Only)'
t8: '1 yr Target Price'
Misc:
w1: 'Day’s Value Change'
g1: 'Holdings Gain Percent'
w4: 'Day’s Value Change (Realtime)'
g3: 'Annualized Gain'
p1: 'Price Paid'
g4: 'Holdings Gain'
m: 'Day’s Range'
g5: 'Holdings Gain Percent (Realtime)'
m2: 'Day’s Range (Realtime)'
g6: 'Holdings Gain (Realtime)'
t7: 'Ticker Trend'
t6: 'Trade Links'
i5: 'Order Book (Realtime)'
l2: 'High Limit'
l3: 'Low Limit'
v1: 'Holdings Value'
v7: 'Holdings Value (Realtime)'
s6: 'Revenue'
'52 Week Pricing':
k: '52 Week High'
j: '52 week Low'
j5: 'Change From 52 Week Low'
k4: 'Change From 52 week High'
j6: 'Percent Change From 52 week Low'
k5: 'Percent Change From 52 week High'
w: '52 week Range'
'Symbol Info':
v: 'More Info'
j1: 'Market Capitalization'
j3: 'Market Cap (Realtime)'
f6: 'Float Shares'
n: 'Name'
n4: 'Notes'
s: 'Symbol'
s1: 'Shares Owned'
x: 'Stock Exchange'
j2: 'Shares Outstanding'
Volume:
v: 'Volume'
a5: 'Ask Size'
b6: 'Bid Size'
k3: 'Last Trade Size'
a2: 'Average Daily Volume'
Ratios:
e: 'Earnings per Share'
e7: 'EPS Estimate Current Year'
e8: 'EPS Estimate Next Year'
e9: 'EPS Estimate Next Quarter'
b4: 'Book Value'
j4: 'EBITDA'
p5: 'Price / Sales'
p6: 'Price / Book'
r: 'P/E Ratio'
r2: 'P/E Ratio (Realtime)'
r5: 'PEG Ratio'
r6: 'Price / EPS Estimate Current Year'
r7: 'Price / EPS Estimate Next Year'
s7: 'Short Ratio'
flatten = (arr) ->
newArr = []
newArr.push(innerVal) for innerVal in val for val in arr
newArr
###
Inversion of the Key Value Map of Formats
Discards the categories
###
invFormats = {}
for cat, category of formats
invFormats[format] = formatSymbol for formatSymbol, format of category
exports.formatsToFormatSymbols = (formats) ->
(invFormats[format] for format in formats)
###
Array of format options supported by Yahoo API
###
exports.Formats = (format for formatSymbol, format of category for categoryIdx, category of formats)
exports.Formats = flatten(exports.Formats)
###
Categories of format options
###
exports.Categories = {'All': exports.Formats}
for categoryKey, category of formats
exports.Categories[categoryKey] = (format for formatSym, format of category)
###
Added category can be used with new client
###
exports.addCategory = (name, formatOptions) ->
throw Error('Name must be a string') if typeof(name) is not 'string'
throw Error('formatOptions must be an Array') if formatOptions not instanceof Array
exports.Categories[name] = formatOptions