import pandas as pd
import talib
import os
import cufflinks as cf
import chart_studio.plotly  as py
import plotly.graph_objs as go
import plotly.offline as pyoff
import plotly.graph_objs as go
import plotly.io as pio
import pandas as pd
import numpy as np
import plotly
plotly.io.orca.config.executable = '/usr/local/bin/orca'
plotly.io.orca.config.save()
%reload_ext autoreload
%autoreload 2   
df = pd.read_csv('ztfb.csv')
# 线性回归
from sklearn import linear_model
import numpy as np
reg = linear_model.LinearRegression()
#对应序号是 range(len(data))
df['itx'] =[i  for i in range(1,len(list(df['last_close']))+1)]
# x , y
reg.fit (df['itx'].values.reshape(-1, 1),df['last_close'])
#斜率为
print(reg.coef_)
#截距为
print(reg.intercept_)
df['coef'] = reg.coef_[0]
df['intercept'] = reg.intercept_
# y = c+x*b = 截距+x*斜率
#趋势线
df['priceTL'] = df['intercept']+df['itx']*df['coef']
#误差
df['y-TL'] = df['close']-df['priceTL']
# 标准差
df['SD'] = df['y-TL'].std()
# 分别计算上下 1个和2个标准差
df['TL-2SD'] = df['priceTL']-2*df['SD']
df['TL-SD'] = df['priceTL']-df['SD']
df['TL+2SD'] = df['priceTL']+2*df['SD']
df['TL+SD'] = df['priceTL']+df['SD']

绘图

import plotly.graph_objects as go

fig = go.Figure()
for i in ['last_close','priceTL','TL-2SD', 'TL-SD',
       'TL+SD', 'TL+2SD']:
    fig.add_trace(
    go.Scatter(
        x=df['time_key'],
        y=df[i],
        name=i
    ))

fig.update_layout(
   xaxis_title="x Axis Title",
    yaxis_title="y Axis Title",
    font=dict(
        family="Courier New, monospace",
        size=18,
        color="#7f7f7f"
    ),
    title={'text': "Plot Title",'xanchor': 'center','y':0.995,
        'x':0.5,
        'yanchor': 'top'},
)

fig.show()