[025量化交易] python跌了就买涨了就卖策略

# http://localhost:8888/lab
# jupyter lab
import tushare as ts
import numpy as np
# 导入画图工具matplotlib
import matplotlib.pyplot as plt
import pandas as pd

# 初始化pro接口
pro = ts.pro_api('')

print("获取股票数据.")
zgpa = pro.daily(ts_code='000006.SZ', start_date='20190101', end_date='20190301')

# print(zgpa.head)

# 下面我们来创建交易信号
# 为了不影响原始数据,这里创建一个新的数据表
# 只保留原始数据中的日期index
zgpa_signal = pd.DataFrame(index=zgpa.index)
# 为了更能体现股票的真实价值
# 使用Adj Close调整价格作为股票价格
zgpa_signal['price'] = zgpa['pre_close']
# 增加一个字段,来存储股价的变化  diff()现价与昨天价格差值
zgpa_signal['diff'] = zgpa_signal['price'].diff()
# 增加diff字段后,第一行会出现空值,我们使用0来进行填补  fillna补充缺失值
zgpa_signal = zgpa_signal.fillna(0.0)

# 如果股价上涨或不变,则标记为0 如果股价下跌,则标记为1
zgpa_signal['signal'] = np.where(zgpa_signal['diff'] >= 0, 0, 1)
# 接下来,根据交易信号的变化进行下单
# 一般情况下,在A股市场,买入或卖出至少为100股,即1手  买卖信号转换连续的买入或连续卖出信号只变化一次 涨跌
zgpa_signal['order'] = zgpa_signal['signal'].diff() * 100
# zgpa_signal['lcbh'] = zgpa_signal['signal'].diff()
# 检查一下下单的情况
zgpa_signal.head()

# 考虑到股价较高,我们初始给小瓦2万块钱让她去交易
initial_cash = 20000.00
# 增加一个字段,代表小瓦交易的股票的市值
zgpa_signal['stock'] = zgpa_signal['order'] * zgpa_signal['price']
zgpa_signal['order_diff'] = zgpa_signal['order'].diff()
# 两次买卖的订单变化之差就是某一时刻小瓦仓位的变化情况
# 持仓股票的数量变化乘以现价,就是代表小瓦交易产生的现金流
# 用初始资金减去现金流变化的累加,就是小瓦剩余的现金
print("+++++++cumsum 当前列之前的和加到当前列上+++")
zgpa_signal['cash'] = initial_cash - \
                      (zgpa_signal['order'].diff() * zgpa_signal['price']).cumsum()
zgpa_signal['cha'] = zgpa_signal['order'].diff() * zgpa_signal['price']
# 而最股票的市值加上剩余的现金,就是小瓦的总资产
zgpa_signal['total'] = zgpa_signal['stock'] + initial_cash - (zgpa_signal['order'].diff() * zgpa_signal['price']).cumsum()

print("打印价格 差值 信号 买入............")
print(zgpa_signal)
print("*****************")

# 为了让小瓦直观看到自己的总资产变化
# 我们用图形来进行展示
# 设置图形的尺寸是10*6
plt.figure(figsize=(10, 6))
# 分别绘制总资产和持仓股票市值的变化
plt.plot(zgpa_signal['total'])
plt.plot(zgpa_signal['order'].cumsum() * zgpa_signal['price'], '--',
         label='stock value')
# 增加网格,调整一下图注的位置,就可以显示图像了
plt.grid()
plt.legend(loc='center right')
plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值