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 * 

import urllib3, socket
from urllib3.connection import HTTPConnection
import requests    
def get_signal2(ticker, start, end):
    print(ticker)
    # from datetime import datetime
    # start =list(start)
    # end = list(end)
    # finnhub_client = finnhub.Client(api_key = "bt3efpf48v6tfcs816eg")
    # # Stock candles
    # 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')
    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'])
    
    # GENERATING STOCK POSITION
    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']
    
    return strategy2



def strategy_signal2(symbols): 
    strategy2 = pd.DataFrame()
    for tick in symbols:
        data = get_signal2(tick, start,  end )     
  
        f =pd.DataFrame(columns = ['p_bp','p_sp','p_p_bp','p_p_sp','p_tdate' ,'strtategy2_trend_signal'])
        if data['st_signal'][-1] == 1 and data['st_position'][-1] ==1:
            d =pd.DataFrame( data.iloc[-1,:]).T
           # buy_price.append(d['Close'].values)
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
           # df.index = pd.to_datetime(df.index).strftime('%d-%m-%Y')
           # d.index = d.index.strftime('%d/%m/%Y')
            d = d.reset_index()
            f= f.append({'p_bp':d['Close'][0], 'p_sp':0,'p_p_bp':0,'p_p_sp':0,'p_tdate': d['index'][0],'strtategy2_trend_signal':1},ignore_index = True)
         #   d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
           # date = d.index.values.tolist()
        elif data['st_signal'][-1] == -1 and data['st_position'][-1] ==0:
            d =pd.DataFrame( data.iloc[-1,:]).T
           # buy_price.append(d['Close'].values)
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
          #  d.index = d.index.strftime('%d/%m/%Y')
            d = d.reset_index()
            f= f.append({'p_bp':0, 'p_sp':d['Close'][0],'p_p_bp':0,'p_p_sp':0,'p_tdate': d['index'][0],'strtategy2_trend_signal':-1},ignore_index = True)
         #   d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
        elif data['st_signal'][-1] == 0 and data['st_position'][-1] ==1:
           # data1 = data[(data['st_signal'] == 1) & (data['st_position'] ==1)]
            d =pd.DataFrame( data.iloc[-1,:]).T
           # buy_price.append(d['Close'].values)
           # d.index = d.index.strftime('%d/%m/%Y')
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
            d = d.reset_index()
            f= f.append({'p_bp':0, 'p_sp':0,'p_p_bp':d['Close'][0],'p_p_sp':0,'p_tdate': d['index'][0], 'strtategy2_trend_signal':0},ignore_index = True)
         #   d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
        elif data['st_signal'][-1] == 0 and data['st_position'][-1] ==0:
          #  data1= data[(data['st_signal'] == -1) & (data['st_position'] ==0)]
            d =pd.DataFrame( data.iloc[-1,:]).T
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
          #  d.index = d.index.strftime('%d/%m/%Y')
            d = d.reset_index()
            f= f.append({'p_bp':0, 'p_sp':0,'p_p_bp':0,'p_p_sp':d['Close'][0],'p_tdate': d['index'][0],'strtategy2_trend_signal':0},ignore_index = True)
        f.index = [tick]
        Close = data.loc[data.index[-1],'Close']
        f['p_cur_p'] = [Close]
        #dat = data.index[-1]
      #  dat1 =dat.date() 
        today = dt.today()  
     
        f['p_tdate'] = [today]
        f['p_date'] =[today]
        strategy2 = pd.concat([f,strategy2], axis=0)
    strategy2['p_name'] = 'Purple Trend'
    
    
    return strategy2

# stock_lists = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\stock_lists_pool_3_13.csv') 
# symbols = list(stock_lists['0']) 
stock_lists = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\stock_lists_pool_1_26_2022.csv')

