栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用python+mongodb实现股票网格交易代码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用python+mongodb实现股票网格交易代码

文章目录
  • 标的选择
  • 数据抓取
  • 网格策略
    • 变量描述
    • 开始测算
    • 结果分析

使用python+mongodb实现网格交易的思路:

网格,顾名思义,就是低买高卖,实现方案是用python,对某只股票的历史数据:

  1. 从x天开始算(当天就买入)
  2. 设定一个预期卖出价格,比如,比上次买入价格盈利5%,则卖出
  3. 设定一个预期买入价格,比如,比上次买入价格下跌5%,再次买入

由于还需要考虑其他问题,比如:

  1. 买入的股数,必须是100的整数倍
  2. 当天买入的份额,当天是不能卖的
  3. 如果股价一飞冲天,会不会卖飞?为了解决这个问题,我们使用一个数值:“累计买入次数”,买入+1,卖出-1,只需要观察数值的大小,就知道最大会卖飞多少,那么对应的,考虑为其建底仓。
  4. 股价会不会一直下跌?理论上是会的,我们还是使用“累计买入次数”这个变量,来看极限情况下,最多买入多少次(考虑了卖出-1)
标的选择

这个是很多的,比如我常看的是下面这几个,比较稳健:

数据抓取

抓取历史数据,有很多的方案,比如

  • Tushare:https://www.tushare.pro/
  • 万得api
  • 爬虫(我用过搜狐证券:https://q.stock.sohu.com/cn/512010/lshq.shtml)
网格策略 变量描述

方案跟最开始的描述一致,代码中用到的一些变量

self.collection_detail_name = '策略2-网格-明细'+security
self.collection_summary_name = '策略2-网格-汇总'+security
super().__init__()
####################  计算数据  ########################
self.symbol = security
self.collection_name = security
self.mongo_util = MongoUtil()
self.start_date = start_date
##################  策略过程数据  #######################
self.last_buy_price = 0.000
# 预期买入价格
self.expect_buy_price = 0.000
# 预期卖出价格(根据最近一次买入价格计算) self.last_buy_price*(1+self.expect_percent)
self.expect_sell_price = 0.000
# 最多加仓多少次
self.buy_count = 0
self.sell_count = 0
# 最大浮亏金额
self.lose_total_money = 0.000
# 最大浮亏比例。 比如4.323%,这里就是4.323,不需要%。由于收益率是最终数据,此数据记录中间过程
self.lose_percent = 0.000
# 持有时间(从买到卖总天数,非交易天数,是自然日)
self.hold_days = 0
#####################  持仓情况  ########################
# cost: 成本价; capital:本金;shares:持有份额;benefit:收益;benefit_rate:收益率(不包含%)
# transactions: 交易信息 {'date': '', 'money': 0.000, 'shares':0, 'direction': '买入或卖出'}
self.hold_meta = {'cost': 0.000, 'capital': 0.000, 'shares': 0, 'benefit': 0.000, 'benefit_rate': 0.000,
'transactions': []}
#####################  达标目标  ########################
# 预期达标比例,例如盈利10%,就是0.1
self.expect_percent = 0.05
# 每次买入金额(这个还需要根据实际买入份额计算100整数倍)
self.per_buy_capital = 10000
开始测算

计算的时候,只需要如下:

# security是股票代码,date是希望从这一天开始测算,理论上随便选取哪天都可以,这样的话,可以策略在高点回落的极端场景,比如2018年以及之后的走势
strategy_meta = {"security": "SH601939", 'date': '2018-01-02'}
this = StrategyGrid(security=strategy_meta['security'], start_date=strategy_meta['date'])
# 删除mongodb中的旧的测算数据
this.delete_collection()
# 开始测算
this.run()
结果分析

这个是重头戏,先贴上来测算的结果(如有不对,麻烦指出)

标题头部:

_id:mongodb的唯一键

Benefit:利润,赚的钱

Benefit_rate:利润率

Buy_count: 前文解释过,是统计的历史"买入-卖出"次数

Capital:本金

cost:成本

date:交易日期(买入或卖出日期)

direction:交易方向(买入或卖出)

money:买入或卖出金额

price:买入或卖出价格

security:股票代码

Shares: 当前持仓数量

Start_date:测算的开始日期

  • 从2018-01-02开始,总共交易了多少次?买入和卖出各多少?

    共79次,买入40次,卖出39次

  • buy_count最大和最小多少?

    buy_count代表的是最多买入多少笔(最多加仓次数),最多卖出多少笔(卖飞),还是比较重要的

    • 最大:5

    • 最小:-3


      后续还会增加matplotlib进行可视化显示,比较好分析数据。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号