Siendo la pregunta etiquetada como python
y dado que busco pequeños retos para mi plataforma, backtrader
Aproveché la oportunidad para ver lo fácil que sería hacer esto con la plataforma.
Documentado en: http://www.backtrader.com/posts/2016-08-15-stock-screening/stock-screening/
El código principal en este caso es un analizador que busca los activos que están por encima de la media móvil de 10 días (ejemplo del OP). El código del analizador:
class Screener_SMA(bt.Analyzer):
params = dict(period=10)
def start(self):
self.smas = {data: bt.indicators.SMA(data, period=self.p.period)
for data in self.datas}
def stop(self):
self.rets['over'] = list()
self.rets['under'] = list()
for data, sma in self.smas.items():
node = data._name, data.close[0], sma[0]
if data > sma: # if data.close[0] > sma[0]
self.rets['over'].append(node)
else:
self.rets['under'].append(node)
Se puede utilizar directamente con el ejecutable incorporado btrun
(creado por setup.py
/ pip
) o gestionado con un script hecho a mano. Un ejemplo de ejecución con btrun
:
btrun --format yahoo --data YHOO --data IBM --data NVDA --data TSLA --data ORCL --data AAPL --fromdate 2016-07-15 --todate 2016-08-13 --analyzer st-screener:Screener_SMA --cerebro runonce=0 --writer --nostdstats
Sí: los precios se descargan directamente de Yahoo con --format yahoo
.
Que hoy mismo (antes de que el mercado volviera a cerrar) ha cumplido:
- Analysis:
- over: ('ORCL', 41.09, 41.032), ('IBM', 161.95, 161.221), ('YHOO', 42.94, 39.629000000000005), ('AAPL', 108.18, 106.926), ('NVDA', 63.04, 58.327)
- under: ('TSLA', 224.91, 228.423)
Estoy seguro de que se puede hacer lo mismo con otras plataformas python como pyAlgoTrade
, zipline
etc. Una lista de plataformas de código abierto python conocidas (por mí) se puede encontrar en el README de backtrader
en la primera página del repositorio: https://github.com/mementum/backtrader
Descargo de responsabilidad : si no es obvio, soy el autor de backtrader