#stock_lists = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\stock_lists_pool_3_13.csv') 
symbols = list(stock_lists['0']) 
#start = '2021-03-01'
from datetime import datetime as dt
import datetime
symbols.remove('BCE')
#symbols.remove('GEHCV')
#symbols.remove('ASML')
symbols.remove('RXDX')
#symbols.remove('GEHCV')
symbols.remove('YUM')
symbols.remove('ZEUS')
symbols.remove('BBY')
symbols.remove('AAWW')
# symbols.remove('MANT')
#symbols.remove('CTXS')
#symbols.remove('DRE')
#ticker = 'AWR'
# h = ['META']
# g = symbols+h
#symbols = g
# yesterday = today-datetime.timedelta(1)
# start = (2020,3,1)
# end = (yesterday.year, yesterday.month,     yesterday.day)
today = dt.today()
end = today-datetime.timedelta(1)
#start = '2021-03-01'
start = today-datetime.timedelta(200)
n= 3# number of groups
groups = np.array_split(symbols, n)
group1 = groups[0].tolist()
group2 = groups[1].tolist()
group3 = groups[2].tolist()
# group4 = groups[3].tolist()
# group5 = groups[4].tolist()
# group6 = groups[5].tolist()
# group7 = groups[6].tolist()
from datetime import datetime as dt
import datetime
import time
data4 =  strategy_signal2(group1) 
time.sleep(60)
data5 = strategy_signal2(group2)     
time.sleep(60)
data6= strategy_signal2(group3)
time.sleep(60)
#单独run 
##########################################################################################
#time.sleep(60)
#group3.remove('TTC')
# data61= strategy_signal2(group4) 
# data62= strategy_signal2(group5) 
#data6= strategy_signal2(group3)
strategy2_signal = pd.concat([data4, data5, data6], axis=0)
strategy2_signal = strategy2_signal[strategy2_signal['strtategy2_trend_signal'] == 1]
#strategy2_signal=strategy2_signal.sort_index()
#strategy2_signal.to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\startegy2.csv')
# data4 = strategy_signal2(group4)
# data5 = strategy_signal2(group5)
# data6= strategy_signal2(group6)
# data7 = strategy_signal2(group7)
# strategy2 = pd.concat([data1, data2, data3, data4, data5, data6, data7], axis = 0)
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
# Read Images
img1 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_buy.jpg')
img2 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_downtrend.jpg')
img3 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_no_signal.jpg')
img4 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_sell.jpg')
img5 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_sideways.jpg')
img6 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_uptrend.jpg')
# Output Images
def get_pa_signal2(strategy2_symbol):
    for ticker in strategy2_symbol:
        img1 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_buy.jpg')
        fig = plt.figure(figsize=(10, 10))
        plt.imshow(img1)
        plt.axis("off")
            # plt.grid(b=None)
        plt.subplots_adjust(top=1, bottom=0, right=1,
                            left=0, hspace=0, wspace=0)
        path = "C:\\users\jizha\Desktop\seabridge fintech\purpleline_pa_icon\\"
        plt.savefig(path + '{}.jpg'.format(ticker+"_pa_purpleline_signal"),
                    dpi=72, transparent=True, bbox_inches='tight', pad_inches=0)
        plt.show()

    #dr= 'https://3arbzfbsh-cname-us.ngrok.io'
    p_pa_signal_url = pd.DataFrame()
    for ticker in strategy2_symbol:
        image = pd.DataFrame()
        dr = "https://3arbzfbsh-cname-us.ngrok.io/Desktop/seabridge%20fintech/purpleline_pa_icon/" + \
            ticker+"_pa_purpleline_signal.jpg"
        tick = ticker
        image['p_PA_image_buy_sell'] = [dr]
        image.index = [tick]
        p_pa_signal_url = pd.concat([p_pa_signal_url, image], axis=0)
    p_pa_signal_url = p_pa_signal_url.sort_index()
    return p_pa_signal_url


strategy2_symbol = list(strategy2_signal.index)
p_pa_signal_url = get_pa_signal2(strategy2_symbol)
strategy2_signal = strategy2_signal.sort_index()

