import pandas as pd
import requests
import matplotlib.pyplot as plt
import numpy as np
from math import floor
from termcolor import colored as cl
import pandas as pd
import finnhub
from sklearn.cluster import KMeans
import mplfinance as mpf
from mplfinance.original_flavor import candlestick_ohlc
import matplotlib.dates as mpl_dates
from datetime import datetime as dt
import datetime
from datetime import datetime as dt
import datetime
# today = dt.today()
# a=str(today.year)
# b=str(today.month)
# c=str(today.day)
# c1= pd.read_csv(r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy1.csv_'+a+'_'+b+'_'+c+'.csv') 
# c1 = c1.rename(columns = {'Unnamed: 0':'sy
# # today = dt.today()
# a = str(today.year)
# b = str(today.month)
# c = str(today.day)
# d = pd.read_csv( r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy2.csv_'+a+'_'+b+'_'+c+'.csv')
# d = d.rename(columns = {'Unnamed: 0':'symbol'})
# strategy2  = d.set_index('symbol')


# #strategy1=pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\startegy1.csv_'+a+'_'+b+'_'+c+'.csv')

# today = dt.today()
# a = str(today.year)
# b = str(today.month)
# c = str(today.day)
# e = pd.read_csv(r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy3.csv_'+a+'_'+b+'_'+c+'.csv')
# e = e.rename(columns = {'Unnamed: 0':'symbol'})
# strategy3 = e.set_index('symbol')

# ticker1 = strategy1.index.tolist()
# ticker2 = strategy2.index.tolist()
# ticker3 = strategy3.index.tolist()
# ticker_sum = ticker1+ticker2+ticker3
# ticker_sum = np.unique(ticker_sum).tolist()

# #ticker_sum = f['0'].tolist()
# f =pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\support_resistop_last_peak_data.csv')   
# f = f.rename(columns = {'Unnamed: 0':'symbol'})
# # stock_info_data2 = f.set_index('symbol')mbol'}) 除了等 
# strategy1 = c1.set_index('symbol')

