| """ |
| This module provides functionality for performing Automatic data updating tasks. |
| """ |
| import threading |
| import time |
| import pandas as pd |
| from stls import Stocks |
| from levels import eqt |
| from datetime import datetime |
| from pymongo import MongoClient |
| from datetime import datetime, timedelta |
| import pytz |
| import os |
|
|
| tz = pytz.timezone('Asia/Kolkata') |
| mongo_url = os.environ['MongoURL'] |
|
|
| def UpdatedCollectionName(): |
| current_time = datetime.now(tz) |
| collection_name = current_time.strftime('%Y-%m-%d') |
| if current_time.time() >= datetime.strptime('15:30', '%H:%M').time(): |
| collection_name = (current_time + timedelta(days=1)).strftime('%Y-%m-%d') |
| return collection_name |
| else: |
| return collection_name |
| |
| import concurrent.futures |
| from stls import fetch_stock_data |
|
|
| def get_live_price(symbol): |
| return fetch_stock_data(symbol.replace('.NS',''), interval=15, days=1).iloc[-1][['High', 'Close']].values |
|
|
| def status(row): |
| if row['LTP'] > row['High'] or row['High_T'] > row['High']: |
| return "Active" |
| else: |
| return "Pending" |
|
|
| def get_live_prices(df): |
| print("it's live") |
| symbols = df['Symbol'].tolist() |
| with concurrent.futures.ThreadPoolExecutor() as executor: |
| prices = list(executor.map(get_live_price, symbols)) |
| df[['High_T', 'LTP']] = prices |
| df['Status'] = df.apply(status, axis=1) |
| return df |
|
|
| class DataManager: |
| """ |
| This is a DataManager class that demonstrates its functionality. |
| """ |
| def __init__(self): |
| self.stocks = None |
| self.equity = None |
| self.data_thread = threading.Thread(target=self.update_data) |
| self.data_thread.daemon = True |
| self.data_thread.start() |
|
|
| def update_data(self): |
| while True: |
| client = MongoClient(mongo_url) |
| db = client['mydatabase'] |
| collection_name = UpdatedCollectionName() |
| if collection_name in db.list_collection_names(): |
| collection = db[collection_name] |
| cursor = collection.find({}) |
| stocks = pd.DataFrame(list(cursor)) |
| stocks.drop('_id', axis=1, inplace=True) |
| self.stocks = stocks |
| else: |
| stocks = Stocks() |
| collection = db[collection_name] |
| cursor = collection.find({}) |
| stocks = pd.DataFrame(list(cursor)) |
| stocks.drop('_id', axis=1, inplace=True) |
| self.stocks = stocks |
| time.sleep(120) |
| |
| def get_stocks_data(self): |
| stocks = get_live_prices(self.stocks) |
| self.results = stocks.to_dict(orient="records") |
| return self.results |
| |
| def get_equity_data(self, ticker, startdate, share_qty): |
| self.equity = eqt(ticker, startdate, share_qty) |
| return self.equity |
| |