使用python 来实现炒股

时间:2024-02-20 08:58:40

总述

以前有这种想法,自从平时下班后自学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\')