strategy2 = strategy2_signal.merge(p_pa_signal_url, left_index=True, right_index=True)
strategy2['p_b_r_p'] = strategy2['p_bp']+strategy2['p_bp']*0.005
strategy2['p_b_r_m'] = strategy2['p_bp'] - strategy2['p_bp']*0.005
strategy2['g_b_zon'] = 'Yes'
strategy2.columns = strategy2.columns.to_series().apply(lambda x: x.strip())
strategy2[['p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']] = strategy2[[
    'p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']].astype(float)
strategy2[['p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']] = strategy2[[
    'p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']].applymap("{:,.2f}".format)

# stocks[['lastDiv','price']] = stocks[['lastDiv','price']].applymap("{0:,.2f}".format)
#         stocks['div_yiel'] =stocks['div_yiel'].apply(lambda x: "{0:.2f}%".format(x*100))
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 * 

import urllib3, socket
from urllib3.connection import HTTPConnection
import requests    
def get_signal2(ticker, start, end):
    print(ticker)
    # from datetime import datetime
    # start =list(start)
    # end = list(end)
    # finnhub_client = finnhub.Client(api_key = "bt3efpf48v6tfcs816eg")
    # # Stock candles
    # 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')
    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'])
    
    # GENERATING STOCK POSITION
    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']
    
    return strategy2



def strategy_signal2(symbols): 
    strategy2 = pd.DataFrame()
    for tick in symbols:
        data = get_signal2(tick, start,  end )     
  
        f =pd.DataFrame(columns = ['p_bp','p_sp','p_p_bp','p_p_sp','p_tdate' ,'strtategy2_trend_signal'])
        if data['st_signal'][-1] == 1 and data['st_position'][-1] ==1:
            d =pd.DataFrame( data.iloc[-1,:]).T
           # buy_price.append(d['Close'].values)
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
           # df.index = pd.to_datetime(df.index).strftime('%d-%m-%Y')
           # d.index = d.index.strftime('%d/%m/%Y')
            d = d.reset_index()
            f= f.append({'p_bp':d['Close'][0], 'p_sp':0,'p_p_bp':0,'p_p_sp':0,'p_tdate': d['index'][0],'strtategy2_trend_signal':1},ignore_index = True)
         #   d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
           # date = d.index.values.tolist()
        elif data['st_signal'][-1] == -1 and data['st_position'][-1] ==0:
            d =pd.DataFrame( data.iloc[-1,:]).T
           # buy_price.append(d['Close'].values)
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
          #  d.index = d.index.strftime('%d/%m/%Y')
            d = d.reset_index()
            f= f.append({'p_bp':0, 'p_sp':d['Close'][0],'p_p_bp':0,'p_p_sp':0,'p_tdate': d['index'][0],'strtategy2_trend_signal':-1},ignore_index = True)
         #   d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
        elif data['st_signal'][-1] == 0 and data['st_position'][-1] ==1:
           # data1 = data[(data['st_signal'] == 1) & (data['st_position'] ==1)]
            d =pd.DataFrame( data.iloc[-1,:]).T
           # buy_price.append(d['Close'].values)
           # d.index = d.index.strftime('%d/%m/%Y')
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
            d = d.reset_index()
            f= f.append({'p_bp':0, 'p_sp':0,'p_p_bp':d['Close'][0],'p_p_sp':0,'p_tdate': d['index'][0], 'strtategy2_trend_signal':0},ignore_index = True)
         #   d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
        elif data['st_signal'][-1] == 0 and data['st_position'][-1] ==0:
          #  data1= data[(data['st_signal'] == -1) & (data['st_position'] ==0)]
            d =pd.DataFrame( data.iloc[-1,:]).T
            d.index = pd.to_datetime(d.index, format='%Y-%m-%d')
          #  d.index = d.index.strftime('%d/%m/%Y')
            d = d.reset_index()
            f= f.append({'p_bp':0, 'p_sp':0,'p_p_bp':0,'p_p_sp':d['Close'][0],'p_tdate': d['index'][0],'strtategy2_trend_signal':0},ignore_index = True)
        f.index = [tick]
        Close = data.loc[data.index[-1],'Close']
        f['p_cur_p'] = [Close]
        #dat = data.index[-1]
      #  dat1 =dat.date() 
        today = dt.today()  
     
        f['p_tdate'] = [today]
        f['p_date'] =[today]
        strategy2 = pd.concat([f,strategy2], axis=0)
    strategy2['p_name'] = 'Purple Trend'
    
    
    return strategy2

