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


# 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)
# c1= pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\startegy1.csv_'+a+'_'+b+'_'+c+'.csv') 
# c1 = c1.rename(columns = {'Unnamed: 0':'symbol'})
# strategy1 = c1.set_index('symbol')

# today = dt.today()
# a = str(today.year)
# b = str(today.month)
# c = str(today.day)
# d = pd.read_csv( r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\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\seabridge_datapool1\final_strategy_data_temporaly\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()

# f=pd.read_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\all_data.csv') 
# f = f.rename(columns = {'Unnamed: 0':'symbol'})
# stock_info_data3  = f.set_index('symbol')

#stock_info_data3 .to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\all_data.csv') 
def get_trend (ticker, start, end):
    #finnhub_client = finnhub.Client(api_key = "bt3efpf48v6tfcs816eg")
    # Stock candles
    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':'volume'})
    stock = stock.set_index('Date')
    stock= stock.sort_index()
  #  data1 = stock.copy()
    # from datetime import datetime
    # start =list(start)
    # end = list(end)
    # from datetime import datetime
    # 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')
    tsla = stock.copy()
       
    def get_ci(high, low, close, lookback):
        tr1 = pd.DataFrame(high - low).rename(columns = {0:'tr1'})
        tr2 = pd.DataFrame(abs(high - close.shift(1))).rename(columns = {0:'tr2'})
        tr3 = pd.DataFrame(abs(low - close.shift(1))).rename(columns = {0:'tr3'})
        frames = [tr1, tr2, tr3]
        tr = pd.concat(frames, axis = 1, join = 'inner').dropna().max(axis = 1)
        atr = tr.rolling(1).mean()
        highh = high.rolling(lookback).max()
        lowl = low.rolling(lookback).min()
        ci = 100 * np.log10((atr.rolling(lookback).sum()) / (high - lowl)) / np.log10(lookback)
        return ci
    
    tsla['ci_14'] = get_ci(tsla['high'], tsla['low'], tsla['close'], 14)
    tsla = tsla.dropna()
    

    def get_adx(high, low, close, lookback):
        plus_dm = high.diff()
        minus_dm = low.diff()
        plus_dm[plus_dm < 0] = 0
        minus_dm[minus_dm > 0] = 0
        
        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.rolling(lookback).mean()
        
        plus_di = 100 * (plus_dm.ewm(alpha = 1/lookback).mean() / atr)
        minus_di = abs(100 * (minus_dm.ewm(alpha = 1/lookback).mean() / atr))
        dx = (abs(plus_di - minus_di) / abs(plus_di + minus_di)) * 100
        adx = ((dx.shift(1) * (lookback - 1)) + dx) / lookback
        adx_smooth = adx.ewm(alpha = 1/lookback).mean()
        return plus_di, minus_di, adx_smooth
    
    tsla['plus_di'] = pd.DataFrame(get_adx(tsla['high'], tsla['low'], tsla['close'], 14)[0]).rename(columns = {0:'plus_di'})
    tsla['minus_di'] = pd.DataFrame(get_adx(tsla['high'], tsla['low'], tsla['close'], 14)[1]).rename(columns = {0:'minus_di'})
    tsla['adx'] = pd.DataFrame(get_adx(tsla['high'], tsla['low'], tsla['close'], 14)[2]).rename(columns = {0:'adx'})
    tsla = tsla.dropna()
    tsla['ci_14_considating'] = np.where(tsla['ci_14'] >61.8,0,1)
    #tsla['ADX_considating'] = np.where(tsla['adx']<20,0,1)
    tsla['trend'] = np.where(tsla['plus_di'] >tsla['minus_di'],1,0)
    
    
    tsla['market_trend'] = ''
    for i in tsla.index:
        if tsla['ci_14_considating'][i]  ==1 and tsla['trend'][i] ==1:
                tsla['market_trend'][i] = 1
        elif tsla['ci_14_considating'][i]  ==1  and tsla['trend'][i] ==0:
                tsla['market_trend'][i] = -1  
        elif tsla['ci_14_considating'][i]  ==0:
            tsla['market_trend'][i] = 0
    
    signal = tsla.iloc[-1,:]
    signal =pd.DataFrame(signal).T
    return  signal

def get_markett(symbols):    
    from datetime import datetime as dt
    import datetime
    today = dt.today()
    end= today-datetime.timedelta(1)
   # end = (yesterday.year, yesterday.month, yesterday.day)
    start = '2021-02-15'    
    market_trend = pd.DataFrame()  
    for ticker in symbols:
            data = get_trend (ticker, start, end)
            da = pd.DataFrame(data['market_trend'])
            da.index = [ticker]
            market_trend = pd.concat([market_trend, da], axis =0)     
    market_trend = market_trend.sort_index()
    return market_trend

stock_priceaction = get_markett(ticker_sum)

