python学习之使用神经网络模拟交易曲线

记录学习过程:

使用python的requests库爬取交易数据,得到的数据使用numpy进行神经网络搭建与处理,最后用

matplotlib用图形显示出来

获取交易数据:

给定股票代码,数据的开始和结束时间;下载后保存到CVS文件内

    # 股票代码
    code = '603825'

    # 开始日期
    start_date = '20180101'
    # 结束日期
    end_date = '20210522'

    print(f'正在获取 {code} 从 {start_date} 到 {end_date} 的 k线数据......')
    # 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据
    df = get_k_history(code, start_date, end_date)
    # 保存k线数据到表格里面
    df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None)
    print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')

神经网络搭建与处理:

读出之前下载到CVS文件内的数据,进行归一化,网络模型搭建,反馈单元计算,从损失函数的最小梯度计算出权重的更新值,更新后进行新的一轮正向计算,如此反复。直到误差小于给定范围或者训练次数完毕。

#开盘 收盘 最高 最低 成交量    成交额    振幅 涨跌幅    涨跌额    换手率    3日量比 输出20日最大值  输出20日最小值
#T1 选取输入 开盘    收盘 最高 最低   换手率   3日量比
x = df[['开盘','收盘','最高','最低','换手率','3日量比']]
y = df[['输出20日最小值','输出20日最大值']]
x_scaler = MinMaxScaler(feature_range=(-1,1))
y_scaler = MinMaxScaler(feature_range=(-1,1))

x = x_scaler.fit_transform(x)
y = y_scaler.fit_transform(y)

#对样本数据 x[735 rows x 6 columns]
sample_in =x.T
sample_out =y.T
#print(sample_in.shape)
#bp网络参数
#训练次数
max_epochs = 1000
learn_rate = 0.0001
#允许损失误差
mse_final =8e-3
sample_number = x.shape[0]
input_number = 6
output_number = 2

hidden_unit_number = 30

#学习训练超参
#[8 rows x 6 columns]
w1 = 0.5 * np.random.rand(hidden_unit_number,input_number)-0.1
#[8 rows x 1 columns]
b1 = 0.5 * np.random.rand(hidden_unit_number,1)-0.1

#[2 rows x 8 columns]
w2 = 0.5 * np.random.rand(output_number,hidden_unit_number)-0.1
#[2 rows x 1 columns]
b2 = 0.5 * np.random.rand(output_number,1)-0.1

def sigmoid(z):
    #return 1.0 / (1 + np.exp(-z))
    return ( np.exp(z) - np.exp(-z)) / ( np.exp(z) + np.exp(-z))
#print(sigmoid(0))

mse_history = []
for i in range(max_epochs):
    #fp
    hidden_out = sigmoid(np.dot(w1,sample_in)+b1)
    network_out = np.dot(w2,hidden_out)+b2
    #误差
    err = sample_out - network_out
    mse = np.average(np.square(err))
    mse_history.append(mse)
    if mse<mse_final:

        break
    #bp  err=0.5*(t-o)^2
    delta2 = -err
    delta1 = np.dot(w2.transpose(),delta2) * hidden_out * (1 - hidden_out)

    delta_w2 = np.dot(delta2,hidden_out.transpose())
    delta_b2 = np.dot(delta2,np.ones((sample_number,1)))

    delta_w1 = np.dot(delta1,sample_in.transpose())
    delta_b1 = np.dot(delta1,np.ones((sample_number,1)))

    #updata
    w2 -= learn_rate * delta_w2
    b2 -= learn_rate * delta_b2
    w1 -= learn_rate * delta_w1
    b1 -= learn_rate * delta_b1

print('所有误差',mse_history)

图形显示:

通过绘图函数把误差以及输入值和目标值显示出来。

n=max_epochs
x=np.linspace(-1,1,n).reshape(n,1)
plt.plot(x,mse_history,'k-',label=u'误差')
plt.show()

plt.plot(sample_out[1],'r-',label=u'sample_out1')
plt.plot(network_out[1],'g-',label=u'network_out1')
plt.show()
plt.plot(sample_out[0],'r-',label=u'sample_out0')
plt.plot(network_out[0],'g-',label=u'network_out0')
plt.show()

 

总结:

        这是一个学习过程。这个神经网络模型不适用于分析有时间先后关系的数据,这种数据分析最好使用RNN或者LSTM。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PAOPAO824

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值