Python股票量化学习(3)——简单的策略回测

本文介绍了使用Python进行简单的股票量化策略回测,基于布林通道进行买入和卖出操作。通过从MySQL数据库获取股票历史数据,计算布林通道,然后根据通道上下轨确定交易信号。在不考虑交易费用的情况下,策略展示了一种全仓买卖的交易方式,并通过可视化图表分析策略效果。虽然初步结果显示账户资产增长,但存在明显问题,需要进一步优化和验证策略的可行性。
摘要由CSDN通过智能技术生成

        搞一个简单的交易策略回测(难点的我也不会啊)。此策略基于布林通道,当股价低于布林通道下轨线且持仓为0时,以下轨线价格全仓买入(不关心风险,反正也不要本钱)。当股价突破布林线上轨且有持仓时,以上轨线价格清仓卖出。(期间也没有考虑交易的费用)

        首先,从MySQL数据库读取已经下载好的股票历史数据,我用的库名是stock_databases。股票就随便选一个。

from sqlalchemy import create_engine
import pandas as pd

def calculate_boll(code):

    # 用于数据读取的表字段
    columns = 'date, open, high, low, close, volume'

    # 连接数据库引擎对象
    engine = create_engine("mysql+pymysql://root:123456@localhost:3306/stock_databases?charset=utf8")

    # 读取数据
    df = pd.read_sql('SELECT {} FROM {}_{}'.format(columns, code[:2], code[3:]),
                     con=engine,index_col='date')

    print(df.info())


calculate_boll('sh.600478')

 读取的数据如下图

数据类型在我保存到数据库之前就做了相应的处理,接着计算布林通道:

from sqlalchemy import create_engine
import pandas as pd

def calculate_boll(code):

    # 用于数据读取的表字段
    columns = 'date, open, high, low, close, volume'

    # 连接数据库引擎对象
    engine = create_engine("mysql+pymysql://root:123456@localhost:3306/stock_databases?charset=utf8")

    # 读取数据
    df = pd.read_sql('SELECT {} FROM {}_{}'.format(columns, code[:2], code[3:]),
                     con=engine,index_col='date')

    # 计算标准差
    standard_deviations = df['close'].rolling(20).std(ddof=1)

    # 添加布林通道的上轨、下轨和中轨
    df['md'] = round(df['close'].rolling(20).mean(), 2)
    df['upper'] = round(df['md'] + 2 * standard_deviations, 2)
    df['lower'] = round(df['md'] - 2 * standard_deviations, 2)

    return df

        有了布林通道的数据后,就可以通过比较最高价、最低价与上下轨的大小来确定交易信号。

import numpy as np
import pandas as pd
from sqlalchemy import create_engine


def trade_signal(code):
    """
    计算交易信号,当股价低于布林下轨时买入,高于上轨时卖出
    :param code: 股票代码
    :return: 包含交易信号的DataFrame
    """
    data = calculate_boll(code)
    # 新建一个DataFrame,以data的index为index
    df = pd.DataFrame(index=data.index)
    
  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值