leread portfolio
use fonestock about half year on ipod, fonestock service is now unavailable so clone yahoo quote service with console AP power by python with ystockquote.py :-D
--------%<------------------------------------------------------
import csv
import os,sys
import string
import ystockquote
"""
* import ystockquote you got following methods
* get_all(symbol)
* get_price(symbol)
* get_change(symbol)
* get_volume(symbol)
* get_avg_daily_volume(symbol)
* get_stock_exchange(symbol)
* get_market_cap(symbol)
* get_book_value(symbol)
* get_ebitda(symbol)
* get_dividend_per_share(symbol)
* get_dividend_yield(symbol)
* get_earnings_per_share(symbol)
* get_52_week_high(symbol)
* get_52_week_low(symbol)
* get_50day_moving_avg(symbol)
* get_200day_moving_avg(symbol)
* get_price_earnings_ratio(symbol)
* get_price_earnings_growth_ratio(symbol)
* get_price_sales_ratio(symbol)
* get_price_book_ratio(symbol)
* get_short_ratio(symbol)
* get_historical_prices(symbol, start_yyyymmdd, end_yyyymmdd)
stock.csv format as which locate in env(HOME)/stock.csv
--------------------------------------------------------------------
0 1 2 3 4 5 6
Symbol Name qty price inDate nowPrice changePrice
-------%<-----------------------------------------------------------
2303.TW, UMC 10, 15.85, 20090929, XXX, XXX
-------%<-----------------------------------------------------------
leread use ystockquote.py which download from http://www.goldb.org/ystockquote.html
also use yahooquote from sudo apt-get install libfinance-yahooquote-perl
"""
qlist = []
def showForm1(alist,showlevel):
AmountBuy = (float(alist[2])*float(alist[3])) / 10
AmountNow = (float(alist[2])*float(alist[5])) / 10
Aearn = AmountNow - AmountBuy
total = 0
if (showlevel==0):
if (Aearn > 0):
print "|%s \033[94m%8s\033[0m %4s %4s %9s %6s (%7.2f)(%5.1f)\033[31m[%6.2f%%]\033[0m|" %(alist[0],alist[1],alist[2],alist[3],alist[4],alist[5],AmountNow, Aearn, (Aearn / AmountBuy)*100)
else:
print "|%s \033[94m%8s\033[0m %4s %4s %9s %6s (%7.2f)(%5.1f)\033[32m[%6.2f%%]\033[0m|" %(alist[0],alist[1],alist[2],alist[3],alist[4],alist[5],AmountNow, Aearn, (Aearn / AmountBuy)*100)
elif (showlevel==1):
if (Aearn > 0):
print "|%s %4s %4s %9s %6s (%7.2f)(%5.1f)\033[31m[%6.2f%%]\033[0m|" %(alist[0],alist[2],alist[3],alist[4],alist[5],AmountNow, Aearn, (Aearn / AmountBuy)*100)
else:
print "|%s %4s %4s %9s %6s (%7.2f)(%5.1f)\033[32m[%6.2f%%]\033[0m|" %(alist[0],alist[2],alist[3],alist[4],alist[5],AmountNow, Aearn, (Aearn / AmountBuy)*100)
elif (showlevel==2):
if (Aearn > 0):
print "|%s %5s %5s (%5.1f)\033[31m[%6.2f%%]\033[0m|" %(alist[0],alist[5],alist[6], Aearn, (Aearn / AmountBuy)*100)
else:
print "|%s %5s %5s (%5.1f)\033[32m[%6.2f%%]\033[0m|" %(alist[0],alist[5],alist[6], Aearn, (Aearn / AmountBuy)*100)
elif (showlevel==3):
total = float(alist[6])*float(alist[2])
if (Aearn > 0):
print "|%s %5s %5s (%5.1f)\033[31m[%6.2f%%]\033[0m[%6.2f]|" %(alist[0],alist[5],alist[6], Aearn, (Aearn / AmountBuy)*100,total)
else:
print "|%s %5s %5s (%5.1f)\033[32m[%6.2f%%]\033[0m[%6.2f]|" %(alist[0],alist[5],alist[6], Aearn, (Aearn / AmountBuy)*100,total)
return total
def readCSV(showlevel):
if os.access(os.environ['HOME']+'/stock.csv',os.R_OK):
reader = csv.reader(open(os.environ['HOME']+'/stock.csv'))
for row in reader:
qlist.append(row)
os.system("clear")
Atotal = 0
if showlevel == 3:
print "+--------------------------------------------+"
for i in range (0, len(qlist)):
tmp = ystockquote.get_all(qlist[i][0])
dat = "%s|%s|%6s|%6s|%7s|%6s|" %(qlist[i][0],tmp['stock_exchange'],tmp['price'],tmp['change'],tmp['52_week_high'],tmp['52_week_low'])
qlist[i][5]=tmp['price']
qlist[i][6]=tmp['change']
total = showForm1(qlist[i],showlevel)
Atotal = Atotal + total
if showlevel == 3:
print "+--------------------------------------------+"
print "| Total = %8d |" %(Atotal*1000)
print "+--------------------------------------------+"
else:
print "stock.csv not founded...."
def readQuick():
if os.access(os.environ['HOME']+'/stock.csv',os.R_OK):
reader = csv.reader(open(os.environ['HOME']+'/stock.csv'))
for row in reader:
qlist.append(row)
os.system("clear")
print " Symbol| Price| Change|52W-High| 52W-Low|"
print "-------+-------+-------+--------+--------+"
for i in range (0, len(qlist)):
tmp = ystockquote.get_all(qlist[i][0])
dat = "%s|%7s|%7s|%8s|%8s|" %(qlist[i][0],tmp['price'],tmp['change'],tmp['52_week_high'],tmp['52_week_low'])
print dat
print "-------+-------+-------+--------+--------+"
else:
print "stock.csv not founded...."
print "stock.csv format show as ..."
print "2303.TW, UMC,10,15.85,20090929,XXX,XXX"
def checkSpecialTW(vv):
if vv[-3:] == ".TW":
cmd = "yahooquote -verbose %s" %(vv)
os.system(cmd)
return 1
return 0
def usage(vv):
if checkSpecialTW(vv) == 0:
print "usage: leread "
print " -0 showall "
print " -1 show less ..."
print " -2 .............."
print " -q quick show ..."
print " nnnn.TW yahooquote verbose mode"
def main(*argv):
from getopt import getopt, GetoptError
try:
(opts, args) = getopt(argv[1:],\
'0123456qt',\
[])
except GetoptError, e:
print e
print __doc__
return 1
for o, a in opts:
if o in ('-0', 'showall'):
readCSV(0)
return 0
elif o in ('-1'):
readCSV(1)
return 0
elif o in ('-2'):
readCSV(2)
return 0
elif o in ('-t'):
readCSV(3)
return 0
elif o in ('-q'):
readQuick()
return 0
if len(args)>0:
usage(argv[1])
else:
usage("NA")
return 1
if __name__ == '__main__':
sys.exit(main(*sys.argv))
--------%<------------------------------------------------------
Labels: leread, lestock, python, yahooquote