#stock_info_data2.to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\support_resistop_last_peak_data.csv')   
#stock_info_data1
def strategy_performance(ticker, start, end):
    # EXTRACTING STOCK DATA
    # Setup client
    # Stock candles
  #  start =[start]
  #  end =[end]
    import requests
    api_key = '86dd63f6b8ae774b061232685b78eb52'
    bs = requests.get(f'https://financialmodelingprep.com/api/v3/historical-price-full/{ticker}?from={start}&to={end}&apikey={api_key}').json()['historical']
    stock = pd.DataFrame(bs)
    stock =stock[['date','open','high','low','close','volume']]
    stock = stock.rename(columns = {'date':'Date', 'open':'Open', 'high':'High','low':'Low', 'close':'Close', 'volume':'volumn'})
    stock = stock.set_index('Date')
    stock= stock.sort_index()
    data1 = stock.copy()
    # from datetime import datetime
    # start =list(start)
    # end = list(end)
    # finnhub_client = finnhub.Client(api_key = "bt3efpf48v6tfcs816eg")
    # start_time = int(datetime(start[0], start[1], start[2], 0, 0).replace(tzinfo = timezone.utc).timestamp())
    # end_time = int(datetime(end[0], end[1], end[2], 0, 0).replace(tzinfo = timezone.utc).timestamp())
    # res = finnhub_client.stock_candles(ticker, 'D', start_time, end_time)
    # stock = pd.DataFrame(res)
    # stock = stock.rename(columns = {'t':'Date', 'o':'Open', 'h':'High', 'l':'Low', 'c':'Close', 's':'status', 'v':'volumn'})
    # stock['Date'] = pd.to_datetime(stock['Date'], unit = 's')
    # stock = stock.set_index('Date')
    
    # data1 = stock.copy()
   
    # strategy CALCULATION 
    def get_tsi(Close, long, short, signal):
        diff = Close - Close.shift(1)
        abs_diff = abs(diff)
        
        diff_smoothed = diff.ewm(span = long, adjust = False).mean()
        diff_double_smoothed = diff_smoothed.ewm(span = short, adjust = False).mean()
        abs_diff_smoothed = abs_diff.ewm(span = long, adjust = False).mean()
        abs_diff_double_smoothed = abs_diff_smoothed.ewm(span = short, adjust = False).mean()
        
        tsi = (diff_double_smoothed / abs_diff_double_smoothed) * 100
        signal = tsi.ewm(span = signal, adjust = False).mean()
       # tsi = tsi[tsi.index >= '2020-01-01'].dropna()
       # signal = signal[signal.index >= '2020-01-01'].dropna()
        
        return tsi, signal
    data1['tsi'], data1['signal_line'] = get_tsi(data1['Close'], 25, 13, 12)
    
    # TRUE STRENGTH INDEX STRATEGY
    def implement_tsi_strategy(prices, tsi, signal_line):
        buy_price = []
        sell_price = []
        tsi_signal = []
        signal = 0
        
        for i in range(len(prices)):
            if tsi[i-1] < signal_line[i-1] and tsi[i] > signal_line[i]:
                if signal != 1:
                    buy_price.append(prices[i])
                    sell_price.append(np.nan)
                    signal = 1
                    tsi_signal.append(signal)
                else:
                    buy_price.append(np.nan)
                    sell_price.append(np.nan)
                    tsi_signal.append(0)
            elif tsi[i-1] > signal_line[i-1] and tsi[i] < signal_line[i]:
                if signal != -1:
                    buy_price.append(np.nan)
                    sell_price.append(prices[i])
                    signal = -1
                    tsi_signal.append(signal)
                else:
                    buy_price.append(np.nan)
                    sell_price.append(np.nan)
                    tsi_signal.append(0)
            else:
                buy_price.append(np.nan)
                sell_price.append(np.nan)
                tsi_signal.append(0)
                
        return buy_price, sell_price, tsi_signal
    
    buy_price, sell_price, tsi_signal = implement_tsi_strategy(data1['Close'], data1['tsi'], data1['signal_line'])
    
    # STOCK POSITION
    
    position = []
    for i in range(len(tsi_signal)):
        if tsi_signal[i] > 1:
            position.append(0)
        else:
            position.append(1)
            
    for i in range(len(data1['Close'])):
        if tsi_signal[i] == 1:
            position[i] = 1
        elif tsi_signal[i] == -1:
            position[i] = 0
        else:
            position[i] = position[i-1]
            
    Close_price = data1['Close']  
    tsi = data1['tsi']
    signal_line = data1['signal_line']
    tsi_signal = pd.DataFrame(tsi_signal).rename(columns = {0:'tsi_signal'}).set_index(data1.index)
    position = pd.DataFrame(position).rename(columns = {0:'tsi_position'}).set_index(data1.index)
    
    frames_data1 = [Close_price, tsi, signal_line, tsi_signal, position]
    strategy1 = pd.concat(frames_data1, join = 'inner', axis = 1)
    
    strategy1['ret'] =pd.DataFrame(strategy1['Close'].pct_change())
    
    strategy1['tsi_returns'] = strategy1['ret'] *strategy1['tsi_position']
    
   
