for forecast_period in predictions_3_1.keys():
    timeframe = predictions_3_1[forecast_period]["timeframe"]
    
    strategy_data[forecast_period] = predictions_3_1[forecast_period]["df"].copy()

    ohlcv = ohlcv_df[timeframe].copy()
    ohlcv.index = ohlcv.index.tz_localize('UTC')
    
    strategy_data[forecast_period] = strategy_data[forecast_period].join(ohlcv_df[timeframe], how='inner')



---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[326], line 9
      6 ohlcv = ohlcv_df[timeframe].copy()
      7 ohlcv.index = ohlcv.index.tz_localize('UTC')
----> 9 strategy_data[forecast_period] = strategy_data[forecast_period].join(ohlcv_df[timeframe], how='inner')

File /usr/local/lib/python3.11/site-packages/pandas/core/frame.py:10757, in DataFrame.join(self, other, on, how, lsuffix, rsuffix, sort, validate)
  10747     if how == "cross":
  10748         return merge(
  10749             self,
  10750             other,
   (...)
  10755             validate=validate,
  10756         )
> 10757     return merge(
  10758         self,
  10759         other,
  10760         left_on=on,
  10761         how=how,
  10762         left_index=on is None,
  10763         right_index=True,
  10764         suffixes=(lsuffix, rsuffix),
  10765         sort=sort,
  10766         validate=validate,
  10767     )
  10768 else:
  10769     if on is not None:

File /usr/local/lib/python3.11/site-packages/pandas/core/reshape/merge.py:184, in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
    169 else:
    170     op = _MergeOperation(
    171         left_df,
    172         right_df,
   (...)
    182         validate=validate,
    183     )
--> 184     return op.get_result(copy=copy)

File /usr/local/lib/python3.11/site-packages/pandas/core/reshape/merge.py:886, in _MergeOperation.get_result(self, copy)
    883 if self.indicator:
    884     self.left, self.right = self._indicator_pre_merge(self.left, self.right)
--> 886 join_index, left_indexer, right_indexer = self._get_join_info()
    888 result = self._reindex_and_concat(
    889     join_index, left_indexer, right_indexer, copy=copy
    890 )
    891 result = result.__finalize__(self, method=self._merge_type)

File /usr/local/lib/python3.11/site-packages/pandas/core/reshape/merge.py:1137, in _MergeOperation._get_join_info(self)
   1134 right_ax = self.right.index
   1136 if self.left_index and self.right_index and self.how != "asof":
-> 1137     join_index, left_indexer, right_indexer = left_ax.join(
   1138         right_ax, how=self.how, return_indexers=True, sort=self.sort
   1139     )
   1141 elif self.right_index and self.how == "left":
   1142     join_index, left_indexer, right_indexer = _left_join_on_index(
   1143         left_ax, right_ax, self.left_join_keys, sort=self.sort
   1144     )

File /usr/local/lib/python3.11/site-packages/pandas/core/indexes/base.py:279, in _maybe_return_indexers.<locals>.join(self, other, how, level, return_indexers, sort)
    269 @functools.wraps(meth)
    270 def join(
    271     self,
   (...)
    277     sort: bool = False,
    278 ):
--> 279     join_index, lidx, ridx = meth(self, other, how=how, level=level, sort=sort)
    280     if not return_indexers:
    281         return join_index

File /usr/local/lib/python3.11/site-packages/pandas/core/indexes/base.py:4598, in Index.join(self, other, how, level, return_indexers, sort)
   4595 if isinstance(self, ABCDatetimeIndex) and isinstance(other, ABCDatetimeIndex):
   4596     if (self.tz is None) ^ (other.tz is None):
   4597         # Raise instead of casting to object below.
-> 4598         raise TypeError("Cannot join tz-naive with tz-aware DatetimeIndex")
   4600 if not self._is_multi and not other._is_multi:
   4601     # We have specific handling for MultiIndex below
   4602     pself, pother = self._maybe_downcast_for_indexing(other)

TypeError: Cannot join tz-naive with tz-aware DatetimeIndex