# Programming performance/TimN Python

• 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>

1. !/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 != '#')
```

def closes(fn) :

```   return ((fs,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
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

```
1. data is stored in reverse order.

series = list(closes('gspc')) series.reverse() val = strategy(series) print '\$%.2f' % val </code-python>