diff --git a/X-post4/x_post4.ipynb b/X-post4/x_post4.ipynb index 737afe1..fdd9aa6 100644 --- a/X-post4/x_post4.ipynb +++ b/X-post4/x_post4.ipynb @@ -63,44 +63,17 @@ " data['Lower'] = beta0 + beta1 * data['Time'] - t_crit * np.sqrt(np.mean((data[symbol] - data['Fitted']) ** 2) * (1 + 1 / len(data) + (data['Time'] - data['Time'].mean()) ** 2 / ((data['Time'] - data['Time'].mean()) ** 2).sum()))\n", " data['Upper'] = beta0 + beta1 * data['Time'] + t_crit * np.sqrt(np.mean((data[symbol] - data['Fitted']) ** 2) * (1 + 1 / len(data) + (data['Time'] - data['Time'].mean()) ** 2 / ((data['Time'] - data['Time'].mean()) ** 2).sum()))\n", "\n", - " # Initializing lists for buy and sell signals\n", - " buy_signals = []\n", - " sell_signals = []\n", - " last_signal = None\n", - "\n", - " for i in range(len(data)):\n", - " if data['RSI'].iloc[i] > sell_threshold:\n", - " if last_signal != 'sell' and last_signal is not None:\n", - " value_upper = data['Upper'].iloc[i] * (1 + buffer_percentage / 100) if data['Upper'].iloc[i] >= 0 else data['Upper'].iloc[i] * (1 - buffer_percentage / 100)\n", - " if data[symbol].iloc[i] > value_upper:\n", - " sell_signals.append(data[symbol].iloc[i])\n", - " buy_signals.append(np.nan)\n", - " last_signal = 'sell'\n", - " else:\n", - " sell_signals.append(np.nan)\n", - " buy_signals.append(np.nan)\n", - " else:\n", - " sell_signals.append(np.nan)\n", - " buy_signals.append(np.nan)\n", - " elif data['RSI'].iloc[i] < buy_threshold:\n", - " if last_signal != 'buy':\n", - " value_lower = data['Lower'].iloc[i] * (1 - buffer_percentage / 100) if data['Lower'].iloc[i] >= 0 else data['Lower'].iloc[i] * (1 + buffer_percentage / 100)\n", - " if data[symbol].iloc[i] < value_lower:\n", - " buy_signals.append(data[symbol].iloc[i])\n", - " sell_signals.append(np.nan)\n", - " last_signal = 'buy'\n", - " else:\n", - " buy_signals.append(np.nan)\n", - " sell_signals.append(np.nan)\n", - " else:\n", - " buy_signals.append(np.nan)\n", - " sell_signals.append(np.nan)\n", - " else:\n", - " buy_signals.append(np.nan)\n", - " sell_signals.append(np.nan)\n", - "\n", - " data['Buy_Signal_Price'] = buy_signals\n", - " data['Sell_Signal_Price'] = sell_signals\n", + " data['potential_sell'] = (data['RSI'] > sell_threshold) & (data[symbol] > data['Upper'] * (1 + buffer_percentage / 100))\n", + " data['potential_buy'] = (data['RSI'] < buy_threshold) & (data[symbol] < data['Lower'] * (1 - buffer_percentage / 100))\n", + "\n", + " data['position'] = np.nan\n", + " data['Buy_Signal_Price'] = data.loc[(data['potential_buy'] & ~data['potential_buy'].shift(periods=1, fill_value=False)), symbol]\n", + " data.loc[(data['potential_buy'] & ~data['potential_buy'].shift(periods=1, fill_value=False)), 'position'] = 'buy'\n", + " data['Sell_Signal_Price'] = data.loc[(data['potential_sell'] & ~data['potential_sell'].shift(periods=1, fill_value=False)), symbol]\n", + " data.loc[(data['potential_sell'] & ~data['potential_sell'].shift(periods=1, fill_value=False)), 'position'] = 'sell'\n", + "\n", + " data.position.iloc[0] = 'sell'\n", + " data['position'] = data.loc[data['position'] != data['position'].fillna(method='ffill').shift(periods=1, fill_value='sell'), 'position']\n", "\n", " # data.to_excel('check_signals.xlsx')\n", "\n", @@ -115,9 +88,9 @@ " ax1.plot(data.index, data['Lower'], label='Lower Band', linestyle='--', color='orange')\n", " ax1.plot(data.index, data['Upper'], label='Upper Band', linestyle='--', color='purple')\n", "\n", - " buy_signal_indices = data.index[data['Buy_Signal_Price'].notnull()]\n", + " buy_signal_indices = data.index[data['position'] == 'buy']\n", " ax1.plot(buy_signal_indices, data.loc[buy_signal_indices, symbol], '^', markersize=12, color='green', label='Buy Signal')\n", - " sell_signal_indices = data.index[data['Sell_Signal_Price'].notnull()]\n", + " sell_signal_indices = data.index[data['position'] == 'sell']\n", " ax1.plot(sell_signal_indices, data.loc[sell_signal_indices, symbol], 'v', markersize=12, color='red', label='Sell Signal')\n", "\n", " ax1.legend()\n",