def initialize ( context ) :
set_universe ( universe.DollarVolumeUniverse ( floor_percentile = 98 , ceiling_percentile = 100 ) )
def handle_data(context, data) :
uppers = {}
downers = {}
cash = context.portfolio.cash
exchange_time = get_datetime ( )
price_history = history ( bar_count = 30 , frequency = '1d' , field = 'price' )
if exchange_time.hour == 3 and exchange_time.minute == 40:
stocks_owned=context.portfolio.positions
list_of_SIDS=stocks_owned.keys()
for items in list_of_SIDS:
order_target(items, 0)
if exchange_time.hour == 3 and exchange_time.minute == 45:
for stock in data:
LCP_P = history(bar_count=2, frequency='1d', field='close_price')
curr_price = LCP_P.iloc[1]
last_closing = LCP_P.iloc[0]
pct_change = LCP_P.iloc[[1,0]].pct_change()
if pct_change >= 0:
if pct_change <=9:
uppers[stock]=pct_change
else :
pass
elif pct_change <= 0:
if pct_change >= -9:
downers[stock]=pct_change
else :
pass
'''sorted_downers = [ (k, v) for v, k in sorted( [ (v, k) for k, v in downers.items()])]
sorted_uppers = [ (k, v) for v, k in sorted ( [ (v, k) for k, v in uppers.items()], reverse = True )]'''
#possible way of
sorted_downers=sorted(downers.items(), key=lambda x:x[1])
sorted_uppers=sorted(downers.items(), key=lambda x:x[1], reverse=True)
cut_sorted_downers=sorted_downers[:10]
cut_sorted_uppers=sorted_uppers[:10]
count_downers=len(cut_sorted_downers)
count_uppers=len(cut_sorted_uppers)
CP_uppers=(cash/2)/count_uppers
CP_downers=(cash/2)/count_downers
for item in cut_sorted_downers:
stock=item[0]
order_value(stock, CP_downers)
for item in cut_sorted_uppers:
stock=item[0]
order_value(stock, (0-1)*(CP_uppers))