####################second strategy######################
# SUPERTREND CALCULATION
    data2 =stock.copy()
    def get_supertrend(high, low, Close, lookback, multiplier):
    
    # ATR
        tr1 = pd.DataFrame(high - low)
        tr2 = pd.DataFrame(abs(high - Close.shift(1)))
        tr3 = pd.DataFrame(abs(low - Close.shift(1)))
        frames = [tr1, tr2, tr3]
        tr = pd.concat(frames, axis = 1, join = 'inner').max(axis = 1)
        atr = tr.ewm(lookback).mean()
        
        # H/L AVG AND BASIC UPPER & LOWER BAND
        
        hl_avg = (high + low) / 2
        upper_band = (hl_avg + multiplier * atr).dropna()
        lower_band = (hl_avg - multiplier * atr).dropna()
        
        # FINAL UPPER BAND
        
        final_bands = pd.DataFrame(columns = ['upper', 'lower'])
        final_bands.iloc[:,0] = [x for x in upper_band - upper_band]
        final_bands.iloc[:,1] = final_bands.iloc[:,0]
        
        for i in range(len(final_bands)):
            if i == 0:
                final_bands.iloc[i,0] = 0
            else:
                if (upper_band[i] < final_bands.iloc[i-1,0]) | (Close[i-1] > final_bands.iloc[i-1,0]):
                    final_bands.iloc[i,0] = upper_band[i]
                else:
                    final_bands.iloc[i,0] = final_bands.iloc[i-1,0]
        
        # FINAL LOWER BAND
        
        for i in range(len(final_bands)):
            if i == 0:
                final_bands.iloc[i, 1] = 0
            else:
                if (lower_band[i] > final_bands.iloc[i-1,1]) | (Close[i-1] < final_bands.iloc[i-1,1]):
                    final_bands.iloc[i,1] = lower_band[i]
                else:
                    final_bands.iloc[i,1] = final_bands.iloc[i-1,1]
        
        # SUPERTREND
        
        supertrend = pd.DataFrame(columns = [f'supertrend_{lookback}'])
        supertrend.iloc[:,0] = [x for x in final_bands['upper'] - final_bands['upper']]
        
        for i in range(len(supertrend)):
            if i == 0:
                supertrend.iloc[i, 0] = 0
            elif supertrend.iloc[i-1, 0] == final_bands.iloc[i-1, 0] and Close[i] < final_bands.iloc[i, 0]:
                supertrend.iloc[i, 0] = final_bands.iloc[i, 0]
            elif supertrend.iloc[i-1, 0] == final_bands.iloc[i-1, 0] and Close[i] > final_bands.iloc[i, 0]:
                supertrend.iloc[i, 0] = final_bands.iloc[i, 1]
            elif supertrend.iloc[i-1, 0] == final_bands.iloc[i-1, 1] and Close[i] > final_bands.iloc[i, 1]:
                supertrend.iloc[i, 0] = final_bands.iloc[i, 1]
            elif supertrend.iloc[i-1, 0] == final_bands.iloc[i-1, 1] and Close[i] < final_bands.iloc[i, 1]:
                supertrend.iloc[i, 0] = final_bands.iloc[i, 0]
        
        supertrend = supertrend.set_index(upper_band.index)
        supertrend = supertrend.dropna()[1:]
        
        # ST UPTREND/DOWNTREND
        
        upt = []
        dt = []
        Close = Close.iloc[len(Close) - len(supertrend):]
    
        for i in range(len(supertrend)):
            if Close[i] > supertrend.iloc[i, 0]:
                upt.append(supertrend.iloc[i, 0])
                dt.append(np.nan)
            elif Close[i] < supertrend.iloc[i, 0]:
                upt.append(np.nan)
                dt.append(supertrend.iloc[i, 0])
            else:
                upt.append(np.nan)
                dt.append(np.nan)
                
        st, upt, dt = pd.Series(supertrend.iloc[:, 0]), pd.Series(upt), pd.Series(dt)
        upt.index, dt.index = supertrend.index, supertrend.index
        
        return st, upt, dt

    data2['st'], data2['s_upt'], data2['st_dt'] = get_supertrend(data2['High'], data2['Low'], data2['Close'], 9, 2)
    #data2 = data2[1:]

    # SUPERTREND STRATEGY
    
    def implement_st_strategy(prices, st):
        buy_price = []
        sell_price = []
        st_signal = []
        signal = 0
        
        for i in range(len(st)):
            if st[i-1] > prices[i-1] and st[i] < prices[i]:
                if signal != 1:
                    buy_price.append(prices[i])
                    sell_price.append(np.nan)
                    signal = 1
                    st_signal.append(signal)
                else:
                    buy_price.append(np.nan)
                    sell_price.append(np.nan)
                    st_signal.append(0)
            elif st[i-1] < prices[i-1] and st[i] > prices[i]:
                if signal != -1:
                    buy_price.append(np.nan)
                    sell_price.append(prices[i])
                    signal = -1
                    st_signal.append(signal)
                else:
                    buy_price.append(np.nan)
                    sell_price.append(np.nan)
                    st_signal.append(0)
            else:
                buy_price.append(np.nan)
                sell_price.append(np.nan)
                st_signal.append(0)
                
        return buy_price, sell_price, st_signal
    
    buy_price, sell_price, st_signal = implement_st_strategy(data2['Close'], data2['st'])
    
    # SUPERTREND SIGNALS
   
    position = []
    for i in range(len(st_signal)):
        if st_signal[i] > 1:
            position.append(0)
        else:
            position.append(1)
            
    for i in range(len(data2['Close'])):
        if st_signal[i] == 1:
            position[i] = 1
        elif st_signal[i] == -1:
            position[i] = 0
        else:
            position[i] = position[i-1]
            
            
    Close_price = data2['Close']
    st = data2['st']
    st_signal = pd.DataFrame(st_signal).rename(columns = {0:'st_signal'}).set_index(data2.index)
    position = pd.DataFrame(position).rename(columns = {0:'st_position'}).set_index(data2.index)
    
    frames_daat2 = [Close_price, st, st_signal, position]
    strategy2 = pd.concat(frames_daat2 , join = 'inner', axis = 1)
    
    # BACKTESTING
    strategy2['ret'] =pd.DataFrame(strategy2['Close'].pct_change())
    strategy2['st_returns'] = strategy2['ret']*strategy2['st_position']
    
    
   # fig, ax = plt.subplots()
   # plt.plot(((1+strategy2['st_returns'][1:]  ).cumprod()*10000), color = 'green')
  #  plt.plot(((1+strategy2['ret'][1:]).cumprod()*10000), color = 'red')
    #ax.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 
