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

        搞一个简单的交易策略回测(难点的我也不会啊)。此策略基于布林通道,当股价低于布林通道下轨线且持仓为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
    评论
股票回测量化交易中非常重要的一环,它可以通过历史数据对交易策略进行模拟和评估,从而评估策略的可行性和优劣性。在Python中,有很多开源的量化交易框架可以用来进行股票回测,如zipline、backtrader等。 下面是一个使用zipline框架进行简单交易策略回测的例子: 1. 安装zipline ```python pip install zipline ``` 2. 编写交易策略代码 ```python from zipline.api import order_target_percent, record, symbol def initialize(context): context.asset = symbol('AAPL') def handle_data(context, data): # 获取过去10天的收盘价 prices = data.history(context.asset, 'price', 10, '1d') # 计算平均价 mean_price = prices.mean() # 如果当前价格低于平均价,则买入 if data.current(context.asset, 'price') < mean_price: # 调整持仓比例至100% order_target_percent(context.asset, 1.0) # 否则卖出 else: # 调整持仓比例至0% order_target_percent(context.asset, 0.0) # 记录当前持仓比例 record(position=context.portfolio.positions[context.asset].amount) ``` 3. 运行回测 ```python from zipline import run_algorithm from zipline.api import symbol from datetime import datetime start = datetime(2016, 1, 1) end = datetime(2017, 1, 1) result = run_algorithm( start=start, end=end, initialize=initialize, capital_base=10000, handle_data=handle_data, bundle='quandl' ) ``` 在上述代码中,我们定义了一个简单的交易策略,即如果当前价格低于过去10天的平均价,则买入,否则卖出。然后我们使用zipline框架进行回测,设定回测开始和结束时间、初始资本、数据来源等参数,最终得到回测结果。 需要注意的是,这只是一个简单的例子,实际的交易策略可能会更加复杂,需要考虑更多的因素。另外,在进行股票回测时,也需要注意避免过度拟合或过度优化,以免出现回测虚高的情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值