Programming performance/TimN Python
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.
- Language: Python
- Skill: Advanced. I've been coding in Python for several years and use it on a regular basis for work and fun. I've written several large programs in Python.
- Time: Less than 30 minutes. I did not keep track of time well and this is just an estimate.
- Notes: The noisy flag can be used to adjust the amount of output.
Code
<code-python>
- !/usr/bin/python
noisy = True
def lines(fn) :
return (l.strip() for l in file(fn))
def fields(fn) :
return (l.split(' ') for l in lines(fn) if l[0] != '#')
def closes(fn) :
return ((fs[0],float(fs[-1])) for fs in fields(fn))
def delta(p, oldp) :
return (p - oldp) / oldp
def strategy(ps) :
cash = 10000.0 held = 0.0 queue = [] p = 0.0 lastp = 1.0 for n,(date,p) in enumerate(ps) : if delta(p, lastp) < -0.03 : # down 3%, buy 10% cost = 0.10 * cash quant = cost / p queue.append((quant, p, n)) cash -= cost held += quant if noisy : print date, "buy %.2f at $%.2f ($%.2f)" % (quant, p, cost) while len(queue) > 0 : # check triggers quant, buyp, n2 = queue[-1] if delta(p, buyp) > 0.06 : # up 6%, sell queue.pop() cost = quant * p cash += cost held -= quant if noisy : print date, "sell %.2f at $%.2f ($%.2f)" % (quant, p, cost) else : break lastp = p if noisy : print queue cash += held * p return cash
- data is stored in reverse order.
series = list(closes('gspc')) series.reverse() val = strategy(series) print '$%.2f' % val </code-python>