# # IMPORTING PACKAGES
# import pandas as pd
# import requests
# import numpy as np
# from math import floor
# from termcolor import colored as cl
# import requests
# from math import floor
# import finnhub
# import requests
# import matplotlib.pyplot as plt
# 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 * 
import pandas as pd
import requests
import matplotlib.pyplot as plt
import numpy as np
import requests
import matplotlib.pyplot as plt
from math import floor
import finnhub
from termcolor import colored as cl

# ticker1 = strategy1.index.tolist()
# ticker2 = strategy2.index.tolist()
# ticker3 = strategy3.index.tolist()
# #ticker3.remove('ZEUS')
# ticker_sum = ticker1+ticker2+ticker3
# ticker_sum = np.unique(ticker_sum).tolist()
# # plt.style.use('fivethirtyeight')
# # plt.rcParams['figure.figsize'] = (20, 10)

# from datetime import datetime as dt
# import datetime
# today = dt.today()
# a = str(today.year)
# b = str(today.month)
# c = str(today.day)
# f1 = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\three_strategy_buy_point_'+a+'_'+b+'_'+c+'.csv')
# ticker_sum = f1['0'].tolist()

def get_all_trading_signal(ticker1, ticker2, ticker3):
    # IMPORTING PACKAGES
    import pandas as pd
    import requests
    import numpy as np
    from math import floor
    from termcolor import colored as cl
    import requests
    from math import floor
    import finnhub
    import requests
    import matplotlib.pyplot as plt
    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 * 
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    import pandas as pd
    import mplfinance as mpf
    from mplfinance.original_flavor import candlestick_ohlc
    import finnhub
    import matplotlib.dates as mpl_dates
    import numpy as np
   # from datetime import * 
    import seaborn as sns
    from datetime import datetime
    def get_signal(ticker):
        print(ticker)
        d =stock_info_data5.loc[ticker,'recent_stoploss'] 
        from datetime import datetime as dt
        import datetime
        today = datetime.datetime.today()
        end =today.strftime('%Y-%m-%d') 
        start = (today-datetime.timedelta(200)).strftime('%Y-%m-%d') 
        import requests
        api_key = '86dd63f6b8ae774b061232685b78eb52'
        from datetime import datetime
        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':'volume'})
        stock = stock.set_index('Date')
        stock= stock.sort_index()
        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)
    
   
        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 = stock.iloc[-15:,:]
        data = stock.copy()
        def ema(n, close):
            return close.ewm(span = n).mean()
        data['ema8'] = ema(8, data.Close)
        data['ema21'] = ema(21, data.Close)
        data['ema50'] = ema(50, data.Close)
        data['vol10'] = data['volume'].rolling(window = 10).mean()
        
        data3 = stock.copy()
        data3 =data3.reset_index()
        vup = []
        vup.append(data3.loc[0, 'Date'])
        vdown = []
        for i in range(1, len(data3)):
            if data3.loc[i, 'Close'] >= data3.loc[i-1, 'Close']:
                vup.append(data3.loc[i, 'Date'])
            if data3.loc[i, 'Close'] < data3.loc[i-1, 'Close']:
                vdown.append(data3.loc[i, 'Date'])
    
        plt.rcParams['axes.xmargin'] = 0
        plt.rcParams['figure.figsize'] = (15, 10)
        fig, axs = plt.subplots(2, gridspec_kw={'height_ratios': [7, 2]}, sharex=True)
       
        fig.patch.set_facecolor('white')
       
       
        data['Date'] = pd.to_datetime(data.index)
        data['Date'] = data['Date'].apply(mpl_dates.date2num)
       
     # data['Date'] = pd.to_datetime(data.index)
    #  data['Date'] = data['Date'].apply(mpl_dates.date2num)
        
    
        data_plot = data.loc[:,['Date', 'Open', 'High', 'Low', 'Close']]
        candlestick_ohlc(axs[0], data_plot.values, width = 0.4,alpha = 1,
                        colorup = 'green', colordown = 'red')
        
        data =data.set_index('Date')
        # data['ema8'].plot(ax = axs[0],linewidth = 0.5,color = 'blue')
        # data['ema21'].plot(ax = axs[0],  linewidth = 0.5,color = 'red')
        # data['ema50'].plot(ax = axs[0], linewidth = 0.5, color = 'grey')
       
        vup = mpl_dates.date2num(vup)
        vdown = mpl_dates.date2num(vdown)
        axs[1].bar(x = vup, height = data.loc[vup, 'volume'], color = 'green', width = 0.4)
        axs[1].bar(x = vdown, height = data.loc[vdown, 'volume'], color = 'red', width = 0.4)
        data['vol10'].plot(ax = axs[1], label = 'Avg_10days', color = 'steelblue', linewidth = 1)
        axs[1].ticklabel_format(useOffset=False, style='plain', axis='y')
       
       
        c = buy_price[-1]
        c_an = c+c*0.01
        g = data.index[-1]+3
        g_adjusted = data.index[-1] + 1  # 将水平位置调整得更接近
        c_an_adjusted = c + c * 0.005  # 将垂直位置稍微调整，使箭头不那么长

        f_adjusted = data.index[-1] + 1  # 同样调整卖出箭头的水平位置
        # 对于不同的价格区间，调整l_an的值以缩短箭头长度
        if buy_price[-1] < 120:
             axs[0].set_ylim(min(data.Low)-5, max(data.High) + 5)
        else:
             axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        if d < 50:
            l_an_adjusted = d - 1
        elif 50 < d < 100:
            l_an_adjusted = d - 2
        elif 100 < d <= 200:
            l_an_adjusted = d - 3
        elif 200 < d <= 400:
            l_an_adjusted = d - 4
        else:
            l_an_adjusted = d - 4

        # 使用调整后的值来绘制箭头
        axs[0].annotate('Buy: $'+ str(round(c,2)), size=24, xy = (data.index[-1], c), xycoords = 'data', xytext = (g_adjusted, c_an_adjusted), bbox = dict(boxstyle = 'round', fc = 'none', edgecolor='blue',pad = 0.5), textcoords = 'data', arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3', lw =3, color = 'black'))

        axs[0].annotate("Stop: $" + str(round(d,2)), size = 24, xy = (data.index[-1], d), xycoords = 'data', xytext = (f_adjusted, l_an_adjusted), bbox = dict(boxstyle = 'round', fc = 'none', edgecolor='blue', pad = 0.5), textcoords = 'data', arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3', lw =3, color = 'black'))

        # if buy_price[-1] < 120:
        #      axs[0].set_ylim(min(data.Low)-5, max(data.High) + 5)
        # else:
        #      axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        # axs[0].annotate('Buy: $'+ str(round(c,2)),size=24, xy = (data.index[-1], c),\
        #           xycoords = 'data', xytext = (g, c_an),\
        #           bbox = dict(boxstyle = 'round', 
        #                       fc = 'none', edgecolor='green',pad = 0.5),\
        #           textcoords = 'data', arrowprops = dict(arrowstyle = '->',\
       
        # f =  data.index[-1] +2

        # if d<50:
        #     l_an = d-2
        # elif 50<d<100:
        #     l_an = d-4
        # elif 100 < d <= 200:
        #     l_an = d-6
        # elif 200 < d <= 400:
        #     l_an = d-8
        # elif d> 400:
        #     l_an = d-8
        # axs[0].annotate("Stop: $" + str(round(d,2)), size = 24,xy = (data.index[-1], d),\
        #           xycoords = 'data', xytext = (f, l_an),\
        #           bbox = dict(boxstyle = 'round', fc = 'none',edgecolor='green', pad = 0.5),\
        #           textcoords = 'data', arrowprops = dict(arrowstyle = '->',\
        #             connectionstyle = 'arc3', lw =3,color = 'black'))
            
        axs[0].set_facecolor('white')
        axs[1].set_facecolor('white')
      #  axs[0].grid(b=True, which='major', color='grey', linestyle='--',alpha=0.8)
        axs[0].grid(which='major', color='grey', linestyle='--', alpha=0.8)
        axs[1].grid(which='major', color='grey', linestyle='--',alpha=0.8)
        #axs[1].grid(b=True, which='major', color='grey', linestyle='--',alpha=0.8)
        axs[0].set_xlim(min(data.index), max(data.index) + 8)
        axs[1].set_xlim(min(data.index) - 1, max(data.index) + 8)
      #  axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        date_format = mpl_dates.DateFormatter('%d %b %Y')
        axs[0].xaxis.set_major_formatter(date_format)
        axs[1].xaxis.set_major_formatter(date_format)
        axs[0].yaxis.tick_right()
        axs[1].yaxis.tick_right()
        axs[0].set(xlabel = '', ylabel = 'Price')
        axs[1].set(ylabel = 'Volume')
        axs[0].spines["bottom"].set_visible(True)
        axs[1].spines["top"].set_visible(True)
      #  axs[0].legend(loc = 'upper left')
        axs[1].legend(loc = 'upper left')
        axs[0].set_axisbelow(False)
        plt.subplots_adjust(hspace=0.1)
                           
       # g =data.index.tolist()[-1]
        plt.xticks(list(np.arange(min(data.index), max(data.index) + 1, 20)))
        axs[0].set_title(ticker+ " Trading Signal-GreenLine ", size = 14)
        path ="C:\\users\jizha\Desktop\seabridge fintech\image_trading_signal_green\\"
        plt.savefig(path +'{}.jpg'.format(ticker+"_Signal"), dpi = 25,pad_inches = 0,transparent=True)
        plt.show()    
        
    for ticker in ticker1:
        print(ticker)
        strategy1 = get_signal( ticker)
        
    
    image_trading_signal_green = pd.DataFrame()
    for ticker in ticker1:
        image = pd.DataFrame()
        dr = "https://3arbzfbsh-cname-us.ngrok.io/Desktop/seabridge%20fintech/image_trading_signal_green/" + ticker + "_Signal.jpg"
        tick = ticker
        image['image_Trading_signal'] =[ dr]
        image.index =[tick]
        image_trading_signal_green = pd.concat([image_trading_signal_green,image], axis =0)
            
    ############################second strategy#####################
    def get_signal2(ticker):
        print(ticker)
        d =stock_info_data5.loc[ticker,'recent_stoploss'] 
        from datetime import datetime as dt
        import datetime
        today = datetime.datetime.today()
        end =today.strftime('%Y-%m-%d') 
    #start = '2021-03-01'
        start = (today-datetime.timedelta(200)).strftime('%Y-%m-%d') 
    # today = dt.today()
    # yesterday = today-datetime.timedelta(1)
    # end = (yesterday.year, yesterday.month, yesterday.day)
        import requests
        api_key = '86dd63f6b8ae774b061232685b78eb52'
        from datetime import datetime
        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':'volume'})
        stock = stock.set_index('Date')
        stock= stock.sort_index()
        data2 =stock.copy()
    # SUPERTREND CALCULATION    
        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'])
        
       # stop_loss_data =  get_data(ticker)
       # d =stop_loss_data.loc[ticker,'stop_loss']  
       
        stock = stock.iloc[-15:,:]
        data = stock.copy()
        def ema(n, close):
            return close.ewm(span = n).mean()
        data['ema8'] = ema(8, data.Close)
        data['ema21'] = ema(21, data.Close)
        data['ema50'] = ema(50, data.Close)
        data['vol10'] = data['volume'].rolling(window = 10).mean()
        
        data3 = stock.copy()
        data3 =data3.reset_index()
        vup = []
        vup.append(data3.loc[0, 'Date'])
        vdown = []
        for i in range(1, len(data3)):
            if data3.loc[i, 'Close'] >= data3.loc[i-1, 'Close']:
                vup.append(data3.loc[i, 'Date'])
            if data3.loc[i, 'Close'] < data3.loc[i-1, 'Close']:
                vdown.append(data3.loc[i, 'Date'])
    
        plt.rcParams['axes.xmargin'] = 0
        plt.rcParams['figure.figsize'] = (15, 10)
        fig, axs = plt.subplots(2, gridspec_kw={'height_ratios': [7, 2]}, sharex=True)
       
        fig.patch.set_facecolor('white')
       
       
        data['Date'] = pd.to_datetime(data.index)
        data['Date'] = data['Date'].apply(mpl_dates.date2num)
       

    
        data_plot = data.loc[:,['Date', 'Open', 'High', 'Low', 'Close']]
        candlestick_ohlc(axs[0], data_plot.values, width = 0.4,alpha = 1,
                        colorup = 'green', colordown = 'red')
        
        data =data.set_index('Date')
       
        vup = mpl_dates.date2num(vup)
        vdown = mpl_dates.date2num(vdown)
        axs[1].bar(x = vup, height = data.loc[vup, 'volume'], color = 'green',width = 0.4)
        axs[1].bar(x = vdown, height = data.loc[vdown, 'volume'], color = 'red',width = 0.4)
        data['vol10'].plot(ax = axs[1], label = 'Avg_10days', color = 'steelblue', linewidth = 1)
        axs[1].ticklabel_format(useOffset=False, style='plain', axis='y')
       
       
        c = buy_price[-1]
       # c_an = (max(data.High)-0.01*max(data.High)+ c) / 2
        c_an = c+c*0.01
        g = data.index[-1]+3
        g_adjusted = data.index[-1] + 1  # 将水平位置调整得更接近
        c_an_adjusted = c + c * 0.005  # 将垂直位置稍微调整，使箭头不那么长

        f_adjusted = data.index[-1] + 1  # 同样调整卖出箭头的水平位置
        # 对于不同的价格区间，调整l_an的值以缩短箭头长度
        if buy_price[-1] < 120:
             axs[0].set_ylim(min(data.Low)-5, max(data.High) + 5)
        else:
             axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        if d < 50:
            l_an_adjusted = d - 1
        elif 50 < d < 100:
            l_an_adjusted = d - 2
        elif 100 < d <= 200:
            l_an_adjusted = d - 3
        elif 200 < d <= 400:
            l_an_adjusted = d - 4
        else:
            l_an_adjusted = d - 4

        # 使用调整后的值来绘制箭头
        axs[0].annotate('Buy: $'+ str(round(c,2)), size=24, xy = (data.index[-1], c), xycoords = 'data', xytext = (g_adjusted, c_an_adjusted), bbox = dict(boxstyle = 'round', fc = 'none', edgecolor='blue',pad = 0.5), textcoords = 'data', arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3', lw =3, color = 'black'))

        axs[0].annotate("Stop: $" + str(round(d,2)), size = 24, xy = (data.index[-1], d), xycoords = 'data', xytext = (f_adjusted, l_an_adjusted), bbox = dict(boxstyle = 'round', fc = 'none', edgecolor='blue', pad = 0.5), textcoords = 'data', arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3', lw =3, color = 'black'))

       #  if buy_price[-1] < 120:
       #      axs[0].set_ylim(min(data.Low)-5, max(data.High) + 5)
            
       #  elif buy_price[-1] >120:
       #      axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
            
       #  axs[0].annotate('Buy: $'+ str(round(c,2)),size=24, xy = (data.index[-1], c),\
       #            xycoords = 'data', xytext = (g, c_an),\
       #            bbox = dict(boxstyle = 'round', 
       #                        fc = 'none', edgecolor='purple',pad = 0.5),\
       #            textcoords = 'data', arrowprops = dict(arrowstyle = '->',\
       #                                                   connectionstyle = 'arc3',lw =3, color = 'black'))
       
       #  f =  data.index[-1] +2
       # # l_an = d-d*0.01
       #  if d<50:
       #      l_an = d-2
       #  elif 50<d<100:
       #      l_an = d-4
       #  elif 100 < d <= 200:
       #      l_an = d-6
       #  elif 200 < d <= 400:
       #      l_an = d-8
       #  elif d> 400:
       #      l_an = d-8
       #  axs[0].annotate("Stop: $" + str(round(d,2)), size = 24,xy = (data.index[-1], d),\
       #            xycoords = 'data', xytext = (f, l_an),\
       #            bbox = dict(boxstyle = 'round', fc = 'none',edgecolor='purple', pad = 0.5),\
       #            textcoords = 'data', arrowprops = dict(arrowstyle = '->',\
       #              connectionstyle = 'arc3', lw =3,color = 'black'))
            
        axs[0].set_facecolor('white')
        axs[1].set_facecolor('white')
       # axs[0].grid(grid_visible=True, which='major', color='grey', linestyle='--', alpha=0.8)

        axs[0].grid( which='major', color='grey', linestyle='--',alpha=0.8)
        axs[1].grid( which='major', color='grey', linestyle='--',alpha=0.8)
    #    axs[1].grid(b=True, which='major', color='grey', linestyle='--',alpha=0.8)
        axs[0].set_xlim(min(data.index), max(data.index) + 8)
        axs[1].set_xlim(min(data.index) - 1, max(data.index) + 8)
       # axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        date_format = mpl_dates.DateFormatter('%d %b %Y')
        axs[0].xaxis.set_major_formatter(date_format)
        axs[1].xaxis.set_major_formatter(date_format)
        axs[0].yaxis.tick_right()
        axs[1].yaxis.tick_right()
        axs[0].set(xlabel = '', ylabel = 'Price')
        axs[1].set(ylabel = 'Volume')
        axs[0].spines["bottom"].set_visible(True)
        axs[1].spines["top"].set_visible(True)
       # axs[0].legend(loc = 'upper left')
        #axs[1].legend(loc = 'upper left')
        axs[0].set_axisbelow(False)
       
        plt.subplots_adjust(hspace=0.1)
                           
       # g =data.index.tolist()[-1]
        plt.xticks(list(np.arange(min(data.index), max(data.index) + 1, 20)))
        axs[0].set_title(ticker+ " Trading Signal-PurpleLine ", size = 14)
        path ="C:\\users\jizha\Desktop\seabridge fintech\image_trading_signal_purple\\"
        plt.savefig(path +'{}.jpg'.format(ticker+"_Signal"), dpi = 25,pad_inches = 0,transparent=True)
        plt.show()  
    
    for ticker in ticker2:
        strategy1 = get_signal2(ticker)
      
        
    #dr = "http://50ca9b242423.ngrok.io/Desktop/seabridge%20fintech/image_trading_signal_purple/" 
    image_trading_signal_purple = pd.DataFrame()
    for ticker in ticker2:
        image = pd.DataFrame()
        dr = "https://3arbzfbsh-cname-us.ngrok.io/Desktop/seabridge%20fintech/image_trading_signal_purple/" + ticker + "_Signal.jpg"
        tick = ticker
        image['image_Trading_signal'] =[ dr]
        image.index =[tick]
        image_trading_signal_purple = pd.concat([image_trading_signal_purple ,image], axis =0)
            
    
        
    
        
     
     #   fig, ax = plt.subplots()
      #  plt.plot(((1+strategy2['st_returns'][1:]  ).cumprod()*10000), color = 'green')
      ##  #ax.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 
    
    ########################signal_three#################
    
    def get_signal3(ticker):
        print(ticker)
       # ticker = 'EEM'
        from datetime import datetime as dt
        import datetime
        today = datetime.datetime.today()
        end =today.strftime('%Y-%m-%d') 
    #start = '2021-03-01'
        start = (today-datetime.timedelta(200)).strftime('%Y-%m-%d') 
    # today = dt.today()
    # yesterday = today-datetime.timedelta(1)
    # end = (yesterday.year, yesterday.month, yesterday.day)
        import requests
        api_key = '86dd63f6b8ae774b061232685b78eb52'
        from datetime import datetime
        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':'volume'})
        stock = stock.set_index('Date')
        stock= stock.sort_index()
        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)

     
        
        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'])
        
        # stop_loss_data =  get_data(ticker)
        # d =stop_loss_data.loc[ticker,'stop_loss'] 
        d =stock_info_data5.loc[ticker,'recent_stoploss'] 
        stock = stock.iloc[-15:,:]
        data = stock.copy()
        def ema(n, close):
            return close.ewm(span = n).mean()
        data['ema8'] = ema(8, data.Close)
        data['ema21'] = ema(21, data.Close)
        data['ema50'] = ema(50, data.Close)
        data['vol10'] = data['volume'].rolling(window = 10).mean()
        
        data4 = stock.copy()
        data4 =data4.reset_index()
        vup = []
        vup.append(data4.loc[0, 'Date'])
        vdown = []
        for i in range(1, len(data4)):
            if data4.loc[i, 'Close'] >= data4.loc[i-1, 'Close']:
                vup.append(data4.loc[i, 'Date'])
            if data4.loc[i, 'Close'] < data4.loc[i-1, 'Close']:
                vdown.append(data4.loc[i, 'Date'])
    
        plt.rcParams['axes.xmargin'] = 0
        plt.rcParams['figure.figsize'] = (15, 10)
        fig, axs = plt.subplots(2, gridspec_kw={'height_ratios': [7, 2]}, sharex=True)
       
        fig.patch.set_facecolor('white')
       
       
        data['Date'] = pd.to_datetime(data.index)
        data['Date'] = data['Date'].apply(mpl_dates.date2num)
       
     # data['Date'] = pd.to_datetime(data.index)
    #  data['Date'] = data['Date'].apply(mpl_dates.date2num)
        
    
        data_plot = data.loc[:,['Date', 'Open', 'High', 'Low', 'Close']]
        candlestick_ohlc(axs[0], data_plot.values, width = 0.4,alpha = 1,
                        colorup = 'green', colordown = 'red')
        
        data =data.set_index('Date')
        # data['ema8'].plot(ax = axs[0],linewidth = 0.5,color = 'blue',label='8-day MovingAvg')
        # data['ema21'].plot(ax = axs[0],  linewidth = 0.5,color = 'red',label='21-day MovingAvg')
        # data['ema50'].plot(ax = axs[0], linewidth = 0.5, color = 'grey',label='50-day MovingAvg')
       
        vup = mpl_dates.date2num(vup)
        vdown = mpl_dates.date2num(vdown)
        axs[1].bar(x = vup, height = data.loc[vup, 'volume'], color = 'green',width = 0.4)
        axs[1].bar(x = vdown, height = data.loc[vdown, 'volume'], color = 'red',width = 0.4)
        data['vol10'].plot(ax = axs[1], label = 'Avg_10days', color = 'steelblue', linewidth = 1)
        axs[1].ticklabel_format(useOffset=False, style='plain', axis='y')
       
       
        c = buy_price[-1]
       # c_an = (max(data.High)-0.01*max(data.High)+ c) / 2
        c_an = c+c*0.01
        g = data.index[-1]+3
        g_adjusted = data.index[-1] + 1  # 将水平位置调整得更接近
        c_an_adjusted = c + c * 0.005  # 将垂直位置稍微调整，使箭头不那么长

        f_adjusted = data.index[-1] + 1  # 同样调整卖出箭头的水平位置
        # 对于不同的价格区间，调整l_an的值以缩短箭头长度
        if buy_price[-1] < 120:
             axs[0].set_ylim(min(data.Low)-5, max(data.High) + 5)
        else:
             axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        if d < 50:
            l_an_adjusted = d - 1
        elif 50 < d < 100:
            l_an_adjusted = d - 2
        elif 100 < d <= 200:
            l_an_adjusted = d - 3
        elif 200 < d <= 400:
            l_an_adjusted = d - 4
        else:
            l_an_adjusted = d - 4

        # 使用调整后的值来绘制箭头
        axs[0].annotate('Buy: $'+ str(round(c,2)), size=24, xy = (data.index[-1], c), xycoords = 'data', xytext = (g_adjusted, c_an_adjusted), bbox = dict(boxstyle = 'round', fc = 'none', edgecolor='blue',pad = 0.5), textcoords = 'data', arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3', lw =3, color = 'black'))

        axs[0].annotate("Stop: $" + str(round(d,2)), size = 24, xy = (data.index[-1], d), xycoords = 'data', xytext = (f_adjusted, l_an_adjusted), bbox = dict(boxstyle = 'round', fc = 'none', edgecolor='blue', pad = 0.5), textcoords = 'data', arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3', lw =3, color = 'black'))

        
        # if buy_price[-1] < 120:
        #      axs[0].set_ylim(min(data.Low)-5, max(data.High) + 5)
        # else:
        #      axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
        # axs[0].annotate('Buy: $'+ str(round(c,2)),size=24, xy = (data.index[-1], c),\
        #           xycoords = 'data', xytext = (g, c_an),\
        #           bbox = dict(boxstyle = 'round', 
        #                       fc = 'none', edgecolor='blue',pad = 0.5),\
        #           textcoords = 'data', arrowprops = dict(arrowstyle = '->',\
        #                                                  connectionstyle = 'arc3',lw =3, color = 'black'))
        # f =  data.index[-1] +2
        # if d<50:
        #     l_an = d-2
        # elif 50<d<100:
        #     l_an = d-4
        # elif 100 < d <= 200:
        #     l_an = d-6
        # elif 200 < d <= 400:
        #     l_an = d-8
        # elif d> 400:
        #     l_an = d-8
        # axs[0].annotate("Stop: $" + str(round(d,2)), size = 24,xy = (data.index[-1], d),\
        #           xycoords = 'data', xytext = (f, l_an),\
        #           bbox = dict(boxstyle = 'round', fc = 'none',edgecolor='blue', pad = 0.5),\
        #           textcoords = 'data', arrowprops = dict(arrowstyle = '->',\
        #             connectionstyle = 'arc3', lw =3,color = 'black'))
            
        axs[0].set_facecolor('white')
        axs[1].set_facecolor('white')
        axs[0].grid( which='major', color='grey', linestyle='--',alpha=0.8)
        axs[1].grid( which='major', color='grey', linestyle='--',alpha=0.8)
       # axs[0].grid(b=True, which='major', color='grey', linestyle='--',alpha=0.8)
       # axs[1].grid(b=True, which='major', color='grey', linestyle='--',alpha=0.8)
        axs[0].set_xlim(min(data.index), max(data.index) + 8)
        axs[1].set_xlim(min(data.index) - 1, max(data.index) + 8)
    #    axs[0].set_ylim(min(data.Low)-15, max(data.High) + 8)
       # axs[0].set_ylim(min(data.Low)-min(data.Low)*0.5, max(data.High) +max(data.High)*0.5 )
        date_format = mpl_dates.DateFormatter('%d %b %Y')
        axs[0].xaxis.set_major_formatter(date_format)
        axs[1].xaxis.set_major_formatter(date_format)
        axs[0].yaxis.tick_right()
        axs[1].yaxis.tick_right()
        axs[0].set(xlabel = '', ylabel = 'Price')
        axs[1].set(ylabel = 'Volume')
        axs[0].spines["bottom"].set_visible(True)
        axs[1].spines["top"].set_visible(True)
      #  axs[0].legend(loc = 'upper left')
       # axs[1].legend(loc = 'upper left')
        axs[0].set_axisbelow(False)
        plt.subplots_adjust(hspace=0.1)
                         
       # g =data.index.tolist()[-1]
        plt.xticks(list(np.arange(min(data.index), max(data.index) + 1, 20)))
        axs[0].set_title(ticker+ " Trading Signal-BlueLine ", size = 14)
        path ="C:\\users\jizha\Desktop\seabridge fintech\image_trading_signal_blue\\"
        plt.savefig(path +'{}.jpg'.format(ticker+"_Signal"), dpi = 25,pad_inches = 0,transparent=True)
        plt.show()  



    for ticker in ticker3:
        strategy1 = get_signal3 (ticker )
    
        
        
    #dr = "http://3dd380d01765.ngrok.io/Desktop/seabridge%20fintech/image_trading_signal_green/" 
    image_trading_signal_blue = pd.DataFrame()
    for ticker in  ticker3:
        image = pd.DataFrame()
        dr = "https://3arbzfbsh-cname-us.ngrok.io/Desktop/seabridge%20fintech/image_trading_signal_blue/" + ticker + "_Signal.jpg"
        tick = ticker
        image['image_Trading_signal'] =[ dr]
        image.index =[tick]
        image_trading_signal_blue  = pd.concat([image_trading_signal_blue ,image], axis =0)
        
    return  image_trading_signal_green, image_trading_signal_purple,image_trading_signal_blue


from datetime import datetime as dt
import datetime
today = dt.today()
a=str(today.year)
b=str(today.month)
c=str(today.day)
image_trading_signal_green,image_trading_signal_purple, image_trading_signal_blue = get_all_trading_signal(ticker1, ticker2, ticker3)
image_trading_signal_green .to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\image_trading_signal_green_'+a+'_'+b+'_'+c+'.csv') 
image_trading_signal_purple.to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\image_trading_signal_purple_'+a+'_'+b+'_'+c+'.csv') 
image_trading_signal_blue .to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\image_trading_signal_blue_'+a+'_'+b+'_'+c+'.csv') 