##############strategy3########################
    data3 = stock.copy()
    def get_di(data, lookback):
        ma = data.rolling(lookback).mean()
        di = ((data - ma) / ma) * 100
        return di
    
    data3['di_14'] = get_di(data3['Close'], 14)
    data3 = data3.dropna()
    # DISPARITY INDEX PLOT
    
    def implement_di_strategy(prices, di):
        buy_price = []
        sell_price = []
        di_signal = []
        signal = 0
        
        for i in range(len(prices)):
            if di[i-4] < 0 and di[i-3] < 0 and di[i-2] < 0 and di[i-1] < 0 and di[i] > 0:
                if signal != 1:
                    buy_price.append(prices[i])
                    sell_price.append(np.nan)
                    signal = 1
                    di_signal.append(signal)
                else:
                    buy_price.append(np.nan)
                    sell_price.append(np.nan)
                    di_signal.append(0)
            elif di[i-4] > 0 and di[i-3] > 0 and di[i-2] > 0 and di[i-1] > 0 and di[i] < 0:
                if signal != -1:
                    buy_price.append(np.nan)
                    sell_price.append(prices[i])
                    signal = -1
                    di_signal.append(signal)
                else:
                    buy_price.append(np.nan)
                    sell_price.append(np.nan)
                    di_signal.append(0)
            else:
                buy_price.append(np.nan)
                sell_price.append(np.nan)
                di_signal.append(0)
                
        return buy_price, sell_price, di_signal
    
    buy_price, sell_price, di_signal = implement_di_strategy(data3['Close'], data3['di_14'])
    
        
    # STOCK POSITION
    
    position = []
    for i in range(len(di_signal)):
        if di_signal[i] > 1:
            position.append(0)
        else:
            position.append(1)
            
    for i in range(len(data3['Close'])):
        if di_signal[i] == 1:
            position[i] = 1
        elif di_signal[i] == -1:
            position[i] = 0
        else:
            position[i] = position[i-1]
            
    Close_price = data3['Close']
    di = data3['di_14']
    di_signal = pd.DataFrame(di_signal).rename(columns = {0:'di_signal'}).set_index(data3.index)
    position = pd.DataFrame(position).rename(columns = {0:'di_position'}).set_index(data3.index)
    
    frames = [Close_price, di, di_signal, position]
    strategy3 = pd.concat(frames, join = 'inner', axis = 1)
      # BACKTESTING
    strategy3['ret'] =pd.DataFrame(strategy3['Close'].pct_change())
    strategy3['di_returns'] = strategy3['ret']*strategy3['di_position']
    

    def CAGR(DF):
        "function to calculate the Cumulative Annual Growth Rate of a trading strategy"
        df = DF.copy()
        df["cum_return"] = (1 + df["mon_ret"]).cumprod()
        n = len(df)/360
        CAGR = (df["cum_return"].tolist()[-1])**(1/n) - 1
        return CAGR
    
    def volatility(DF):
        "function to calculate annualized volatility of a trading strategy"
        df = DF.copy()
        vol = df["mon_ret"].std() * np.sqrt(360)
        return vol
    
    def sharpe(DF,rf):
        "function to calculate sharpe ratio ; rf is the risk free rate"
        df = DF.copy()
        sr = (CAGR(df) - rf)/volatility(df)
        return sr
        
    
    def max_dd(DF):
        "function to calculate max drawdown"
        df = DF.copy()
        df["cum_return"] = (1 + df["mon_ret"]).cumprod()
        df["cum_roll_max"] = df["cum_return"].cummax()
        df["drawdown"] = df["cum_roll_max"] - df["cum_return"]
        df["drawdown_pct"] = df["drawdown"]/df["cum_roll_max"]
        max_dd = df["drawdown_pct"].max()
        return max_dd    
    
    def sortino(DF,rf):
        "function to calculate sortino ratio ; rf is the risk free rate"
        df = DF.copy()
        df["neg_ret"] = np.where(df["mon_ret"]<0,df["mon_ret"],0)
        neg_vol = df["neg_ret"].std() * np.sqrt(252)
        sr = (CAGR(df) - rf)/neg_vol
        return sr
    
    # def calmar(DF):
    #     "function to calculate calmar ratio"
    #     df = DF.copy()
    #     clmr = CAGR(df)/max_dd(df)
    #     return clmr
    


    
    strategy1_ret = pd.DataFrame(strategy1.loc[:,'tsi_returns'])
    strategy1_ret.columns = ['mon_ret']
    strategy1_ret.dropna(inplace = True)
    
    
    strategy2_ret = pd.DataFrame(strategy2.loc[:,'st_returns'])
    strategy2_ret.columns = ['mon_ret']
    strategy2_ret.dropna(inplace = True)
    
    
    
    strategy3_ret = pd.DataFrame(strategy3.loc[:,'di_returns'])
    strategy3_ret.columns = ['mon_ret']
    strategy3_ret.dropna(inplace = True)
    
    
    strategy_b = pd.DataFrame(strategy1.loc[:,'ret'])
    strategy_b.columns = ['mon_ret']
    strategy_b.dropna(inplace = True)
    #strategy1_ret =strategy1_ret.rename({'tsi_returns':"mon_ret"})
    
