Arrechenash commited on
Commit
809cd64
·
1 Parent(s): eb4f72b

Show data in sections

Browse files
src/main.py CHANGED
@@ -1,113 +1,5 @@
1
- from datetime import date
2
-
3
  import streamlit as st
4
 
5
- from datasource import get_data, get_dataset_path, load_symbols
6
-
7
- st.set_page_config(layout="wide")
8
-
9
- defaults = {
10
- "dataset": get_dataset_path("alpaca"),
11
- "date": None,
12
- "symbols": [],
13
- "min_open": 1.0,
14
- "min_gap": None,
15
- "min_run": None,
16
- "min_vol": 1_000_000,
17
- "min_relvol": 2,
18
- "x_axis": "open",
19
- "y_axis": "change_pct",
20
- }
21
- for key, value in defaults.items():
22
- if key not in st.session_state:
23
- st.session_state[key] = value
24
-
25
- st.title("Market Overview")
26
-
27
- with st.sidebar:
28
- st.session_state.dataset = st.selectbox(
29
- "Dataset",
30
- (
31
- get_dataset_path("alpaca"),
32
- get_dataset_path("intraday"),
33
- ),
34
- )
35
-
36
- use_date_filter = st.checkbox("Filter by date range", value=False)
37
- if use_date_filter:
38
- start_default = date.today().replace(day=1)
39
- end_default = date.today()
40
- st.session_state.date = st.date_input(
41
- "Date range",
42
- value=(start_default, end_default),
43
- )
44
- else:
45
- st.session_state.date = None
46
-
47
- st.session_state.symbols = st.multiselect(
48
- "Symbols", load_symbols(st.session_state.dataset)
49
- )
50
- st.session_state.min_open = st.number_input(
51
- "Min open", value=st.session_state.min_open
52
- )
53
- st.session_state.min_gap = st.number_input("Min gap %", value=None)
54
- st.session_state.min_run = st.number_input("Min run %", value=None)
55
- st.session_state.min_vol = st.number_input(
56
- "Min volume", value=st.session_state.min_vol
57
- )
58
- st.session_state.min_relvol = st.number_input(
59
- "Min rel volume", value=st.session_state.min_relvol
60
- )
61
-
62
- results_placeholder = st.empty()
63
-
64
- f = st.session_state
65
- filters = []
66
- if f.date and isinstance(f.date, tuple) and len(f.date) == 2:
67
- start_date, end_date = f.date
68
- filters.append(
69
- f"date >= '{start_date.strftime('%Y-%m-%d')}' AND date <= '{end_date.strftime('%Y-%m-%d')}'"
70
- )
71
-
72
- if f.symbols:
73
- filters.append(f"symbol IN {tuple(f.symbols)}")
74
- if f.min_open:
75
- filters.append(f"open >= {f.min_open}")
76
- if f.min_vol:
77
- filters.append(f"volume >= {f.min_vol}")
78
- if f.min_relvol:
79
- filters.append(f"relative_volume >= {f.min_relvol}")
80
- if f.min_gap:
81
- filters.append(f"gap_pct >= {f.min_gap}")
82
- if f.min_run:
83
- filters.append(f"run_pct >= {f.min_run}")
84
-
85
- df = get_data(st.session_state.dataset, filters if filters else None)
86
-
87
- with results_placeholder:
88
- st.markdown("---")
89
- st.markdown(f"**Results: {len(df)}**")
90
-
91
- if df.empty:
92
- st.info("No data found with current filters.")
93
- else:
94
- numeric_cols = df.select_dtypes("number").columns.tolist()
95
-
96
- col1, col2 = st.columns(2)
97
- with col1:
98
- st.selectbox(
99
- "X-axis",
100
- numeric_cols,
101
- key="x_axis",
102
- )
103
- with col2:
104
- st.selectbox(
105
- "Y-axis",
106
- numeric_cols,
107
- key="y_axis",
108
- )
109
 
110
- st.scatter_chart(
111
- df, x=st.session_state.x_axis, y=st.session_state.y_axis, color="symbol"
112
- )
113
- st.dataframe(df, use_container_width=True)
 
 
 
1
  import streamlit as st
2
 
3
+ st.title("Welcome")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
+ st.write("Select sections at the left to navigate")
 
 
 
