• 使用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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    开始测算

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

    # 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果分析

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

    标题头部:

    _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进行可视化显示,比较好分析数据。

  • 相关阅读:
    龙蜥白皮书精选:龙蜥安全漏洞管理体系介绍
    三农数据(1996-2020)十六:农产品进出口、农村居民纯收入、消费支出及结构
    华为云云耀云服务器L实例评测 |云服务器性能评测
    单目标优化算法:火鹰优化算法(Fire Hawk Optimizer,FHO)求解23个函数--提供MATLAB代码
    MYSQL数据库管理与创建
    R语言基于h2o包构建二分类模型:使用h2o.glm构建正则化的逻辑回归模型、使用h2o.auc计算模型的AUC值
    保姆级前端翻牌效果(CSS)
    SAP CO系统配置-物料分类帐
    spring源码——beanDefinition源码解析(一)
    PyQt5中为窗口添加菜单工具栏状态栏
  • 原文地址:https://blog.csdn.net/sdfiiiiii/article/details/125876895