Programming performance/hay.steve Python

From HaskellWiki
< Programming performance
Revision as of 01:55, 8 March 2007 by Hay.steve (talk | contribs) (Implementation time: 2 hours. Python experience: 3 days.)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

from heapq import heappush, heappop, nsmallest

print "Implementation time: 2 hours. Python experience: 3 days."

filename = "gspc.txt"

days = []

for f in open(filename):

       if f[0] == '#':
               continue
       linelist = f.split(' ')
       heappush( days, linelist )

cash = 10000

previousClose = -1.0

currentClose = 0

shares = []

beginningBalance = cash

print "Beginning Balance:", cash while days != []:

       day = heappop( days )
       i = day[0]
       currentClose = float( day[4] )
       if previousClose != -1.0:
               percentGain = ( currentClose - previousClose ) / previousClose
               if percentGain < -0.03:
                       numShares = 0.1 * cash / currentClose
                       heappush( shares, (currentClose, numShares) )
                       cash = 0.9 * cash
                       print "On", i, ", bought" , numShares , "shares at" , currentClose , "."
               else :
                       while shares != [] and nsmallest(1, shares)[0][0] <= currentClose / 1.06:
                               sell = heappop( shares )
                               cash += sell[1] * currentClose
                               print "On", i, "sold" , sell[1] , "shares at" , currentClose , "."
       previousClose = currentClose

while shares != []:

       sell = heappop( shares )
       cash += sell[1] * currentClose
       print "Sold" , sell[1] , "shares at" , currentClose , "."

print "Beginning balance:", beginningBalance

print "Ending balance:", cash

print "Percent Gain:", (cash-beginningBalance)/beginningBalance*100, "%."

--Hay.steve 01:53, 8 March 2007 (UTC)