src/pages/data_daily.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from datasource import get_data, get_dataset_path
3
+
4
+ st.set_page_config(layout="wide")
5
+
6
+ df = get_data(get_dataset_path("alpaca"))
7
+
8
+ st.dataframe(df, use_container_width=True)
9
+
10
+ if st.button("Refresh"):
11
+ st.cache_data.clear()
src/pages/data_intraday.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from datasource import get_data, get_dataset_path
3
+
4
+ st.set_page_config(layout="wide")
5
+
6
+ df = get_data(get_dataset_path("intraday"))
7
+
8
+ st.dataframe(df, use_container_width=True)
9
+
10
+ if st.button("Refresh"):
11
+ st.cache_data.clear()
src/pages/market.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from datetime import date
2
+
3
+ import streamlit as st
4
+
5
+ from datasource import get_data, get_dataset_path, load_symbols
6
+
7
+ st.set_page_config(layout="wide")
8
+
9
+ defaults = {
10
+ "dataset": get_dataset_path("alpaca"),
11
+ "date": None,
12
+ "symbols": [],
13
+ "min_open": 1.0,
14
+ "min_gap": None,
15
+ "min_run": None,
16
+ "min_vol": 1_000_000,
17
+ "min_relvol": 2,
18
+ "x_axis": "open",
19
+ "y_axis": "change_pct",
20
+ }
21
+ for key, value in defaults.items():
22
+ if key not in st.session_state:
23
+ st.session_state[key] = value
24
+
25
+ st.title("Market Overview")
26
+
27
+ with st.sidebar:
28
+ st.session_state.dataset = st.selectbox(
29
+ "Dataset",
30
+ (
31
+ get_dataset_path("alpaca"),
32
+ get_dataset_path("intraday"),
33
+ ),
34
+ )
35
+
36
+ use_date_filter = st.checkbox("Filter by date range", value=False)
37
+ if use_date_filter:
38
+ start_default = date.today().replace(day=1)
39
+ end_default = date.today()
40
+ st.session_state.date = st.date_input(
41
+ "Date range",
42
+ value=(start_default, end_default),
43
+ )
44
+ else:
45
+ st.session_state.date = None
46
+
47
+ st.session_state.symbols = st.multiselect(
48
+ "Symbols", load_symbols(st.session_state.dataset)
49
+ )
50
+ st.session_state.min_open = st.number_input(
51
+ "Min open", value=st.session_state.min_open
52
+ )
53
+ st.session_state.min_gap = st.number_input("Min gap %", value=None)
54
+ st.session_state.min_run = st.number_input("Min run %", value=None)
55
+ st.session_state.min_vol = st.number_input(
56
+ "Min volume", value=st.session_state.min_vol
57
+ )
58
+ st.session_state.min_relvol = st.number_input(
59
+ "Min rel volume", value=st.session_state.min_relvol
60
+ )
61
+
62
+ results_placeholder = st.empty()
63
+
64
+ f = st.session_state
65
+ filters = []
66
+ if f.date and isinstance(f.date, tuple) and len(f.date) == 2:
67
+ start_date, end_date = f.date
68
+ filters.append(
69
+ f"date >= '{start_date.strftime('%Y-%m-%d')}' AND date <= '{end_date.strftime('%Y-%m-%d')}'"
70
+ )
71
+
72
+ if f.symbols:
73
+ filters.append(f"symbol IN {tuple(f.symbols)}")
74
+ if f.min_open:
75
+ filters.append(f"open >= {f.min_open}")
76
+ if f.min_vol:
77
+ filters.append(f"volume >= {f.min_vol}")
78
+ if f.min_relvol:
79
+ filters.append(f"relative_volume >= {f.min_relvol}")
80
+ if f.min_gap:
81
+ filters.append(f"gap_pct >= {f.min_gap}")
82
+ if f.min_run:
83
+ filters.append(f"run_pct >= {f.min_run}")
84
+
85
+ df = get_data(st.session_state.dataset, filters if filters else None)
86
+
87
+ with results_placeholder:
88
+ st.markdown("---")
89
+ st.markdown(f"**Results: {len(df)}**")
90
+
91
+ if df.empty:
92
+ st.info("No data found with current filters.")
93
+ else:
94
+ numeric_cols = df.select_dtypes("number").columns.tolist()
95
+
96
+ col1, col2 = st.columns(2)
97
+ with col1:
98
+ st.selectbox(
99
+ "X-axis",
100
+ numeric_cols,
101
+ key="x_axis",
102
+ )
103
+ with col2:
104
+ st.selectbox(
105
+ "Y-axis",
106
+ numeric_cols,
107
+ key="y_axis",
108
+ )
109
+
110
+ st.scatter_chart(
111
+ df, x=st.session_state.x_axis, y=st.session_state.y_axis, color="symbol"
112
+ )
113
+ st.dataframe(df, use_container_width=True)