# stock_lists = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\stock_lists_pool_3_13.csv') 
# symbols = list(stock_lists['0']) 
stock_lists = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\stock_lists_pool_1_26_2022.csv')

#stock_lists = pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\stock_lists_pool_3_13.csv') 
symbols = list(stock_lists['0']) 
#start = '2021-03-01'
from datetime import datetime as dt
import datetime
# symbols.remove('BCE')
# #symbols.remove('GEHCV')
# symbols.remove('RXDX')
# symbols.remove('ALTM')
# symbols.remove('YUM')
# symbols.remove('ZEUS')
# symbols.remove('SAFM')
# symbols.remove('MANT')
#symbols.remove('CTXS')
#symbols.remove('DRE')
#ticker = 'AWR'
# h = ['META']
# g = symbols+h
#symbols = g
# yesterday = today-datetime.timedelta(1)
# start = (2020,3,1)
# end = (yesterday.year, yesterday.month,     yesterday.day)
today = dt.today()
end = today-datetime.timedelta(1)
#start = '2021-03-01'
start = today-datetime.timedelta(200)
n= 3# number of groups
groups = np.array_split(symbols, n)
group1 = groups[0].tolist()
group2 = groups[1].tolist()
group3 = groups[2].tolist()
# group4 = groups[3].tolist()
# group5 = groups[4].tolist()
# group6 = groups[5].tolist()
# group7 = groups[6].tolist()
from datetime import datetime as dt
import datetime
import time
data4 =  strategy_signal2(group1) 
time.sleep(60)
data5 = strategy_signal2(group2)     
time.sleep(60)
data6= strategy_signal2(group3)
time.sleep(60)
#单独run 
##########################################################################################
#time.sleep(60)
#group3.remove('TTC')
# data61= strategy_signal2(group4) 
# data62= strategy_signal2(group5) 
#data6= strategy_signal2(group3)
strategy2_signal = pd.concat([data4, data5, data6], axis=0)
strategy2_signal = strategy2_signal[strategy2_signal['strtategy2_trend_signal'] == 1]
#strategy2_signal=strategy2_signal.sort_index()
#strategy2_signal.to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\startegy2.csv')
# data4 = strategy_signal2(group4)
# data5 = strategy_signal2(group5)
# data6= strategy_signal2(group6)
# data7 = strategy_signal2(group7)
# strategy2 = pd.concat([data1, data2, data3, data4, data5, data6, data7], axis = 0)
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
# Read Images
img1 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_buy.jpg')
img2 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_downtrend.jpg')
img3 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_no_signal.jpg')
img4 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_sell.jpg')
img5 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_sideways.jpg')
img6 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_uptrend.jpg')
# Output Images
def get_pa_signal2(strategy2_symbol):
    for ticker in strategy2_symbol:
        img1 = mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_buy.jpg')
        fig = plt.figure(figsize=(10, 10))
        plt.imshow(img1)
        plt.axis("off")
            # plt.grid(b=None)
        plt.subplots_adjust(top=1, bottom=0, right=1,
                            left=0, hspace=0, wspace=0)
        path = "C:\\users\jizha\Desktop\seabridge fintech\purpleline_pa_icon\\"
        plt.savefig(path + '{}.jpg'.format(ticker+"_pa_purpleline_signal"),
                    dpi=72, transparent=True, bbox_inches='tight', pad_inches=0)
        plt.show()

    #dr= 'https://3arbzfbsh-cname-us.ngrok.io'
    p_pa_signal_url = pd.DataFrame()
    for ticker in strategy2_symbol:
        image = pd.DataFrame()
        dr = "https://3arbzfbsh-cname-us.ngrok.io/Desktop/seabridge%20fintech/purpleline_pa_icon/" + \
            ticker+"_pa_purpleline_signal.jpg"
        tick = ticker
        image['p_PA_image_buy_sell'] = [dr]
        image.index = [tick]
        p_pa_signal_url = pd.concat([p_pa_signal_url, image], axis=0)
    p_pa_signal_url = p_pa_signal_url.sort_index()
    return p_pa_signal_url


