【《深入浅出python量化交易交易实战》Python复现(第一章:Step By Step)】

第一章 从零开始

金融知识(CAPM资产定价模型+β因子+α因子)+库安装+交易数据下载+展示

1.1 & 1. 2 金融和量化知识

CAPM资产定价模型等,等学习cfa的portfolio后再补充

1.3 python相关准备

1.3.1 库下载

Anaconda安装
https://www.anaconda.com/
寻找免费的数据源,这里用的是歪枣网的数据
http://www.waizaowang.com/

1.3.2 获取股票数据并进行简单分析

wz_data.py的代码如下(交易数据后续可以直接保存在本地,重复使用):

#coding=utf-8
import sys
import requests
import os
import datetime
import io
import pandas as pd

class wz_data(object):

    def __init__(self):
        self.TOKEN = 'xxxxxx'
        self.DATA_PATH = 'd:/python/data/'

    def get_stock_data_online(self, code, s_date, e_date=None):
        """在线接口,直接下载"""
        api = 'http://api.waizaowang.com/doc/getStockHSADayKLine?'
        params = {}

        start_date = s_date
        if not e_date:
            end_date = datetime.datetime.strftime(datetime.date.today(), '%Y-%m-%d')
        else:
            end_date = e_date

        params['code'] = code
        params['startDate'] = start_date
        params['endDate'] = end_date
        params['fq'] = '0'
        params['ktype'] = '101'
        params['fields'] = 'tdate,open,high,low,close,cjl,cje,hsl'
        params['export'] = '5'
        params['token'] = self.TOKEN

        r = requests.get(api, params=params).json()
        df = pd.DataFrame(data=r['data'], columns=r['zh'])
        return df

chap_1.py的部分代码如下:

#codeing=utf-8
import numpy as np
import pandas as pd
import mplfinance as mpf
from utils import wz_data

if __name__ == '__main__':
    #单独实现了去wz网获取数据的接口
    wz = wz_data()
    #股票代码,起始日期,结束日期,这里走的是未复权
    data = wz.get_stock_data_online('601318', '2020-01-01','2020-03-18')
    #返回的直接是一个DataFrame对象
    data.rename(columns={
        '交易时间': 'Date',
        '开盘价': 'Open',
        '最高价': 'High',
        '最低价': 'Low',
        '收盘价': 'Close',
        '成交量': 'Volume',
        '成交额': 'Money',
        '换手率': 'Turnover'
    }, inplace = True)
    data.index = pd.DatetimeIndex(data['Date'])
    print(data.head())
    #用.diff()方法来计算每日股价变化情况
    data['diff'] = data['Close'].diff()
    print(data.head())
    #绘制蜡烛图
    #type='candle', type='line', type='renko', or type='pnf'
    mpf.plot(data.tail(30), type="candle", volume=True)

执行结果展示如下:
获取的数据:
在这里插入图片描述
加上diff分析后的数据:
在这里插入图片描述
绘制的蜡烛图数据:

在这里插入图片描述

1.3.3 设计简单的交易策略

策略设计

我们可以设置一个最简单的交易策略:如果当日股价下跌,我们就在下一个交易日开盘前挂单买入;反之,如果当日股价上涨,我们就在下一个交易日开盘前挂单卖出。循环进行这个步骤,我们不就可以赚钱了吗?
要实现这个策略,首先我们来创建一个新的字段Signal(交易信号)。如果diff字段大于0,则Signal标记为1;如果diff字段小于或等于0,则Signal标记为0。输入代码如下:

#codeing=utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mplfinance as mpf
from utils import wz_data

if __name__ == '__main__':
	#之前的代码略
	print('----计算交易信号Signal数据------')
    #创建交易信号字段,命名为Signal
    #如果diff值大于0,则Signal为1,否则为0
    data['Signal'] = np.where(data['diff'] > 0, 1, 0)
    #check
    print(data.head())
    #简单交易策略
    #·当日股价下跌,下一个交易日买入
    #·当日股价上涨,下一个交易日卖出
    #交易信号字段:Signal, diff > 0 Signal=1 卖出,否则Signal=0

