python股票量化交易_Python量化交易:实现第一个股票策略

目标以及应用:

实现简单的选股策略

1.选股介绍

不管是技术分析还是基本面分析,我们在进行投资的时候都会选择一些表现较好的股票作为一个股票池,从中来进行交易的判断或者是技术分析,之后再购买。

2.需求

(1)选股:获得市盈率大于50并且小于65的,营业总收入前十的股票

(2)调仓:每日调仓,将所有资金平台到这10个股票的购买策略,卖出一次性卖出所有不符合条件的

3.代码

# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

# 每日选股:获得市盈率大于50且小于65,营业总收入前10的股票

# 买卖:买入每天选出来的10只,卖出不符合条件

# 调仓按照月调仓,投资对象HS300

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。

def init(context):

# 在context中保存全局变量

# context.s1 = "000001.XSHE"

# 实时打印日志

# logger.info("RunInfo: {}".format(context.run_info))

# 定义一个选股的范围

context.hs300 = index_components("000300.XSHG")

scheduler.run_monthly(get_data, tradingday=1)

def get_data(context, bar_dict):

# 删掉两个条件

# .filter(

# fundamentals.eod_derivative_indicator.pe_ratio > 50

# ).filter(

# fundamentals.eod_derivative_indicator.pe_ratio < 65

# )

# 选股

q = query(fundamentals.eod_derivative_indicator.pe_ratio,

fundamentals.income_statement.revenue

).order_by(

fundamentals.income_statement.revenue.desc()

).filter(

fundamentals.stockcode.in_(context.hs300)

).limit(10)

fund = get_fundamentals(q)

# 行列内容以及索引一起进行转置

# print(fund.T)

context.stock_list = fund.T.index

# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次

def before_trading(context):

pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新

def handle_bar(context, bar_dict):

# 开始编写你的主要的算法逻辑

# bar_dict[order_book_id] 可以拿到某个证券的bar信息

# context.portfolio 可以拿到现在的投资组合信息

# 使用order_shares(id_or_ins, amount)方法进行落单

# TODO: 开始编写你的算法吧!

# order_shares(context.s1, 1000)

# 在这里才能进行交易

# 先判断仓位是否有股票,如果有,卖出(判断在不在新的股票池当中)

if len(context.portfolio.positions.keys()) != 0:

for stock in context.portfolio.positions.keys():

# 如果旧的持有的股票不在新的股票池当中,卖出

if stock not in context.stock_list:

order_target_percent(stock, 0)

# 买入最新的每日更新的股票池当中的股票

# 等比例资金买入,投资组合总价值的百分比平分10份

weight = 1.0 / len(context.stock_list)

for stock in context.stock_list:

order_target_percent(stock, weight)

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次

def after_trading(context):

pass

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
股票回测是量化交易中非常重要的一环,它可以通过历史数据对交易策略进行模拟和评估,从而评估策略的可行性和优劣性。在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框架进行回测,设定回测开始和结束时间、初始资本、数据来源等参数,最终得到回测结果。 需要注意的是,这只是一个简单的例子,实际的交易策略可能会更加复杂,需要考虑更多的因素。另外,在进行股票回测时,也需要注意避免过度拟合或过度优化,以免出现回测虚高的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值