• 使用python 来实现炒股


    总述

    以前有这种想法,自从平时下班后自学python 开始,这种想法就越演越烈。其实笔者炒股也只有一年时间,炒股经验远远不足,但想着平时私下时间拿来做点啥事,因此也是这篇文章的由来。

    1. 炒股的策略

    对于股票的研究,一直想再专门写个专辑论述《炒股论》。特别是这两年量化投资盛行,基本都是在python语言基础上进行的策略回归。

    总体来说,常规的股票研究分两种

    1) 技术参数回归

       把K线历史数据,MACD指标,这些进行参考,然后找出一条有效的策略,使得这个盈率50% -70%之间,这样就可以持续的增大盈亏概率。

    例如,技术量化回归中最常用的策略之一:市值< 200亿 ,换手率:3%<p <10%,5日均线上穿10日均线。。。

    2)量价关系与筹码回归

      由于很多行情接入点无法获取level 2级别的数据,这使得再单位时间点上的交易数量有差异,这种导致统计也会出现偏差。基于这种方式,其实区别第一种看趋势行情,它更倾向于当下行情。通过统计计算大致得出主力与散户的比率,所有持仓人筹码的盈亏比,这样来指导下一步计划。

    例如,统计当日各个阶段的买入和卖出量,每一笔订单累计到整体的成交量得出 主力大单与小单之比q,筹码盈亏比k

    炒股真的可以赚钱吗?

    -- 当然可以。只是喜忧参半,到头所剩无几,随着参与的次数越多,各种成本平摊下来,最终可能还是个负数。

    有些私募机构确实通过获得了收益,在如今的中国一些机构里,量化投资更加盛行。它最大的好处是避免了人为因素,行业周期因素,因此更适合长期。

    就像做T 轮动一样,无论行情如何变动,只要每天有3%的波动,那么就可以获取这每天的波动点。

    炒股本质是博弈。那么我们就需要研究下涨跌概率。通过已经所选的策略 放在历史行情当中进行回归测试,检查是否满足赢亏比。

    用python 需要哪些准备?

    1. 基础。 简单语法,定义函数、名词参数。 推荐python 基础教程、python 简明教程

    2. 线程。简单的线程并不难,了解就够。 属于高阶部分,部分网上也有介绍。这样可以实现各个函数的分工

    3. 模块。这个可能才是重点,如何调用别人的模块,如何获取数据。基础内容中必学之一

    可能这里需要爬虫,通过东方财富,同花顺或者新浪股票网页获取数据保存文件下来,当然也可以直接调用现行的接口。 比如 tushare, 新的pro版本已经是部分免费

    也就是说,一个python 程序的本质,就是模块中至少有tushare、pandas等等搭配的过程

    如何用python 实现炒股中赚钱?

    数据。这个比较容易获取,甚至套用已有的网络数据,如文章末尾的实例

    算法。这部分是技术核心,一般机构公司都保密而不公开,而且策略随市场变化,基本每个月都会变动以适用新的行情。后期专门讨论此系列。

    策略回归。国内已经有很多平台可以用,先参考成熟的平台比如米宽,同花顺,这些平台也有数据,注册平台后直接通过编辑免费使用

    重点:在于编写一套何种策略,才能增大你的盈利概率,即使不用回归历史行情。

    模型实例 1: 假设市场上交易只有两人, 张三(A) 和李四(B) 同时手上各有10个苹果,每个苹果的成本是1元,若张三以单价2元卖出5个给李四时,请问李四若以3元的单价进行回卖给张三,至少要卖出几个,才能不至于亏损?

    当进行多次买卖后,双方会到达一种新的平衡,若出现手上的苹果出现2:8比率时,此时的苹果价格会是多少?

    这种解释的启发,会获得算法上的灵感。

    比如笔者平时摸索,自己建立了几个小的经济数学模型,通过自我探讨成交量和价格波动关系,得到资金波动 公式k。然后通过当前的成交量,当前的价格来计算未来某一价格的最大可能性

    当然这个模型不可能百分之百让你盈利,做这样的结果,目的是尽可能的增加你的预测概率。对于是否存在有百分之百的概率,对此我表示谨慎的态度,也是我尽力研究的方向

    比如用baostock 平台数据获取下来的数据,然后加入自己计算的策略(简略参考部分)

    # -*- coding: utf-8 -*-
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import baostock as bs
    from matplotlib.dates import DateFormatter
    import datetime
    
    #### 登陆系统
    lg = bs.login()
    stock = "sh.600996"
    # 显示登陆返回信息
    print('login respond error_code:'+lg.error_code)
    print('login respond  error_msg:'+lg.error_msg)
    rs = bs.query_history_k_data_plus(stock,
        "date,code,open,high,low,close,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
        start_date='2019-06-20',frequency="d", adjustflag="3")
    print('query_history_k_data_plus respond error_code:'+rs.error_code)
    print('query_history_k_data_plus respond  error_msg:'+rs.error_msg)
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    result.to_csv("./stock.csv", index=False)
    #### 结果集输出到csv文件 ####   
    bs.logout()
    
    data = pd.read_csv('/Users/few/stock.csv')
    
  • 相关阅读:
    高并发、高性能、高可用
    性能优化 = 改改代码?
    高级开发必须理解的Java中SPI机制
    java性能优化的50个细节(珍藏版)
    Java API 设计清单
    QString与QByteArray互相转换的方法
    QT 托盘 hover事件捕捉
    qt捕获全局windows消息
    前端开发树形插件带来的烦恼(一)
    靠谱的div引入任何外链内容
  • 原文地址:https://www.cnblogs.com/nerocm/p/11788731.html
Copyright © 2020-2023  润新知