Difference between revisions of "Programming performance/hay.steve Python"

From HaskellWiki
Jump to navigation Jump to search
m (Just some layout tweaks.)
Line 1: Line 1:
* '''Implementation time''': 2 hours.
+
* '''Implementation time''': 1.5 hours.
 
* '''Experience''': 3 days.
 
* '''Experience''': 3 days.
  +
* '''Comments''': I spent most of my time noodling on the syntax of Python and familiarizing myself with the documentation. I also spent some time getting the heap to work instead of taking multiple passes with that data. I originally said it took 2 hours, but I am bringing it down to 1.5 because I was eating dinner while and watching a movie while coding. Also, I came back later and spent a few minutes adding a verbosity feature as suggested in the problem statement.
   
 
=== Code ===
 
=== Code ===
Line 7: Line 8:
 
from heapq import heappush, heappop, nsmallest
 
from heapq import heappush, heappop, nsmallest
   
  +
verbose=False
print "Implementation time: 2 hours. Python experience: 3 days."
 
 
 
filename = "gspc.txt"
 
filename = "gspc.txt"
   
Line 19: Line 19:
 
heappush( days, linelist )
 
heappush( days, linelist )
   
cash = 10000
+
cash = 10000.00
 
 
previousClose = -1.0
 
previousClose = -1.0
 
currentClose = 0.00
 
currentClose = 0
 
   
 
shares = []
 
shares = []
Line 41: Line 39:
 
heappush( shares, (currentClose, numShares) )
 
heappush( shares, (currentClose, numShares) )
 
cash = 0.9 * cash
 
cash = 0.9 * cash
print "On", i, ", bought" , numShares , "shares at" , currentClose , "."
+
if verbose: print "On", i, ", bought" , numShares , "shares at" , currentClose , "."
   
 
else :
 
else :
Line 47: Line 45:
 
sell = heappop( shares )
 
sell = heappop( shares )
 
cash += sell[1] * currentClose
 
cash += sell[1] * currentClose
print "On", i, "sold" , sell[1] , "shares at" , currentClose , "."
+
if verbose: print "On", i, "sold" , sell[1] , "shares at" , currentClose , "."
   
 
previousClose = currentClose
 
previousClose = currentClose
Line 54: Line 52:
 
sell = heappop( shares )
 
sell = heappop( shares )
 
cash += sell[1] * currentClose
 
cash += sell[1] * currentClose
print "Sold" , sell[1] , "shares at" , currentClose , "."
+
if verbose: print "Sold" , sell[1] , "shares at" , currentClose , "."
   
 
print "Beginning balance:", beginningBalance
 
print "Beginning balance:", beginningBalance
 
 
print "Ending balance:", cash
 
print "Ending balance:", cash
 
 
print "Percent Gain:", (cash-beginningBalance)/beginningBalance*100, "%."
 
print "Percent Gain:", (cash-beginningBalance)/beginningBalance*100, "%."
 
</code-python>
 
</code-python>

Revision as of 03:46, 8 March 2007

  • Implementation time: 1.5 hours.
  • Experience: 3 days.
  • Comments: I spent most of my time noodling on the syntax of Python and familiarizing myself with the documentation. I also spent some time getting the heap to work instead of taking multiple passes with that data. I originally said it took 2 hours, but I am bringing it down to 1.5 because I was eating dinner while and watching a movie while coding. Also, I came back later and spent a few minutes adding a verbosity feature as suggested in the problem statement.

Code

<code-python> from heapq import heappush, heappop, nsmallest

verbose=False filename = "gspc.txt"

days = []

for f in open(filename):

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

cash = 10000.00 previousClose = -1.0 currentClose = 0.00

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
                       if verbose: 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
                               if verbose: print "On", i, "sold" , sell[1] , "shares at" , currentClose , "."
       previousClose = currentClose

while shares != []:

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

print "Beginning balance:", beginningBalance print "Ending balance:", cash print "Percent Gain:", (cash-beginningBalance)/beginningBalance*100, "%." </code-python>

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