# Output Images

def get_pa_url(symbols):
    
    for ticker in symbols:
     
        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
     
        if stock_priceaction['market_trend'][ticker] ==1:
            img6= mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_uptrend.jpg')
            fig = plt.figure(figsize=(10,10))
            plt.imshow(img6)
            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\icon\\"
            plt.savefig(path +'{}.jpg'.format(ticker+"_pa_trend_signal"), dpi = 72,transparent = True, bbox_inches = 'tight', pad_inches = 0)
            plt.show()
            
        elif  stock_priceaction['market_trend'][ticker] ==-1:
            img2= mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_downtrend.jpg')
            fig = plt.figure(figsize=(10,10))
            plt.imshow(img2)
            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\icon\\"
            plt.savefig(path +'{}.jpg'.format(ticker+"_pa_trend_signal"), dpi = 72,transparent = True, bbox_inches = 'tight', pad_inches = 0)
            plt.show()
        elif  stock_priceaction['market_trend'][ticker] ==0:
            img5= mpimg.imread(r'C:/Users/jizha/App-googlesheet/icon/pa_sideways.jpg')
            fig = plt.figure(figsize=(10,10))
            plt.imshow(img5)
            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\icon\\"
            plt.savefig(path +'{}.jpg'.format(ticker+"_pa_trend_signal"), dpi = 72,transparent = True, bbox_inches = 'tight', pad_inches = 0)
            plt.show()
            
    priceaction_url = pd.DataFrame()
    for ticker in symbols:
        image = pd.DataFrame()
        dr = "https://3arbzfbsh-cname-us.ngrok.io/Desktop/seabridge%20fintech/icon/"+ticker+"_pa_trend_signal.jpg"
        image['priceaction_url']=[ dr]
        image.index =[ticker]
        priceaction_url  = pd.concat([priceaction_url ,image], axis =0)
    priceaction_url  = priceaction_url .sort_index()   
    return  priceaction_url


trend_ticker= list(stock_priceaction.index) 
priceaction_url = get_pa_url(trend_ticker) 

stock_info_data4 = stock_info_data3 .merge(priceaction_url,right_index = True, left_index = True)  


stock_info_data4 ['strb_na'] = '' 
stock_info_data4 ['strp_na'] = ''
stock_info_data4 ['strg_na'] = ''

# for ticker in ticker_sum:
#     if ticker in strategy1_signal.index:
#             stock_info_data4 ['strg_na'][ticker] ='1'
#     else:    
#             stock_info_data4 ['strg_na'][ticker] = '0'
    
#     if ticker in  strategy2_signal.index:
#         stock_info_data4 ['strp_na'][ticker] ='1'
#     else:
#         stock_info_data4 ['strp_na'] [ticker]= '0'
        
#     if ticker in strategy3_signal.index:
#         stock_info_data4 ['strb_na'][ticker] ='1'
#     else:
#         stock_info_data4 ['strb_na'] [ticker]= '0'
        
        
for ticker in ticker_sum:
    if ticker in strategy1.index:
            stock_info_data4 ['strg_na'][ticker] ='1'
    else:    
            stock_info_data4 ['strg_na'][ticker] = '0'
    
    if  ticker in strategy2.index:
        stock_info_data4 ['strp_na'][ticker] ='1'
    else:
        stock_info_data4 ['strp_na'] [ticker]= '0'
        
    if ticker in strategy3.index:
        stock_info_data4 ['strb_na'][ticker] ='1'
    else:
        stock_info_data4 ['strb_na'] [ticker]= '0'
   


########################
import requests

def get_companyinfo(symbols):
    api_key1 = '86dd63f6b8ae774b061232685b78eb52'    
    stocks1 = pd.DataFrame(columns = [ 'description','symbol', 'weburl', 'logourl', 'name','mktCap','volAvg', 'industry','lastDiv','price'])
    for symb  in symbols:
        comp = requests.get(f'https://financialmodelingprep.com/api/v3/profile/{symb}?apikey={api_key1}').json()[0]
        stocks1 = stocks1.append({'description': comp['description'], 'symbol': comp['symbol'],\
                        'weburl': comp['website'], 'logourl': comp['image'], 'name': comp['companyName'], 'mktCap':comp['mktCap'],'volAvg':comp['volAvg'],'industry':comp['industry'],'lastDiv':comp['lastDiv'],'price':comp['price']}, ignore_index = True)
    return stocks1    

a =get_companyinfo(ticker_sum)
a['div_yiel']= a['lastDiv']/a['price']
a[['lastDiv','price']] = a[['lastDiv','price']].applymap("{0:,.2f}".format) 
a['div_yiel'] =a['div_yiel'].apply(lambda x: "{0:.2f}%".format(x*100))

a =a.sort_index()
b = a[['symbol','volAvg','price','div_yiel']]
b =b.set_index('symbol')
b =b.sort_index()


