diff --git a/README.md b/README.md index e1cace3d..168a15e5 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,10 @@ Screenipy is totally customizable and it can screen stocks with the settings tha ## How to use? (New Version - GUI Based) +[![Screeni-py - Detailed Installation Guide](https://markdown-videos-api.jorgenkh.no/url?url=https%3A%2F%2Fyoutu.be%2F2HMN0ac4H20)](https://youtu.be/2HMN0ac4H20) [![Screeni-py - Configuration and Usage | Screenipy - Python NSE Stock Screener](https://markdown-videos-api.jorgenkh.no/url?url=https%3A%2F%2Fyoutu.be%2FJCn6z1A7INI)](https://youtu.be/JCn6z1A7INI) +[![Screeni-py - How to install Software Updates? | Screenipy - Python NSE Stock Screener](https://markdown-videos-api.jorgenkh.no/url?url=https%3A%2F%2Fyoutu.be%2FT41m13iMyJc)](https://youtu.be/T41m13iMyJc) + * Install Docker Desktop and pull the `latest` docker image from the [release](https://github.com/pranjal-joshi/Screeni-py/releases/latest) page. * Checkout this [YouTube Video](https://youtu.be/2HMN0ac4H20) for detailed installation guide. @@ -105,17 +108,15 @@ Try to tweak these parameters as per your trading styles. For example, If you're | Executable/Binary File | Docker | | :-- | :-- | | [![GitHub all releases](https://img.shields.io/github/downloads/pranjal-joshi/Screeni-py/total?color=Green&label=Downloads&style=for-the-badge)](#) | ![Docker Pulls](https://img.shields.io/docker/pulls/joshipranjal/screeni-py?style=for-the-badge&logo=docker) | -| Download Directly from the [Release](https://github.com/pranjal-joshi/Screeni-py/releases/latest) page | Need to Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) ⚠️| +| Download Directly from the [Release](https://github.com/pranjal-joshi/Screeni-py/releases/latest) page (DEPRECATED) | Need to Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) ⚠️| | May take a long time to open the app | Loads quickly | | Slower screening | Performance boosted as per your CPU capabilities | -| Supports Excel Watchlist screening, Export results as excel | Excel features are not supported ⚠️ | | You may face errors/warnings due to different CPU arch of your system ⚠️ | Compatible with all x86_64/amd64/arm64 CPUs irrespective of OS (including Mac M1/M2) | | Works only with Windows 10/11 ⚠️ | Works with older versions of Windows as well | | Different file for each OS | Same container is compatible with everyone | | Antivirus may block this as untrusted file ⚠️ | No issues with Antivirus | | Need to download new file for every update | Updates quickly with minimal downloading | | No need of commands/technical knowledge | Very basic command execution skills may be required | -| Custom configuration works and persists accross the runs/restarts | Config file resets at every run but your custom config can be uploaded in GUI mode | | Incompatible with Vector Database ⚠️ | Compatible with all Python libraries | ### How to set up and use Screeni-py with Docker? diff --git a/requirements.txt b/requirements.txt index 3e5d5c6b..59bf3aae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,6 +61,7 @@ webencodings # Installed as dependency for html5lib pandas_ta # protobuf==3.19.6 protobuf -streamlit==1.26.0 +# streamlit==1.26.0 +streamlit tensorflow chromadb==0.4.10 \ No newline at end of file diff --git a/src/classes/Changelog.py b/src/classes/Changelog.py index 91144fc0..4bf42302 100644 --- a/src/classes/Changelog.py +++ b/src/classes/Changelog.py @@ -7,7 +7,7 @@ from classes.ColorText import colorText -VERSION = "2.04" +VERSION = "2.05" changelog = colorText.BOLD + '[ChangeLog]\n' + colorText.END + colorText.BLUE + ''' [1.00 - Beta] @@ -228,4 +228,8 @@ 3. Progressbar added for screening to GUI 4. Documentation updated +[2.05] +1. Download Results button added +2. Docker DNS moved to Google DNS + ''' + colorText.END diff --git a/src/classes/ConfigManager.py b/src/classes/ConfigManager.py index 0be7ca3c..8d87e443 100644 --- a/src/classes/ConfigManager.py +++ b/src/classes/ConfigManager.py @@ -57,8 +57,8 @@ def setConfig(self, parser, default=False, showFileCreatedText=True): str(self.consolidationPercentage)) parser.set('config', 'shuffle', 'y') parser.set('config', 'cacheStockData', 'y') - parser.set('config', 'onlyStageTwoStocks', 'y') - parser.set('config', 'useEMA', 'n') + parser.set('config', 'onlyStageTwoStocks', 'y' if self.stageTwo else 'n') + parser.set('config', 'useEMA', 'y' if self.useEMA else 'n') try: fp = open('screenipy.ini', 'w') parser.write(fp) @@ -157,8 +157,12 @@ def getConfig(self, parser): self.cacheEnabled = True if 'n' not in str(parser.get('config', 'onlyStageTwoStocks')).lower(): self.stageTwo = True + else: + self.stageTwo = False if 'y' not in str(parser.get('config', 'useEMA')).lower(): self.useEMA = False + else: + self.useEMA = True except configparser.NoOptionError: input(colorText.BOLD + colorText.FAIL + '[+] Screenipy requires user configuration again. Press enter to continue..' + colorText.END) diff --git a/src/release.md b/src/release.md index fa81ffec..d082e2f5 100644 --- a/src/release.md +++ b/src/release.md @@ -16,6 +16,7 @@ Celebrating more than 7K+ Downloads - Thank You for your support :tada: ## Installation Guide +[![Screeni-py - How to install Software Updates? | Screenipy - Python NSE Stock Screener](https://markdown-videos-api.jorgenkh.no/url?url=https%3A%2F%2Fyoutu.be%2FT41m13iMyJc)](https://youtu.be/T41m13iMyJc) [![Screeni-py - Detailed Installation Guide](https://markdown-videos-api.jorgenkh.no/url?url=https%3A%2F%2Fyoutu.be%2F2HMN0ac4H20)](https://youtu.be/2HMN0ac4H20) ## Downloads @@ -41,17 +42,15 @@ Celebrating more than 7K+ Downloads - Thank You for your support :tada: | Executable/Binary File | Docker | | :-- | :-- | | [![GitHub all releases](https://img.shields.io/github/downloads/pranjal-joshi/Screeni-py/total?color=Green&label=Downloads&style=for-the-badge)](#) | ![Docker Pulls](https://img.shields.io/docker/pulls/joshipranjal/screeni-py?style=for-the-badge&logo=docker) | -| Download Directly from the [Release](https://github.com/pranjal-joshi/Screeni-py/releases/latest) page | Need to Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) ⚠️| +| Download Directly from the [Release](https://github.com/pranjal-joshi/Screeni-py/releases/latest) page (DEPRECATED) | Need to Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) ⚠️| | May take a long time to open the app | Loads quickly | | Slower screening | Performance boosted as per your CPU capabilities | -| Supports Excel Watchlist screening, Export results as excel | Excel features are not supported ⚠️ | | You may face errors/warnings due to different CPU arch of your system ⚠️ | Compatible with all x86_64/amd64/arm64 CPUs irrespective of OS (including Mac M1/M2) | | Works only with Windows 10/11 ⚠️ | Works with older versions of Windows as well | | Different file for each OS | Same container is compatible with everyone | | Antivirus may block this as untrusted file ⚠️ | No issues with Antivirus | | Need to download new file for every update | Updates quickly with minimal downloading | | No need of commands/technical knowledge | Very basic command execution skills may be required | -| Custom configuration works and persists accross the runs/restarts | Config file resets at every run but your custom config can be uploaded in GUI mode | | Incompatible with Vector Database ⚠️ | Compatible with all Python libraries | diff --git a/src/streamlit_app.py b/src/streamlit_app.py index 22cfaa7f..bb08cc43 100644 --- a/src/streamlit_app.py +++ b/src/streamlit_app.py @@ -4,6 +4,7 @@ import os import configparser import urllib +import datetime from time import sleep from pathlib import Path from threading import Thread @@ -41,7 +42,16 @@ def check_updates(): def show_df_as_result_table(): try: df = pd.read_pickle('last_screened_unformatted_results.pkl') - st.markdown(f'#### 🔍 Found {len(df)} Results') + ac, bc = st.columns([6,1]) + ac.markdown(f'#### 🔍 Found {len(df)} Results') + bc.download_button( + label="Download Results", + data=df.to_csv().encode('utf-8'), + file_name=f'screenipy_results_{datetime.datetime.now().strftime("%H:%M:%S_%d-%m-%Y")}.csv', + mime='text/csv', + type='secondary', + use_container_width=True + ) df.index = df.index.map(lambda x: "https://in.tradingview.com/chart?symbol=NSE%3A" + x) df.index = df.index.map(lambda x: f'{x.split("%3A")[-1]}') df['Stock'] = df.index @@ -391,7 +401,7 @@ def get_extra_inputs(tickerOption, executeOption, c_index=None, c_criteria=None, ac, bc, cc, dc = st.columns([1,1,1,1]) shuffle = ac.checkbox('Shuffle stocks while screening', value=configManager.shuffleEnabled, disabled=True) cache = bc.checkbox('Enable caching of stock data after market hours', value=configManager.cacheEnabled, disabled=True) - stagetwo = cc.checkbox('Screen only for Stage-2 stocks', value=configManager.stageTwo) + stagetwo = cc.checkbox('Screen only for [Stage-2](https://www.investopedia.com/articles/investing/070715/trading-stage-analysis.asp#:~:text=placed%20stops.-,Stage%202%3A%20Uptrends,-Image%20by%20Sabrina) stocks', value=configManager.stageTwo) useema = dc.checkbox('Use EMA instead of SMA', value=configManager.useEMA) save_button = st.button('Save Configuration', on_click=on_config_change, type='primary', use_container_width=True)