#traetgy1: 'Super Momentum'###########tsi_return green
############strategy3: Super Oscillator di_return green
#strateg2:'Super Trend"   purple  st_return


    cagr1=CAGR(strategy1_ret)
    cagr2=CAGR(strategy2_ret)
    cagr3= CAGR(strategy3_ret)
    cagr_benchmark = CAGR(strategy_b)
    data =[{'cagr_green':cagr1, 'cagr_purple':cagr2, 'cagr_blue':cagr3, 'cagr_benchmark': cagr_benchmark}]
    da = pd.DataFrame(data)
    da.index= [ticker]

    

    
    vol1 =volatility(strategy1_ret)
    vol2 =volatility(strategy2_ret)
    vol3 =  volatility(strategy3_ret)
    vol_benchmark =  volatility(strategy_b)
    
    data2= [{'vol_green': vol1, 'vol_purple':vol2, 'vol_blue':vol3,'vlo_benchmark': vol_benchmark }]
    da3= pd.DataFrame(data2)
    da3.index= [ticker]
    
    
    sharp1 = sharpe(strategy1_ret,0.025)
    sharp2 = sharpe(strategy2_ret,0.025)
    sharp3 =sharpe(strategy3_ret,0.025)
    sharp_benchmark = sharpe(strategy_b,0.025)
    
    data3 = [{'sharp_green': sharp1, 'sharp_purple': sharp2, 'sharp_blue': sharp3, 'sharp_benchmark' : sharp_benchmark}]
    da4 = pd.DataFrame(data3)
    da4.index= [ticker]
    
    max_dd1 = max_dd(strategy1_ret)
    max_dd2 = max_dd(strategy2_ret)
    max_dd3 = max_dd(strategy3_ret)
    max_dd_benchmark =  max_dd(strategy_b)
    
    data4 = [{'max_dd_green': max_dd1, 'max_dd_purple': max_dd2, 'max_dd_blue': max_dd3, 'max_dd_benchmark': max_dd_benchmark}]
    da5 = pd.DataFrame(data4)
    da5.index= [ticker]
    
    
    
    sortino1 =  sortino(strategy1_ret,0.025)
    sortino2=   sortino(strategy2_ret,0.025)
    sortino3=   sortino(strategy3_ret,0.025)
    sortino_benchmark =  sortino(strategy_b,0.025)
    
    data5 = [{'sortino_green':sortino1, 'sortino_purple': sortino2, 'sortino_blue' :   sortino3,'sortino_benchmark ': sortino_benchmark}] 
    da6 = pd.DataFrame(data5)
    da6.index= [ticker]
    
    
    # calmar1= calmar(strategy1_ret)
    # calmar2=   calmar(strategy2_ret)
    # calmar3=   calmar(strategy3_ret)
    # calmar_benchmark =  calmar(strategy_b)
    
    # data7 = [{'calmar_green':calmar1,  ' calmar_purple':  calmar2, ' calmar_blue': calmar3,' calmar_benchmark': calmar_benchmark}]
    # da7 =pd.DataFrame(data6)
    # da7.index= [ticker]
    
        
    k= da.merge(da3, left_index=True, right_index=True)
    
    k1  = k.merge(da4, left_index=True, right_index=True)
    
    k2 =  k1.merge(da5, left_index=True, right_index=True)
    
    
    kpi =  k2.merge(da6, left_index=True, right_index=True)
    kpi.columns =kpi.columns.to_series().apply(lambda x: x.strip())
    kpi[['sharp_green','sharp_purple','sharp_blue','sharp_benchmark','sortino_green','sortino_purple','sortino_blue','sortino_benchmark']] = kpi[['sharp_green','sharp_purple','sharp_blue','sharp_benchmark','sortino_green','sortino_purple','sortino_blue','sortino_benchmark']].applymap("{0:,.2f}".format) 


    kpi[['cagr_green','cagr_purple','cagr_blue','cagr_benchmark','vol_green','vol_purple','vol_blue','vlo_benchmark','max_dd_green','max_dd_purple','max_dd_blue','max_dd_benchmark']] =kpi[['cagr_green','cagr_purple','cagr_blue','cagr_benchmark','vol_green','vol_purple','vol_blue','vlo_benchmark','max_dd_green','max_dd_purple','max_dd_blue','max_dd_benchmark']].applymap("{0:,.2%}".format) 
 
    return kpi