stock_info_data5 =stock_info_data4.merge(b,right_index = True, left_index = True)

#stock_info_data5 ['AI_Signal'] ='None'


api_key = '86dd63f6b8ae774b061232685b78eb52' 
da = pd.DataFrame(columns = ['symbol','52wk_high','52wk_low'])
for ticker in ticker_sum:
    #ticker = 'AAPL'
    bs5 = requests.get(f'https://financialmodelingprep.com/api/v3/quote/{ticker}?apikey={api_key}').json()  
    da =da.append({'symbol':bs5[0]['symbol'],'52wk_high':bs5[0]['yearHigh'],  '52wk_low':bs5[0]['yearLow']}, ignore_index = True)
    
da = da.set_index('symbol')
da[['52wk_high','52wk_low']] =da [['52wk_high','52wk_low']] .applymap("{0:,.2f}".format) 

stock_info_data5 = stock_info_data5.merge(da, right_index = True, left_index = True)
stock_info_data5['Ticker']=stock_info_data5.index


from datetime import datetime as dt
today = dt.today()
a=str(today.year)
b=str(today.month)
import datetime
c=str(today.day)
stock_info_data5 .to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\final_strategy_data_temporaly\all_data_final_'+a+'_'+b+'_'+c+'.csv') 

stock_info_data2 .to_csv(r'C:\Users\jizha\Desktop\seabridge_datapool1\etf_'+a+'_'+b+'_'+c+'.csv')



#stock_info_data5.columns =stock_info_data5.columns.to_series().apply(lambda x: x.strip()) 

###############export to airtable###########
#stock_info_data5 =stock_info_data5.dtypes
#stock_info_data5 = stock_info_data5.astype(str)
#stock_info_data5['price'] = stock_info_data5['price'].astype(float)
#stock_info_data5['prev_close'] = stock_info_data5['prev_close'].astype(float)
stock_info_data5 [['description', 'logourl', 'name', 'mktCap', 'lastDiv', 'Date_access',
       'earning_date', 'pe_ratio(TTM)', 'eps(TTM)', 'im_res_sup',
       'image_return', 'center_gravity', 'vol_up1', 'vol_up2', 'vol_up3',
       'vol_down1', 'vol_down2', 'vol_down3', 
       'atr','last_peak','last_peakday','cagr_green', 'cagr_purple',
       'cagr_blue', 'cagr_benchmark', 'vol_green', 'vol_purple', 'vol_blue',
       'vlo_benchmark', 'sharp_green', 'sharp_purple', 'sharp_blue',
       'sharp_benchmark', 'max_dd_green', 'max_dd_purple', 'max_dd_blue',
       'max_dd_benchmark', 'sortino_green', 'sortino_purple', 'sortino_blue',
       'sortino_benchmark', 'priceaction_url', 'strb_na', 'strp_na', 'strg_na',
       'volAvg', 'price', 'div_yiel', '52wk_high', '52wk_low', 'Ticker']] =stock_info_data5 [['description', 'logourl', 'name', 'mktCap', 'lastDiv', 'Date_access',
       'earning_date', 'pe_ratio(TTM)', 'eps(TTM)', 'im_res_sup',
       'image_return', 'center_gravity', 'vol_up1', 'vol_up2', 'vol_up3',
       'vol_down1', 'vol_down2', 'vol_down3', 
       'atr', 'last_peak','last_peakday','cagr_green', 'cagr_purple',
       'cagr_blue', 'cagr_benchmark', 'vol_green', 'vol_purple', 'vol_blue',
       'vlo_benchmark', 'sharp_green', 'sharp_purple', 'sharp_blue',
       'sharp_benchmark', 'max_dd_green', 'max_dd_purple', 'max_dd_blue',
       'max_dd_benchmark', 'sortino_green', 'sortino_purple', 'sortino_blue',
       'sortino_benchmark', 'priceaction_url', 'strb_na', 'strp_na', 'strg_na',
       'volAvg', 'price', 'div_yiel', '52wk_high', '52wk_low', 'Ticker']].astype(str)
                                                                                              
#stock_info_data5[['recent_support',
     #  'recent_resistance', 'recent_stoploss', 'recent_trailingstoploss']] =  stock_info_data5[['recent_support',
     #  'recent_resistance', 'recent_stoploss', 'recent_trailingstoploss']].astype(float) 
                                                                                                
                                                                                                
stock_info_data5['recent_support'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_support']]                                                                                                
stock_info_data5['recent_resistance'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_resistance']]   
stock_info_data5['recent_stoploss'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_stoploss']]   
stock_info_data5['recent_trailingstoploss'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_trailingstoploss']]                                                                                                    
stock_info_data5['last_peak'] =[float(str(i).replace(",", "")) for i in stock_info_data5['last_peak']]                                                                                                    

