I didn't debug the code but you can do something like this:
def handle_data(context, data):
# get today open and current price
open_history = history(bar_count=1, frequency='1d', field='open_price')
close_history = history(bar_count=1, frequency='1d', field='close_price')
# calculate daily returns up to this minute
returns_pct = {sid : ((close_history[sid][-1] - open_history[sid][-1]) / open_history[sid][-1]) for sid in data if (sid in close_history and sid in open_history) }
returns_pct = pd.Series(returns_pct)
# get top gainers / losers
top_gainers = returns_pct.order(ascending=False).iloc[:10]
top_losers = returns_pct.order(ascending=True).iloc[:10]
# and print them
print 'Top gainers'
for sid in top_gainers.index:
print '{sid} gain={gain} % open price {open} close price {close}'.format(sid=sid, gain=top_gainers[sid]*100, open=open_history[sid][-1], close=close_history[sid][-1])
print 'Top losers'
for sid in top_losers.index:
print '{sid} gain={gain} % open price {open} close price {close}'.format(sid=sid, gain=top_losers[sid]*100, open=open_history[sid][-1], close=close_history[sid][-1])
Edit: updated with a meaningful algorithm