• <xmp id="4g4m2"><menu id="4g4m2"></menu><menu id="4g4m2"><strong id="4g4m2"></strong></menu>
    <xmp id="4g4m2">
  • <menu id="4g4m2"></menu>
  • <dd id="4g4m2"></dd>
  • 只發布交易干貨的網站
    用實戰期貨交易系統和心得助你重塑交易認知

    正規期貨開戶 | 手續費只+1分

    90%交易者的手續費都被加收超1倍,一起看看最新的交易所手續費一覽表吧!

    股票價格預測-股票價格預測分析

    機器學習在股票價格預測中具有重要的應用。在這個機器學習項目中,我們將討論預測股票收益。這是一個非常復雜的任務,并且具有不確定性。我們將把這個項目分為兩個部分:

    1. 首先,我們將學習如何使用LSTM神經網絡預測股票價格。
    2. 然后,我們將使用Plotly dash 構建儀表板以進行股票分析。

    股票價格預測-股票價格預測分析

    股票價格預測項目

    數據集

    1. 為了建立股票價格預測模型,我們將使用NSE TATA GLOBAL數據集。這是來自印度國家證券交易所Tata Global Beverages Limited的Tata飲料數據集:Tata Global數據集
    2. 為了開發用于股票分析的儀表盤,我們將使用包含多個股票的另一個股票數據集,例如Apple,Microsoft,Facebook:Stocks Dataset

    源代碼

    請留言

    使用LSTM預測股價

    1.導入:

    import pandas as pd
    import numpy as np

    import matplotlib.pyplot as plt
    %matplotlib inline

    from matplotlib.pylab import rcParams
    rcParams['figure.figsize']=20,10
    from keras.models import Sequential
    from keras.layers import LSTM,Dropout,Dense

    from sklearn.preprocessing import MinMaxScaler

    import pandas as pd
    import numpy as np

    import matplotlib.pyplot as plt
    %matplotlib inline

    from matplotlib.pylab import rcParams
    rcParams['figure.figsize']=20,10
    from keras.models import Sequential
    from keras.layers import LSTM,Dropout,Dense

    from sklearn.preprocessing import MinMaxScaler

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    from matplotlib.pylab import rcParams
    rcParams['figure.figsize']=20,10
    from keras.models import Sequential
    from keras.layers import LSTM,Dropout,Dense
    from sklearn.preprocessing import MinMaxScaler

    2.讀取數據集:

    df=pd.read_csv("NSE-TATA.csv")
    df.head()
    股票價格預測-股票價格預測分析

    3.從數據框分析收盤價:

    df["Date"]=pd.to_datetime(df.Date,format="%Y-%m-%d")
    df.index=df['Date']
    plt.figure(figsize=(16,8))
    plt.plot(df["Close"],label='Close Price history')
    股票價格預測-股票價格預測分析

    4.按日期時間對數據集進行排序,然后過濾“日期”和“關閉”列:

    data=df.sort_index(ascending=True,axis=0)
    new_dataset=pd.DataFrame(index=range(0,len(df)),columns=['Date','Close'])
    for i in range(0,len(data)):
    new_dataset["Date"][i]=data['Date'][i]
    new_dataset["Close"][i]=data["Close"][i]

    5.標準化新的過濾數據集:

    scaler=MinMaxScaler(feature_range=(0,1))
    final_dataset=new_dataset.values
    train_data=final_dataset[0:987,:]
    valid_data=final_dataset[987:,:]
    new_dataset.index=new_dataset.Date
    new_dataset.drop("Date",axis=1,inplace=True)
    scaler=MinMaxScaler(feature_range=(0,1))
    scaled_data=scaler.fit_transform(final_dataset)
    x_train_data,y_train_data=[],[]
    for i in range(60,len(train_data)):
    x_train_data.append(scaled_data[i-60:i,0])
    y_train_data.append(scaled_data[i,0])

    x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data)
    x_train_data=np.reshape(x_train_data,(x_train_data.shape[0],x_train_data.shape[1],1))

    6.建立和訓練LSTM模型:

    lstm_model=Sequential()
    lstm_model.add(LSTM(units=50,return_sequences=True,input_shape=(x_train_data.shape[1],1)))
    lstm_model.add(LSTM(units=50))
    lstm_model.add(Dense(1))
    inputs_data=new_dataset[len(new_dataset)-len(valid_data)-60:].values
    inputs_data=inputs_data.reshape(-1,1)
    inputs_data=scaler.transform(inputs_data)
    lstm_model.compile(loss='mean_squared_error',optimizer='adam')
    lstm_model.fit(x_train_data,y_train_data,epochs=1,batch_size=1,verbose=2)

    7.抽取數據集樣本,以使用LSTM模型進行股票價格預測:

    X_test=[]
    for i in range(60,inputs_data.shape[0]):
    X_test.append(inputs_data[i-60:i,0])
    X_test=np.array(X_test)
    X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
    predicted_closing_price=lstm_model.predict(X_test)
    predicted_closing_price=scaler.inverse_transform(predicted_closing_price)

    8.保存LSTM模型:

    lstm_model.save("saved_model.h5")

    9.用實際股價可視化預測的股價:

    train_data=new_dataset[:987]
    valid_data=new_dataset[987:]
    valid_data['Predictions']=predicted_closing_price
    plt.plot(train_data["Close"])
    plt.plot(valid_data[['Close',"Predictions"]])
    股票價格預測-股票價格預測分析

    您可以觀察到LSTM預測的股價幾乎與實際股價相似。

    使用Plotly dash構建儀表板

    在本節中,我們將構建一個儀表板來分析股票。Dash是一個python框架,提供了flask和react.js的抽象,以構建分析型Web應用程序。
    在繼續之前,您需要安裝dash。在終端中運行以下命令。

    pip3 install dash
    pip3 install dash-html-components
    pip3 install dash-core-components

    現在制作一個新的python文件stock_app.py并粘貼以下腳本:

    import dash
    import dash_core_components as dcc
    import dash_html_components as html
    import pandas as pd
    import plotly.graph_objs as go
    from dash.dependencies import Input, Output
    from keras.models import load_model
    from sklearn.preprocessing import MinMaxScaler
    import numpy as np
    app = dash.Dash()
    server = app.server
    scaler=MinMaxScaler(feature_range=(0,1))
    df_nse = pd.read_csv("./NSE-TATA.csv")
    df_nse["Date"]=pd.to_datetime(df_nse.Date,format="%Y-%m-%d")
    df_nse.index=df_nse['Date']
    data=df_nse.sort_index(ascending=True,axis=0)
    new_data=pd.DataFrame(index=range(0,len(df_nse)),columns=['Date','Close'])
    for i in range(0,len(data)):
    new_data["Date"][i]=data['Date'][i]
    new_data["Close"][i]=data["Close"][i]
    new_data.index=new_data.Date
    new_data.drop("Date",axis=1,inplace=True)
    dataset=new_data.values
    train=dataset[0:987,:]
    valid=dataset[987:,:]
    scaler=MinMaxScaler(feature_range=(0,1))
    scaled_data=scaler.fit_transform(dataset)
    x_train,y_train=[],[]
    for i in range(60,len(train)):
    x_train.append(scaled_data[i-60:i,0])
    y_train.append(scaled_data[i,0])

    x_train,y_train=np.array(x_train),np.array(y_train)
    x_train=np.reshape(x_train,(x_train.shape[0],x_train.shape[1],1))
    model=load_model("saved_model.h5")
    inputs=new_data[len(new_data)-len(valid)-60:].values
    inputs=inputs.reshape(-1,1)
    inputs=scaler.transform(inputs)
    X_test=[]
    for i in range(60,inputs.shape[0]):
    X_test.append(inputs[i-60:i,0])
    X_test=np.array(X_test)
    X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
    closing_price=model.predict(X_test)
    closing_price=scaler.inverse_transform(closing_price)
    train=new_data[:987]
    valid=new_data[987:]
    valid['Predictions']=closing_price
    df= pd.read_csv("./stock_data.csv")
    app.layout = html.Div([

    html.H1("Stock Price Analysis Dashboard", style={"textAlign": "center"}),

    dcc.Tabs(id="tabs", children=[

    dcc.Tab(label='NSE-TATAGLOBAL Stock Data',children=[
    html.Div([
    html.H2("Actual closing price",style={"textAlign": "center"}),
    dcc.Graph(
    id="Actual Data",
    figure={
    "data":[
    go.Scatter(
    x=train.index,
    y=valid["Close"],
    mode='markers'
    )
    ],
    "layout":go.Layout(
    title='scatter plot',
    xaxis={'title':'Date'},
    yaxis={'title':'Closing Rate'}
    )
    }
    ),
    html.H2("LSTM Predicted closing price",style={"textAlign": "center"}),
    dcc.Graph(
    id="Predicted Data",
    figure={
    "data":[
    go.Scatter(
    x=valid.index,
    y=valid["Predictions"],
    mode='markers'
    )
    ],
    "layout":go.Layout(
    title='scatter plot',
    xaxis={'title':'Date'},
    yaxis={'title':'Closing Rate'}
    )
    }
    )
    ])
    ]),
    dcc.Tab(label='Facebook Stock Data', children=[
    html.Div([
    html.H1("Facebook Stocks High vs Lows",
    style={'textAlign': 'center'}),

    dcc.Dropdown(id='my-dropdown',
    options=[{'label': 'Tesla', 'value': 'TSLA'},
    {'label': 'Apple','value': 'AAPL'},
    {'label': 'Facebook', 'value': 'FB'},
    {'label': 'Microsoft','value': 'MSFT'}],
    multi=True,value=['FB'],
    style={"display": "block", "margin-left": "auto",
    "margin-right": "auto", "width": "60%"}),
    dcc.Graph(id='highlow'),
    html.H1("Facebook Market Volume", style={'textAlign': 'center'}),

    dcc.Dropdown(id='my-dropdown2',
    options=[{'label': 'Tesla', 'value': 'TSLA'},
    {'label': 'Apple','value': 'AAPL'},
    {'label': 'Facebook', 'value': 'FB'},
    {'label': 'Microsoft','value': 'MSFT'}],
    multi=True,value=['FB'],
    style={"display": "block", "margin-left": "auto",
    "margin-right": "auto", "width": "60%"}),
    dcc.Graph(id='volume')
    ], className="container"),
    ])
    ])
    ])
    @app.callback(Output('highlow', 'figure'),
    [Input('my-dropdown', 'value')])
    def update_graph(selected_dropdown):
    dropdown = {"TSLA": "Tesla","AAPL": "Apple","FB": "Facebook","MSFT": "Microsoft",}
    trace1 = []
    trace2 = []
    for stock in selected_dropdown:
    trace1.append(
    go.Scatter(x=df[df["Stock"] == stock]["Date"],
    y=df[df["Stock"] == stock]["High"],
    mode='lines', opacity=0.7,
    name=f'High {dropdown[stock]}',textposition='bottom center'))
    trace2.append(
    go.Scatter(x=df[df["Stock"] == stock]["Date"],
    y=df[df["Stock"] == stock]["Low"],
    mode='lines', opacity=0.6,
    name=f'Low {dropdown[stock]}',textposition='bottom center'))
    traces = [trace1, trace2]
    data = [val for sublist in traces for val in sublist]
    figure = {'data': data,
    'layout': go.Layout(colorway=["#5E0DAC", '#FF4F00', '#375CB1',
    '#FF7400', '#FFF400', '#FF0056'],
    height=600,
    title=f"High and Low Prices for {', '.join(str(dropdown[i]) for i in selected_dropdown)} Over Time",
    xaxis={"title":"Date",
    'rangeselector': {'buttons': list([{'count': 1, 'label': '1M',
    'step': 'month',
    'stepmode': 'backward'},
    {'count': 6, 'label': '6M',
    'step': 'month',
    'stepmode': 'backward'},
    {'step': 'all'}])},
    'rangeslider': {'visible': True}, 'type': 'date'},
    yaxis={"title":"Price (USD)"})}
    return figure
    @app.callback(Output('volume', 'figure'),
    [Input('my-dropdown2', 'value')])
    def update_graph(selected_dropdown_value):
    dropdown = {"TSLA": "Tesla","AAPL": "Apple","FB": "Facebook","MSFT": "Microsoft",}
    trace1 = []
    for stock in selected_dropdown_value:
    trace1.append(
    go.Scatter(x=df[df["Stock"] == stock]["Date"],
    y=df[df["Stock"] == stock]["Volume"],
    mode='lines', opacity=0.7,
    name=f'Volume {dropdown[stock]}', textposition='bottom center'))
    traces = [trace1]
    data = [val for sublist in traces for val in sublist]
    figure = {'data': data,
    'layout': go.Layout(colorway=["#5E0DAC", '#FF4F00', '#375CB1',
    '#FF7400', '#FFF400', '#FF0056'],
    height=600,
    title=f"Market Volume for {', '.join(str(dropdown[i]) for i in selected_dropdown_value)} Over Time",
    xaxis={"title":"Date",
    'rangeselector': {'buttons': list([{'count': 1, 'label': '1M',
    'step': 'month',
    'stepmode': 'backward'},
    {'count': 6, 'label': '6M',
    'step': 'month',
    'stepmode': 'backward'},
    {'step': 'all'}])},
    'rangeslider': {'visible': True}, 'type': 'date'},
    yaxis={"title":"Transactions Volume"})}
    return figure
    if __name__=='__main__':
    app.run_server(debug=True)

    現在運行此文件并在瀏覽器中打開應用程序:

    python3 stock_app.py[object Object]
    股票價格預測-股票價格預測分析

    總結

    股票價格預測是面向初學者的機器學習項目;在本教程中,我們學習了如何開發股票成本預測模型以及如何構建交互式儀表板進行庫存分析。我們使用LSTM模型實施了股票市場預測。另外,用Plotly dashpython框架構建儀表板。

    來源:生活資訊網

    本文名稱:《股票價格預測-股票價格預測分析》
    本文鏈接:http://www.wuhansb.com/gu/53029.html
    免責聲明:投資有風險!入市需謹慎!本站內容均由用戶自發貢獻,或整編自互聯網,或AI編輯完成,因此對于內容真實性不能作任何類型的保證!請自行判斷內容真假!但是如您發現有涉嫌:抄襲侵權、違法違規、疑似詐騙、虛假不良等內容,請通過底部“聯系&建議”通道,及時與本站聯系,本站始終秉持積極配合態度處理各類問題,因此在收到郵件后,必會刪除相應內容!另外,如需做其他配合工作,如:設置相關詞匯屏蔽等,均可配合完成,以防止后續出現此類內容。生活不易,還請手下留情!由衷希望大家能多多理解,在此先謝過大家了~

    我要說說 搶沙發

    評論前必須登錄!

    立即登錄   注冊

    切換注冊

    登錄

    忘記密碼 ?

    切換登錄

    注冊

    我們將發送一封驗證郵件至你的郵箱, 請正確填寫以完成賬號注冊和激活

    簧色带三级