Hey, so I am having trouble with finishing the, for loop in the algorithm. Also the log.info.
The basic premise of the script it to have an evaluated price for a company and if it goes above that it shorts the company, and if it goes below it longs.
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.factors import AverageDollarVolume
from quantopian.pipeline.filters.morningstar import Q1500US
import pandas as pd
import numpy as np
security_list = [sid(5061), sid(24), sid(9883), sid(19725), sid(16649)]
def initialize(context):
set_commission(commission.PerShare(cost=0.000, min_trade_cost=0))
context.security_list = [sid(5061), sid(24), sid(9883), sid(19725), sid(16649)]
"""
msf = sid(5061)
AAPL = sid(24)
ATVI = sid(9883)
NVDA = sid(19725)
LOGI = sid(16649)
"""
schedule_function(rebalance,
date_rules.week_start(days_offset=0),
time_rules.market_open())
schedule_function(record_vars,
date_rules.every_day(),
time_rules.market_close())
def compute_weights(context, data):
"""
hist = data.history(sid(24), 'price', 10, '1d')
esta = context.security_list = [sid(5061), sid(24), sid(9883), sid(19725), sid(16649)]
"""
context.security_list[0] = '70'
context.security_list[1] = '150'
context.security_list[2] = '60'
context.security_list[3] = '150'
context.security_list[4] = '36'
weights = 150 - data.current(sid(24), 'price')
longp = weights > 0
shortp = weights < 0
'''
normalized_weghts = raw_weights / raw_weights.abs().sum()
short = data.current(context.security_list, 'price') > context.security_list
longp = data.current('price').security_list < context.security_list
short = normalized_weghts.index[normalized_weghts > context.security_list]
longp = normalized_weghts.index[normalized_weghts < context.security_list]
'''
"""
log.info("This week's longs: " + ", ".join([lon.symbol for lon in longp]))
log.info("This week's shorts: " + ", ".join([short.symbol for short in shortp]))
price_10 = hist[-10:]
price_30 = hist
sma_10 = price_10.mean()
sma_30 = price_30.mean()
raw_weights = (sma_30 - sma_10) / sma_30
normalized_weights = raw_weights / raw_weights.abs().sum()
short_secs = normalized_weights.index[normalized_weights < 0]
long_secs = normalized_weights.index[normalized_weights > 0]
log.info("This week's longs: " + ", ".join([long_.symbol for long_ in long_secs]))
log.info("This week's shorts: " + ", ".join([short_.symbol for short_ in short_secs]))
return normalized_weights
"""
return longp , shortp
def rebalance(context, data):
compute_weights(context, data)
"""
This function is called according to our schedule_function settings and calls
order_target_percent() on every security in weights.
"""
"""
weights = compute_weights(context, data)
for security in context.security_list:
if data.can_trade(security.sid):
order_target_percent(security, weights[security])
"""
for security in context.security_list:
if data.can_trade(security): #and compute_weights(security, security_list.index) > 0: <_______________________ problem
order_target_percent(context.security_list.index, 0.05)
order_target_percent(context.shortp.sid, -0.05)
"""
for security in context.security_list:
if data.current('price').security_list < security.security_list and data.can_trade(security):
order_target_percent(security, 0.05)
elif data.current('price') > context.security_list and data.can_trade(security):
order_target_percent(security, -0.05)
"""
def record_vars(context, data):
longs = shorts = 0
for position in context.portfolio.positions.itervalues():
if position.amount > 0:
longs += 1
elif position.amount < 0:
shorts += 1
# Record our variables.
record(leverage=context.account.leverage, long_count=longs, short_count=shorts)