Reputation: 1
I keep getting a 'ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().' error in my Python script.
Here's my code for reference (without the different imports and non-relevant code snippets):
for i in range(1, len(data)):
position_size = portfolio_value.iloc[i-1] * position_size_pct
# Check if the 50EMA crossed over the 200SMA
if (in_position == 0) & (ema_50.iloc[i] > sma_200.iloc[i]) & (ema_50.iloc[i-1] <= sma_200.iloc[i-1]):
in_position = 1
pos_type = 'LONG'
entry_price = data.iloc[i].mean()
stop_loss = entry_price * (1 - stop_loss_pct)
take_profit = entry_price * (1 + take_profit_pct)
num_shares = position_size / entry_price
elif (in_position == 0) & (ema_50.iloc[i] < sma_200.iloc[i]) & (ema_50.iloc[i-1] >= sma_200.iloc[i-1]):
in_position = 1
pos_type = 'SHORT'
entry_price = data.iloc[i].mean()
stop_loss = entry_price * (1 + stop_loss_pct)
take_profit = entry_price * (1 - take_profit_pct)
num_shares = position_size / entry_price
else:
continue
# Check if the position should be closed
if (in_position == 1) & (pos_type == 'LONG') & ((data.iloc[i].min() <= stop_loss) | (data.iloc[i].max() >= take_profit)):
in_position = 0
exit_price = data.iloc[i].mean()
portfolio_value.iloc[i] = portfolio_value.iloc[i-1] + num_shares * (exit_price - entry_price)
elif (in_position == 1) & (pos_type == 'SHORT') & ((data.iloc[i].min() >= stop_loss) | (data.iloc[i].max() <= take_profit)):
in_position = 0
exit_price = data.iloc[i].mean()
portfolio_value.iloc[i] = portfolio_value.iloc[i-1] + num_shares * (entry_price - exit_price)
else:
continue
Here's the full error message that I get:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-48-416e46370df4> in <module>
4
5 # Check if the 50EMA crossed over the 200SMA
----> 6 if (in_position == 0) & (ema_50.iloc[i] > sma_200.iloc[i]) & (ema_50.iloc[i-1] <= sma_200.iloc[i-1]):
7 in_position = 1
8 pos_type = 'LONG'
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in __nonzero__(self)
1327
1328 def __nonzero__(self):
-> 1329 raise ValueError(
1330 f"The truth value of a {type(self).__name__} is ambiguous. "
1331 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
As I am working with multiple conditions in Pandas, I know that I am supposed to use &
instead of AND
and |
instead of OR
but I keep getting the same error and can't find a way to fix it. I checked multiple Stack Overflow posts on the same error, but couldn't find something that works for me.
Thanks for your help
Upvotes: 0
Views: 46