strategy2_symbol = list(strategy2_signal.index)
p_pa_signal_url = get_pa_signal2(strategy2_symbol)
strategy2_signal = strategy2_signal.sort_index()

strategy2 = strategy2_signal.merge(p_pa_signal_url, left_index=True, right_index=True)
strategy2['p_b_r_p'] = strategy2['p_bp']+strategy2['p_bp']*0.005
strategy2['p_b_r_m'] = strategy2['p_bp'] - strategy2['p_bp']*0.005
strategy2['g_b_zon'] = 'Yes'
strategy2.columns = strategy2.columns.to_series().apply(lambda x: x.strip())
strategy2[['p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']] = strategy2[[
    'p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']].astype(float)
strategy2[['p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']] = strategy2[[
    'p_bp', 'p_sp', 'p_p_bp', 'p_p_sp', 'p_cur_p', 'p_b_r_p', 'p_b_r_m']].applymap("{:,.2f}".format)

# stocks[['lastDiv','price']] = stocks[['lastDiv','price']].applymap("{0:,.2f}".format)
#         stocks['div_yiel'] =stocks['div_yiel'].apply(lambda x: "{0:.2f}%".format(x*100))

from datetime import datetime as dt
import datetime
today = dt.today()
a=str(today.year)
b=str(today.month)
c=str(today.day)
print(c)
#strategy1['g_tdate']= pd.to_datetime(strategy1['g_tdate']).dt.date
#strategy1['g_date']= pd.to_datetime(strategy1['g_date']).dt.date
strategy2['p_tdate']= pd.to_datetime(strategy2['p_tdate']).dt.date
strategy2['p_date']= pd.to_datetime(strategy2['p_date']).dt.date


#strategy2 .to_csv(r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy2.csv_'+a+'_'+b+'_'+c+'.csv')
strategy2.to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\startegy2.csv_'+a+'_'+b+'_'+c+'.csv')
#strategy2 .to_csv(r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy2.csv_'+a+'_'+b+'_'+c+'.csv') 

strategy2 = strategy2.drop_duplicates()


from datetime import datetime as dt
import datetime
today = dt.today()
a=str(today.year)
b=str(today.month)
c=str(today.day)
print(c)
#strategy1['g_tdate']= pd.to_datetime(strategy1['g_tdate']).dt.date
#strategy1['g_date']= pd.to_datetime(strategy1['g_date']).dt.date
strategy2['p_tdate']= pd.to_datetime(strategy2['p_tdate']).dt.date
strategy2['p_date']= pd.to_datetime(strategy2['p_date']).dt.date
strategy2 =pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\startegy2.csv_'+a+'_'+b+'_'+c+'.csv')
#strategy2 .to_csv(r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy2.csv_'+a+'_'+b+'_'+c+'.csv')
#strategy2 .to_csv(r'C:\Users\jizha\Desktop\Strategy_auto_2_21_2022\results\startegy2.csv_'+a+'_'+b+'_'+c+'.csv') 

strategy2 = strategy2.drop_duplicates()

