In [11]:
from datetime import datetime
# Movimiento de trading
class MovimientoTrading:
num_acciones = ''
emisora = ''
fecha = ''
# Estrategia
# Comprar ALSEA, vender todas en dos años
# Comprar KOF mantener
# Comprar 500 GFNORTE vender sólo 50 en un año
movimientos = []
movimiento = MovimientoTrading()
movimiento.num_acciones = 500
movimiento.emisora = 'ALSEA.MX'
movimiento.fecha = datetime(2010, 3, 1)
movimientos.append(movimiento)
movimiento = MovimientoTrading()
movimiento.num_acciones = -500
movimiento.emisora = 'ALSEA.MX'
movimiento.fecha = datetime(2013, 3, 1)
movimientos.append(movimiento)
movimiento = MovimientoTrading()
movimiento.num_acciones = 500
movimiento.emisora = 'KOFL.MX'
movimiento.fecha = datetime(2011, 2, 5)
movimientos.append(movimiento)
movimiento = MovimientoTrading()
movimiento.num_acciones = 500
movimiento.emisora = 'GFNORTEO.MX'
movimiento.fecha = datetime(2011, 8, 8)
movimientos.append(movimiento)
movimiento = MovimientoTrading()
movimiento.num_acciones = -50
movimiento.emisora = 'GFNORTEO.MX'
movimiento.fecha = datetime(2012, 8, 8)
movimientos.append(movimiento)
for movimiento in movimientos:
print movimiento.emisora
print '--------'
print movimiento.num_acciones
print movimiento.fecha
print '\n'
In [18]:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
import zipline as zp
class CompraVenta(zp.TradingAlgorithm):
def initialize(self, movimientos):
self.movimientos = movimientos
fechas = []
emisoras = set()
for movimiento in movimientos:
fechas.append(movimiento.fecha)
emisoras.add(movimiento.emisora)
emisoras = list(emisoras)
fecha_inicio = min(fechas)
fecha_fin = max(fechas)
self.data = zp.utils.factory.load_from_yahoo(stocks=emisoras, indexes={}, start=fecha_inicio, end=fecha_fin, adjusted=False)
def handle_data(self, data):
for movimiento in movimientos:
clave_emisora = movimiento.emisora
fecha_movimiento = movimiento.fecha
fecha = data[clave_emisora].dt
delta = fecha_movimiento - fecha.replace(tzinfo=None)
num_acciones = movimiento.num_acciones
if(delta.days == 0):
self.order(clave_emisora, num_acciones)
trading = CompraVenta(movimientos)
data = trading.data
perf = trading.run(data)
print perf['capital_used'].head()
print perf['starting_cash'].head()
print perf['ending_cash'].head()
print perf['returns'].head()
In [ ]: