From d979b6b95b579d2cf340f47a7010efc4793f0c14 Mon Sep 17 00:00:00 2001 From: Kevin Johnson Date: Wed, 8 Dec 2021 14:26:27 -0800 Subject: [PATCH 1/6] DEV jnb dev --- jnb/pta_streamlit.py | 1076 ++++++++++++++++++++++++++++++++++++++ jnb/sample.json | 20 + jnb/simple_strategy.json | 12 + jnb/talit.py | 499 ++++++++++++++++++ jnb/test.json | 10 + 5 files changed, 1617 insertions(+) create mode 100644 jnb/pta_streamlit.py create mode 100644 jnb/sample.json create mode 100644 jnb/simple_strategy.json create mode 100644 jnb/talit.py create mode 100644 jnb/test.json diff --git a/jnb/pta_streamlit.py b/jnb/pta_streamlit.py new file mode 100644 index 0000000..7234f37 --- /dev/null +++ b/jnb/pta_streamlit.py @@ -0,0 +1,1076 @@ +# -*- coding: utf-8 -*- +import datetime +from os import read +from pathlib import Path +from json import load as json_load +from json import loads as json_loads +from json import dump as json_dump +from json import dumps as json_dumps + +from time import sleep as tsleep +from matplotlib.pyplot import axis + +import numpy as np +import pandas as pd + +# import matplotlib.pyplot as plt +# import matplotlib.colors as colors +# from matplotlib import rc +# import mplfinance as mpf +# from tqdm.notebook import trange, tqdm +import streamlit as st +from streamlit.state.session_state import SessionState + +import pandas_ta as ta + + +dt_today = datetime.datetime.now() +e = pd.DataFrame() + +pta_session = {} + +strategy_sample = \ +"""{ + "name": "Sample JSON Strategy", + "description": "Sample JSON Strategy Test", + "ta": [ + {"kind": "ema", "length": 10, "sma": false}, + {"kind": "sma", "length": 50, "talib": false}, + { + "kind": "bbands", + "talib": true, + "col_numbers": [0, 1, 2], + "col_names": ["BBL", "BBM", "BBU"] + }, + { + "kind": "atr", + "length": 50, + "talib": true, + "col_names": ["ATR"] + } + ] +}""" + +if "pta" not in st.session_state: + st.session_state["pta"] = pta_session + +print(f"[!] st.session_state: {st.session_state}\n") + + + +def _chart(): + pass + +def _count_down_container(message:str = None, n:int = 1): + """https://docs.streamlit.io/library/api-reference/layout/st.empty""" + with st.empty(): + for seconds in range(n): + if message is None: + st.write(f"⏳ {seconds} seconds have passed") + else: + st.write(message) + tsleep(1) + + if message is None: st.write("✔️ Times up!") + st.empty() + + +def _is_st_column(column): + if column is None: return st + return column if isinstance(column, st._DeltaGenerator) else st + + +@st.cache(ttl=60, show_spinner=True) +def _load_file(file): + """Load file of type st.UploadedFile""" + suffix = file.name.split(".")[1] + result = None + if suffix == "csv": + result = pd.read_csv(file) + elif suffix == "json": + result = pd.read_json(file) + elif suffix == "pkl": + result = pd.read_pickle(file) + else: # Default + result = pd.read_csv(file) + return result + + +def _max_width_(pct_width:int = None): + """"https://discuss.streamlit.io/t/custom-render-widths/81/8""" + if pct_width is None: + max_width_str = f"max-width: 2000px;" + else: + max_width_str = f"max-width: {pct_width}%;" + + st.markdown( + f""" +