Wrapping up
Here is the algorithm for calculating the DMAC in pseudocode:
Calculate the short term and long term moving averages.
If the short term crosses the long term from bottom to top, then buy.
If the long term crosses the short term from bottom to top, then sell.
Otherwise do nothing.
This is the code we started with, which passed all the tests:
def get_crossover_signal(self, on_date):
cpl = []
for i in range(11):
chk = on_date.date() - timedelta(i)
for price_event in reversed(self.price_history):
if price_event.timestamp.date() > chk:
pass
if price_event.timestamp.date() == chk:
cpl.insert(0, price_event)
break
if price_event.timestamp.date() < chk:
cpl.insert(0, price_event)
break
# Return NEUTRAL signal
if len(cpl) < 11:
return 0
# BUY signal
if sum([update.price for update in cpl[-11:-1]])/10 \
>...