I have made a recent algorithm that is generating negative returns but my overall cash gain is high. Can anyone explain this?
def initialize(context):
#set_slippage()
#Come back to this later
#set_slippage(MyCustomSlippage(slippage-param))
#window = 255
#refresh_rate = 10
context.jblu = sid(23599)
context.dal = sid(33729)
#context.aal = sid(45971)
context.luv = sid(4589)
context.ual = sid(28051)
context.current_stock = sid(23599)
#context.current_stock = sid(33729)
#context.current_stock = sid(45971)
#context.current_stock = sid(4589)
#context.current_stock = sid(28051)
#context.orders_placed = 0
context.max_notional = 100000.1
context.min_notional = -100000.0
def handle_data(context, data):
record(Cash=context.portfolio.cash)
#record(amount=context.portfolio.amount)
#^This is incorrect in its current state - try to illustrate number of shares held for current sid
pavg = ((((data[context.jblu].close_price)-(data[context.jblu].open_price))/(data[context.jblu].open_price))*100)
pavg2 = ((((data[context.dal].close_price)-(data[context.dal].open_price))/(data[context.dal].open_price))*100)
pavg3 = ((((data[context.luv].close_price)-(data[context.luv].open_price))/(data[context.luv].open_price))*100)
pavg4 = ((((data[context.ual].close_price)-(data[context.ual].open_price))/(data[context.ual].open_price))*100)
price = ((((data[context.jblu].close_price)-(data[context.jblu].open_price))/data[context.jblu].open_price)*100)
#price2 = data[context.dal].price
#price3 = data[context.aal].price
#price3 = data[context.luv].price
#price4 = data[context.ual].price
average = ((pavg * pavg2 * pavg3 * pavg4)/4)
#This is the average of all four stocks whcih JetBlue will be bought in comparison to
#returns = data[context.jblu].returns
notional = context.portfolio.positions[context.jblu].amount * price
message = average
log.info(message)
message = price
log.info(message)
if price < (average) and notional > context.min_notional:
#message = context.portfolio.positions[context.jblu].amount
#log.info(message)
#message = context.portfolio.cash
#log.info(message)
message = 'Buy'
log.info(message)
order(context.jblu,+1)
elif price >= average and context.portfolio.positions[context.jblu].amount > 1 and notional < context.max_notional:
#message = context.portfolio.positions[context.jblu].amount
#log.info(message)
#message = context.portfolio.cash
#log.info(message)
message = 'Sell'
log.info(message)
order_target_percent(context.jblu,-1)
return()
#if context.orders_placed < 1:
# order(context.current_stock, -1000)
# context_orders_placed=1