It's my first time on Quantopian, and my partner and I are trying to implement a simple SAR indicator based algorithm for practice. Our methodology is as follows:
def handle_data(context, data): # Implement your algorithm logic here. # data[sid(X)] holds the trade event data for that security. # context.portfolio holds the current portfolio state. # Place orders with the order(SID, amount) method. # TODO: implement your own logic here. # Configuring SAR indicator conditions high = history(30, '1d', 'high') low = history(30, '1d', 'low') optInAcceleration = .01 optInMaximum = .20 # Initializing the initial portfolio conditions current_positions = context.portfolio.positions for stock in data: # Initializing necessary values for each iteration max_positions = context.max_universe cash = context.portfolio.cash position_allocation = cash / max_positions current_position_value = context.portfolio.positions[stock].amount stock_price = data[stock].price SAR = talib.SAR(high[stock], low[stock], optInAcceleration, optInMaximum) is_current_position = current_position_value != 0 bullish_sar = SAR < stock_price bearish_sar = SAR > stock_price if bullish_sar: if is_current_position: order(stock, -1 * context.portfolio.positions[stock].amount) else: order_value(stock, position_allocation) elif bearish_sar: if is_current_position: order_target_percent(stock, 0) else: order_value(stock, -1 * position_allocation)
1) If SAR is bullish, AND there is no current position in the stock, go long.
2) If SAR is bullish, and there IS a position in the stock, sell to close.
1) If SAR is bearish, AND there is no current position in the stock, go short.
2) If SAR Is bearish, and there IS a position in the stock, buy to close.
The problem is, SAR doesn't seem to be behaving properly and neither is our algorithm. We keep getting compounding amounts of our position, and portfolio cash doesn't seem to be updating. The backtests reflect an exponential degree of capital allocated to one position.
Any help is appreciated! Ask any questions, I'd glad to clarify various things.