-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathrun.py
120 lines (99 loc) · 4.13 KB
/
run.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import warnings
warnings.filterwarnings("ignore")
import logging
import time
import pandas as pd
import plotly.graph_objects as go
from zvt.api.data_type import Region, Provider
from zvt.factors.squeeze_factor import SqueezeFactor
# from zvt.contract.reader import DataReader
# from zvt.domain import Stock1dKdata, Stock
import zvt.stats as qs
logger = logging.getLogger(__name__)
def chart(dfs):
def sub_chart(title, df):
candlestick = go.Candlestick(x=df['timestamp'], open=df['open'], high=df['high'], low=df['low'], close=df['close'])
upper_band = go.Scatter(x=df['timestamp'], y=df['upper_band'], name='Upper Bollinger Band', line={'color': 'red'})
lower_band = go.Scatter(x=df['timestamp'], y=df['lower_band'], name='Lower Bollinger Band', line={'color': 'red'})
upper_keltner = go.Scatter(x=df['timestamp'], y=df['upper_keltner'], name='Upper Keltner Channel', line={'color': 'blue'})
lower_keltner = go.Scatter(x=df['timestamp'], y=df['lower_keltner'], name='Lower Keltner Channel', line={'color': 'blue'})
data = [candlestick, upper_band, lower_band, upper_keltner, lower_keltner]
layout = go.Layout(
title='Stock Market Data Analysis - ' + title,
xaxis=dict(
title='Date',
titlefont=dict(
family='Courier New, monospace',
size=18,
color='#7f7f7f'),
rangeselector=dict(
buttons=list([
dict(count=1,
label="1m",
step="month",
stepmode="backward"),
dict(count=6,
label="6m",
step="month",
stepmode="backward"),
dict(count=1,
label="YTD",
step="year",
stepmode="todate"),
dict(count=1,
label="1y",
step="year",
stepmode="backward"),
dict(step="all")
])
),
rangeslider=dict(
visible=True
),
type="date"
),
yaxis=dict(
title='Stock market price',
titlefont=dict(
family='Courier New, monospace',
size=18,
color='#7f7f7f')
)
)
return go.Figure(data=data, layout=layout)
total = len(dfs)
if total > 0:
for key, df in dfs.items():
fig = sub_chart(key, df)
fig.show()
if __name__ == '__main__':
from datetime import datetime
import time
now = time.time()
# reader = DataReader(region=Region.US,
# codes=['FB', 'AMD'],
# data_schema=Stock1dKdata,
# entity_schema=Stock,
# provider=Provider.Yahoo)
# gb = reader.data_df.groupby('code')
# dfs = {x : gb.get_group(x) for x in gb.groups}
factor = SqueezeFactor(region=Region.US,
codes=['FB', 'AMD'],
start_timestamp='2015-01-01',
end_timestamp=datetime.now().strftime("%Y-%m-%d"),
kdata_overlap=4,
provider=Provider.Yahoo)
gb = factor.result_df.groupby('code')
dfs = {x: gb.get_group(x) for x in gb.groups}
print("1", time.time() - now)
target = pd.Series(dfs['FB'].close.pct_change().tolist(), index=dfs['FB'].timestamp)
bench = pd.Series(dfs['AMD'].close.pct_change().tolist(), index=dfs['AMD'].timestamp)
target_len = len(target)
bench_len = len(bench)
if bench_len > target_len:
bench = bench[-target_len:]
print("2", time.time() - now)
qs.reports.html(returns=target, benchmark=bench, output='b.html')
print("3", time.time() - now)
chart(dfs)
print("4", time.time() - now)