在这里插入图片描述
解释:从上图中可以看到,使用np.where()可以让程序判断每日股价是上涨还是下跌:如果上涨,则交易信号为1,代表卖出;否则交易信号为0,代表买入。这样我们就得到了最简单的交易信号。

交易信号可视化

#codeing=utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mplfinance as mpf
from utils import wz_data

if __name__ == '__main__':
	#之前的代码略
	#绘图 画布尺寸10*5
    plt.figure(figsize=(10, 5))
    # 折线图绘制日K线
    data['Close'].plot(linewidth=2, color='k', grid=True)
    # 卖出标志 x轴日期,y轴数值 卖出信号,倒三角
    # matplotlib.pyplot.scatter(x, y, marker, size, color)
    plt.scatter(data['Close'].loc[data.Signal == 1].index,
            data['Close'][data.Signal == 1],
            marker = 'v', s=80, c='g')
    # 买入标志 正三角
    plt.scatter(data['Close'].loc[data.Signal == 0].index,
            data['Close'][data.Signal == 0],
            marker='^', s=80, c='r')
    plt.show()

交易信号的可视化
从图中可以看到,倒三角所处的位置是股票收盘价较上一个交易日上涨的时刻,代表卖出;正三角所处的位置是股票收
盘价较上一个交易日下跌的时刻,代表买入

2.1 补充学习

np.where的用法

np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y
如果是一维数组,相当于[x_v if c else y_v for (c, x_v, y_v) in zip(condition,x,y)]

>>> a = np.arange(10) 
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
>>> np.where(a > 5, 1, -1)
array([-1, -1, -1, -1, -1, -1,  1,  1,  1,  1])
>>> np.where([[True, False], [True, True]],    # 官网上的例子,多维
             [[1, 2], [3, 4]],
             [[9, 8], [7, 6]])
array([[1, 8],
       [3, 4]])

上面这个例子的条件为[[True, False], [True, False]],分别对应最后输出结果的四个值。第一个值从[1, 9]中选,因为条件为True,所以是选1。第二个值从[2, 8]中选,因为条件为False,所以选8,后面以此类推。类似的问题可以再看个例子:

>>> a = 10
>>> np.where([[a > 5, a < 5], [a == 10,a == 7]],
             [["chosen","not chosen"], ["chosen","not chosen"]],
             [["not chosen","chosen"], ["not chosen","chosen"]])

array([['chosen', 'chosen'],
       ['chosen', 'chosen']], dtype='<U10')

参考资料

  1. https://blog.csdn.net/qq_24380731/article/details/128798325
  2. https://developer.aliyun.com/article/620173
  3. numpy.where用法
  4. 深入浅出Python量化交易实战:第一章
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python量化交易是利用Python编程语言和相关的金融库来进行交易策略的开发和执行。在这里,我将介绍一些深入浅出Python量化交易实战的步骤和技巧。 1. 数据获取:首先,你需要获取市场数据,包括股票、期货或其他金融产品的历史价格数据。你可以使用第三方库如pandas、tushare、quandl等来获取数据。 2. 数据处理:对获取到的数据进行处理和清洗,包括数据的缺失值处理、数据格式转换等。pandas库是一个非常强大且方便的用于数据处理的工具。 3. 策略开发:根据你的交易理念和策略,使用Python编写量化交易策略。这可能涉及到技术指标的计算、信号的生成等。你可以使用一些常用的库如numpy、talib来帮助你进行技术指标的计算。 4. 回测:使用历史数据对你编写的策略进行回测,评估其表现。通过回测可以了解策略在不同市场环境下的盈亏情况,并进行优化和改进。 5. 执行交易:当你满意于自己的策略表现时,你可以选择使用API连接到实际的交易平台,通过Python自动执行你的交易策略。 6. 风险管理:在量化交易中,风险管理是非常重要的一环。你需要考虑风险控制、资金管理等方面,确保你的策略能够长期有效。 以上是一个简要的Python量化交易实战的流程,希望对你有所帮助。如果你有更具体的问题或需要了解更多细节,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值