建设电子商务网站的方法有?,如何建立一个网站共享,wordpress怎么上传文本,自己怎么开发社交app软件概述
量化说得简单一些用策略进行股票交易#xff0c;在实施交易之前#xff0c;需要制定策略#xff0c;并回测试共效果 为了把交易说明清楚#xff0c;将这个过程#xff0c;能简单#xff0c;就简单#xff0c;总之#xff0c;简单#xff0c;简单再简单。 以下主…概述
量化说得简单一些用策略进行股票交易在实施交易之前需要制定策略并回测试共效果 为了把交易说明清楚将这个过程能简单就简单总之简单简单再简单。 以下主要以代码为主。
获取数据
按照惯例用baostock 数据
# 加载相应的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import baostock as bs
plt.rcParams[font.family] [sans-serif]
plt.rcParams[font.sans-serif] [SimHei]
plt.rcParams[axes.unicode_minus]False加载数据
仍以sh.60000为例从今年【2023年1月1日 到至今天(2023-10-19)】数据为演示。
lg bs.login()
#指定一下获取股票数据的起始日期和截止日期
#这里就用2023年1月1日至今日的数据
start_date 2023-01-01
end_date 2023-10-19
#创建数据表这里选择下载的股票代码为600000rsbs.query_history_k_data_plus(600000.sh, date,open,high,low,close,volume,start_datestart_date, end_dateend_date,
frequencyd, adjustflag3)
# .get_data()
#下面来检查一下数据表的前5行
datars.get_data()
data.head()数据见下表 date open high low close volume
0 2023-01-03 7.2700 7.2800 7.1700 7.2300 25892521
1 2023-01-04 7.2700 7.3500 7.2300 7.3100 30947081
2 2023-01-05 7.3700 7.3800 7.3000 7.3500 30162154
3 2023-01-06 7.3500 7.3800 7.3100 7.3400 20312881
4 2023-01-09 7.3800 7.3800 7.3000 7.3400 19612260data.info()class pandas.core.frame.DataFrame
RangeIndex: 191 entries, 0 to 190
Data columns (total 6 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 date 191 non-null object1 open 191 non-null object2 high 191 non-null object3 low 191 non-null object4 close 191 non-null object5 volume 191 non-null object
dtypes: object(6)
memory usage: 9.1 KB特别说明一下这里有个坑baostock 采集的数据均是字符串无法进行数值计算 可以通info() 函数查看
数据处理
转化为数值型和日期并建立以日期为索引 你也可以不用建议索引不过建立以日期为索引的好处在于作图时横坐标会显示日期定位也很方便。
cols[open,high,low,close,volume]
data[cols]data[cols].astype(float)
data[date]pd.to_datetime(data[date])
data.set_index(date,inplaceTrue)增加一列价格变化
#给新的字段命名为diff代表difference
#用.diff()方法来计算每日股价变化情况
data[diff] data[close].diff()增加交易信号
#创建交易信号字段命名为Signal
#如果diff值大于0则Signal为1 卖出否则为0 买入
data[signal] np.where(data[diff] 0, 1, 0)作图查看
#设置画布的尺寸为12*8
plt.figure(figsize (12,8))
#使用折线图绘制出每天的收盘价
data[close].plot(linewidth2, colork, gridTrue)
#如果当天股价上涨标出卖出信号用倒三角表示
plt.scatter(data[close].loc[data.signal1].index,data[close][data.signal1],marker v, s80, cg)
#如果当天股价下跌给出买入信号用正三角表示
plt.scatter(data[close].loc[data.signal0].index,data[close][data.signal0],marker ^, s80, cr)
#将图像进行展示
plt.show()回测
为了更加清晰的看到回测结果删除不参加计算的列只保留相关的列。
df data.copy()
df.rename(columns{close: price}, inplaceTrue)
df.drop(columns[open,high,low,volume], inplaceTrue)
dfdf.fillna(0)
#一般情况下在A股市场买入或卖出至少为100股即1手
df[order] df[signal].diff()*100
df.head()price diff signal order
date
2023-01-03 7.23 0.00 0 NaN
2023-01-04 7.31 0.08 1 100.0
2023-01-05 7.35 0.04 1 0.0
2023-01-06 7.34 -0.01 0 -100.0
2023-01-09 7.34 0.00 0 0.0回测的逻辑 根据买卖信号进行买卖操作每次操作相应的数量。对于这里的股票只有做多即只能是买进后才能卖出。 特别要说明的的一个函数cumsum()即累加。
#考虑到股价较低我们初始1千元钱让去交易
initial_cash 1000.00
#增加一个字段代表交易的股票的市值
df[stock] df[order]*df[price]
#两次买卖的订单变化之差就是某一时刻仓位的变化情况
#持仓股票的数量变化乘以现价就是代表交易产生的现金流
#用初始资金减去现金流变化的累加就是剩余的现金
df[cash] initial_cash -\
(df[order].diff()*df[price]).cumsum()
#而最股票的市值加上剩余的现金就是的总资产
df[total] df[stock] df[cash]
#为了让直观看到自己的总资产变化
#我们用图形来进行展示
#设置图形的尺寸是10*6
plt.figure(figsize(10,6))
#分别绘制总资产和持仓股票市值的变化
plt.plot(df[total],label总市值)
plt.plot(df[order].cumsum()*df[price],--,label股票市值)
#增加网格调整一下图注的位置就可以显示图像了
plt.grid()
plt.legend(loccenter right)
plt.show()通过上图可以看到上面蓝色的曲线为资产曲线下面橙色的表示股票买卖的情况。
datepricediffsignalorderstockcashtotal2023-01-037.230.000NaNNaNNaNNaN2023-01-047.310.081100.0731.0NaNNaN2023-01-057.350.0410.00.01735.01735.02023-01-067.34-0.010-100.0-734.02469.01735.02023-01-097.340.0000.00.01735.01735.0……………………2023-10-137.10-0.040-100.0-710.02514.01804.02023-10-167.07-0.0300.00.01807.01807.02023-10-177.090.021100.0709.01098.01807.02023-10-187.05-0.040-100.0-705.02508.01803.02023-10-196.84-0.2100.00.01824.01824.0
191 rows × 7 columns
小结
查看数据表我们惊奇的发现居然盈利了。资产由原来的1000元变成1824元。 以上的仅仅是一个策略的制定和回测的过程盈利并不代表什么不能直接用于实践。 有了这个简单的策略我们了解策略是什么回测是什么分别是如何实现的。在以后的章节我们将一步地进行研究和说明。
在此警告文章中的所有内容不能给你构成投资的理由。