def ret_pred(x, y): btc = [5.0] + [np.nan] * (len(dff)-1) cash = [0] + [np.nan] * (len(dff)-1) prediction = list(dff['Predictions'])[1:] + [np.nan] price = list(dff['Price']) for i in range(1, len(dff)-1): for j in range(0, 2): if prediction[i] > x/100.0: if cash[i] > price[i]: btc[i] = btc[i-1] + 1.0 cash[i] = cash[i-1] - price[i] elif price[i] > cash[i-1] > 0.0: btc[i] = btc[i-1] + (cash[i-1] / price[i]) cash[i] = 0.0 else: btc[i] = btc[i - 1] cash[i] = cash[i - 1] elif -y/100.0 > prediction[i]: if btc[i-1] >= 1.0: btc[i] = btc[i-1] - 1.0 cash[i] = cash[i-1] + price[i] elif 1.0 > btc[i-1] > 0.0: btc[i] = 0.0 cash[i] = cash[i-1] + (price[i] * btc[i-1]) else: btc[i] = btc[i - 1] cash[i] = cash[i - 1] else: btc[i] = btc[i-1] cash[i] = cash[i-1] dff['BTC'] = btc dff['Cash'] = cash dff['Strategy'] = dff['Price'] * dff['BTC'] + dff['Cash'] dff['BuyNHold'] = 5.0 * dff['Price'] dff['StVSBnH_N'] = dff['Strategy'] - dff['BuyNHold'] dff['StVSBnH_P'] = ((dff['Strategy'] - dff['BuyNHold']) / dff['BuyNHold']) * 100.0 dff['BnH_Vol'] = (dff['BuyNHold'].pct_change() * 100.0).rolling(30).std(ddof=0) dff['Strategy_Vol'] = (dff['Strategy'].pct_change() * 100.0).rolling(30).std(ddof=0) print "Strategy vs BuyNHold:", (dff['Strategy'][len(dff)-2] - dff['BuyNHold'][len(dff)-2])