# df[['var1','var2']] = df[['var1','var2']].applymap("{0:.2f}".format)
# df['var3'] = df['var3'].applymap(lambda x: "{0:.2f}%".format(x*100))
# df[['var1','var2']].apply(lambda x: map(lambda x:'{:.2f}%'.format(x),x),axis=1)
from datetime import datetime as dt
import datetime
#start=(2010,1,21)
start='2010-01-21'
today = dt.today()
end = today-datetime.timedelta(1)
#end = (yesterday.year, yesterday.month, yesterday.day)

kpi = pd.DataFrame()
for ticker in ticker_sum:
     data = strategy_performance( ticker ,  start,end)
     kpi= pd.concat([kpi, data ],axis =0)
kpi=kpi.sort_index()   

# kpi=  kpi.astype(float)
# kpi[['sharp_green','sharp_purple','sharp_blue','sharp_benchmark','sortino_green','sortino_purple','sortino_blue','sortino_benchmark']] = kpi[['sharp_green','sharp_purple','sharp_blue','sharp_benchmark','sortino_green','sortino_purple','sortino_blue','sortino_benchmark']].applymap("{0:,.2f}".format) 

# kpi=  kpi.astype(float)
# kpi[['cagr_green','cagr_purple','cagr_blue','cagr_benchmark','vol_green','vol_purple','vol_blue','vlo_benchmark','max_dd_green','max_dd_purple','max_dd_blue','max_dd_benchmark']] =kpi[['cagr_green','cagr_purple','cagr_blue','cagr_benchmark','vol_green','vol_purple','vol_blue','vlo_benchmark','max_dd_green','max_dd_purple','max_dd_blue','max_dd_benchmark']].applymap("{0:,.2%}".format) 
           
  


#stock_info_data2= stock_info_data1.merge(strategy_sum1,right_index = True, left_index = True)

stock_info_data3 = stock_info_data2.merge(kpi,right_index = True, left_index = True)

stock_info_data3 .to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\all_data.csv') 