def calculate_stock_return(data_df):
    """
        Arguments:
            data_df: input data frame, expect to have the following attribute:
                     bar_Timestamp, bar_ExchangeID, bar_InstrumentID, bar_Open_Price, bar_Close_Price, 
                     bar_High_Price, bar_Low_Price, bar_BidAskMean, bar_Cumulative_Volume, bar_Volume
            
        Returns:
            data_df: with appended columns bar_Return and asset_ID; rows reordered by asset_ID
            
    """
    
    data_df["bar_Return"] = data_df["bar_Close_Price"]/data_df["bar_Open_Price"]
    data_df["asset_ID"] = data_df["bar_ExchangeID"].astype(str) + data_df["bar_InstrumentID"].astype(str)
    data_df = data_df.reindex(columns=["bar_Timestamp","asset_ID","bar_ExchangeID","bar_InstrumentID","bar_Open_Price",
                                       "bar_Close_Price","bar_High_Price","bar_Low_Price","bar_BidAskMean",
                                       "bar_Cumulative_Volume","bar_Volume","bar_Return"])
    data_df.sort_values(by=["asset_ID"])
    data_df.reset_index(drop=True)
    
    return data_df