入市有风险,投资需谨慎,本文不作为任何投资参考依据。

选股可以通过形态和一些基本面的数据进行选择,还可以通过相似度选股以及趋势选股。

相似度

我们一般比较在意股票的收盘价,比如均线或者各种指标如果需要计算一段序列值,我们一般选择收盘价作为序列中的值,就像5日均线计算的是五日的收盘价的均值一样。

那么每天的收盘价就是一个个数字,一年的收盘价就是一串大概220个数字的序列,这个序列在数学上我们可以用向量来表示,而向量与向量之间是可以计算余弦相似度的,通过这个相似度计算我们可以比较一下两支股票的相似程度。

余弦相似度的值在-1与1之间,越相似就越接近1,反之越接近-1.

假设我们对对一支股票很熟悉,那么和它走势极其相似的股票我们是不是可以认为会在以后也跟我们熟悉的那支股票大概一致呢?或者说,在某个特定的行情下,在手动选出了我认为有利的趋势股票,在通过相似度找到其他的股票或许是件不错的事。

这里研究一下最近一百个交易日内与平安银行(000001)这只股票最相似的前十只股票。

为了避免交易日范围相差太大的情况,比如虽然都是最近100个交易日,但是被计算的股票已经停牌了10个交易日或者它没有上市超过10个交易日,所以应该将这些情况给筛选掉。

还有就是股票之间的价格差距过大,那么通过两只股票的价格来进行相似度比较显然不够合理,所以这里选择股票的涨幅大小来进行相似度比较。

# 计算余弦相似度的函数def cos(vector_a, vector_b):vector_a = np.mat(vector_a)vector_b = np.mat(vector_b)num = float(vector_a * vector_b.T)denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)cos = num / denomreturn cosdef select_by_similarity(data_path, code_name, top_size=10):day_range = 100# 交易日的起始截至时间做大不能超过这个间隔max_delta = timedelta(days=7)all_df = load_all_local_data(data_path, tail_size=day_range)# code_name = "000001.SZ"if code_name not in all_df:print("要比对的股票不在当前下载的股票数据中")vector_a = all_df[code_name].pct_chgstart_date_a = vector_a.index[0]end_date_a = vector_a.index[-1]ret = []for ts_code, df in all_df.items():if ts_code == code_name:continueif len(df) < 100:print("股票[%s]交易日不足%s" % (ts_code, day_range))continuevector_b = df.pct_chgstart_date_b = vector_b.index[0]end_date_b = vector_b.index[-1]# 计算开始结束交易日之间的时间间隔start_delta = abs(start_date_a - start_date_b)end_delta = abs(end_date_a - end_date_b)if start_delta > max_delta or end_delta > max_delta:print("股票[%s]与股票[%s]交易日间隔过大!" % (ts_code, code_name))continuecos_similarity = cos(vector_a, vector_b)ret.append((ts_code, cos_similarity))ret.sort(key=lambda x:x[1])print("相似度前%s的结果如下" % top_size)print(ret[-top_size:])print("最不相似的股票前%s的结果如下:" % top_size)print(ret[:top_size])return ret[-top_size:]

结果如下:

相似度前10的结果如下

[('601838.SH', 0.8413642902505222), ('600036.SH', 0.8435001924441485), ('601169.SH', 0.8446885175520177), ('600016.SH', 0.8460465823734755), ('601009.SH', 0.8472997719986147), ('601336.SH', 0.8493514488651387), ('601998.SH', 0.8501435442736384), ('601318.SH', 0.8515548626391685), ('601997.SH', 0.8723615980483687), ('601166.SH', 0.8951643562949727)]

最不相似的股票前10的结果如下:

[('600179.SH', -0.28209061607471647), ('002107.SZ', -0.2760541800360499), ('600630.SH', -0.2698469313704402), ('000790.SZ', -0.25063912833911006), ('002950.SZ', -0.24371742830236853), ('601718.SH', -0.24320952954633515), ('002603.SZ', -0.23229949296048), ('002022.SZ', -0.2298724102455836), ('688399.SH', -0.22925118956499124), ('688068.SH', -0.2222771289248757)]

可以发现最相似的是601838(成都银行)。

两只股票最近的走势如下

数据来自新浪财经

可以发现,虽然价格不同,但是相似度无论是通过计算公式计算还是人眼观察都有比较强的相似度的。

趋势选股

世上指标千千万,独爱均线,

首先,我们谁都不能预测未来,那么各种指标都是滞后的,均线也不例外,我们能看到的只有过去跟现在,既然如此就简单点吧,那些计算如此复杂的指标真的能比均线看的远一些么?

关于均线还有一些衍生的玩法,比如不同频率的均线的密集程度来判断趋势的启动与结束,以及股价与均线的差异值来判断股价的偏离程度,也是因为这些衍生的玩法,让我觉得对于一个想做趋势交易的我觉得,均线于我而言,远远足够了。

通过均线的密集程度判断趋势的开端。

def select_by_trend(data_path, code_name, ma_lst=None):fp = path.join(data_path, ("%s-.csv" % code_name))if not path.exists(fp):print("股票[%s]不存在本地数据" % code_name)df = pd.read_csv(fp, index_col="trade_date", parse_dates=["trade_date"])ohlc_columns = ["open", "high", "low", "close"]df = df[ohlc_columns]if ma_lst is None:ma_lst = [5, 20, 60, 120, 220]max_ma = max(ma_lst)ma_name_lst = []for ma in ma_lst:ma_name = "ma_%s" % mama_name_lst.append(ma_name)df[ma_name] = df.close.rolling(ma).mean()# 设置图片大小plt.figure(figsize=(10,6))# 过滤掉没有最长均线数据的交易日df2 = df.iloc[max_ma:]# 绘制k线图ax = ohlc_plot(df2[ohlc_columns])# 绘制均线图df2[ma_name_lst].plot(ax=ax)plt.savefig("ma.png")plt.show()

结果如下:

下面是本人用于分析的基本图表,仅供参考。也欢迎讨论。

代码如下:

def select_by_nobody(data_path, code_name, ma_lst=None, threshold=20, atr_period=14, diff_ma=20):fp = path.join(data_path, ("%s-.csv" % code_name))if not path.exists(fp):print("股票[%s]不存在本地数据" % code_name)df = pd.read_csv(fp, index_col="trade_date", parse_dates=["trade_date"])ohlc_columns = ["open", "high", "low", "close"]df = df[ohlc_columns]if ma_lst is None:ma_lst = [5, 20, 60, 120, 220]max_ma = max(ma_lst)# 计算均线ma_name_lst = []for ma in ma_lst:ma_name = "ma%s" % mama_name_lst.append(ma_name)df[ma_name] = df.close.rolling(ma).mean()# 默认以20日最高价作为上突破阈值, 20日最低价作为下突破阈值threshold_high_name = "threshold_high%s" % thresholdthreshold_low_name = "threshold_low%s" % thresholddf[threshold_high_name] = df.high.rolling(threshold).max()df[threshold_low_name] = df.low.rolling(threshold).min()# 默认atr的计算时间范围是14天# talib一般通过包装好的whl包安装# 参考: https://www.lfd.uci.edu/~gohlke/pythonlibs/import talibatr_name = "atr%s" % atr_perioddf[atr_name] = talib.ATR(df.high, df.low, df.close, atr_period)# 默认计算乖离率收盘价与20日均线的差值, 然后将这个差值比上收盘价, 这个值被称为乖离率# 通过乖离率可以观察收盘价与均值之间的差异,差异越大则可能回弹的概率比较大if diff_ma not in ma_lst:ma_name = "ma%s" % diff_madf[ma_name] = df.close.rolling(ma).mean()diff_name = "diff%s" % diff_madf[diff_name] = (df["close"] - df[ma_name]) / df["close"]# 设置图片大小plt.figure(figsize=(10,18))# 配置子图ax1 = plt.subplot(311)ax2 = plt.subplot(312)ax3 = plt.subplot(313)# 过滤掉没有最长均线数据的交易日df2 = df.iloc[max_ma:]# 绘制k线图ohlc_plot(df2[ohlc_columns], ax1)# 绘制均线图df2[ma_name_lst].plot(ax=ax1)# 绘制上下最高最低突破线df2[[threshold_high_name, threshold_low_name]].plot(ax=ax1)# 绘制atrdf2[atr_name].plot(ax=ax2)# 绘制乖离率df2[diff_name].plot(ax=ax3)plt.savefig("nobody.png")plt.show()

结果如下:

股市小白必看!能获取股票数据的编程语言:Python带你看懂股市线相关推荐

  1. Python获取股票数据并绘制相应K线图,看这个就够了!

    Python对股票的K线可视化 前言 说明 注意 数据获取 Tushare获取股票数据 获取医疗器械板块数据(代码部分) 获取股票数据(代码部分) 数据预处理 变量中文化(代码部分) K线绘制 代码部 ...

  2. 使用R语言从网易财经批量获取股票数据并进行整合的方法

    最近因为投资分析需要接触R语言,需要获取A股上市公司数据.从同花顺下载效率太低,就到处找途径.分享下方法,共其他小白参考,请大神指正. R语言自带的quantmod数据不错,不过国内A股数据不全,而且 ...

  3. R获取股票数据并进行进行可视化分析

    R获取股票数据并进行进行可视化分析 # 加载依赖的包 library(quantmod) library(ggplot2) library(magrittr) library(broom) # 设置计 ...

  4. python tushare获取股票数据_Python 金融: TuShare API 获取股票数据 (1)

    多多教Python 金融 是我为金融同行,自由职业投资人 做的一个专栏.这里包含了我自己作为量化交易员,在做研究时所用到的Python技巧和实用案例.这个栏目专业性会比较强:本人29岁,量化工作5年的 ...

  5. mysql获取当月数据_Python + MySQL如何获取股票数据(历史数据)

    从互联网(网易数据接口)获取股票历史数据,包括开盘价.最高价.最低价.收盘价等等. python高薪就业(视频.爬虫.数据分析.学习路线.免费获取)​shimo.im 环境 Python 3.6 My ...

  6. 如何使用 Yahoo! Finance stock API 获取股票数据

    本站曾介绍过,通过代码添加雅虎财经的股票走势图到自己网站的方法(添加美国股市 ,添加沪深股市 ),调用的是一张图片.今天在德馨 网站,看到了从雅虎财经频道获取股票数据的API(Yahoo! Finan ...

  7. 获取股票数据【使用JQData查询行情数据、财务指标、估值指标】

    了解股票: 在上一次量化小科普[什么是量化?常用的股票量化指标.如何搭建量化交易系统]对于量化的概念有了一个基本认识,其中量化的主体在这门课程的学习中是"股票",而当别人问你:&q ...

  8. python分析股票主力_python如何获取股票数据,python股票分析系统

    内容导航: Q1:怎样用python处理股票 用Python处理股票需要获取股票数据,以国内股票数据为例,可以安装Python的第三方库:tushare:一个国内股票数据获取包.可以在百度中搜索&qu ...

  9. 获取股票数据【实时更新股票数据、创建你的股票数据】、计算交易指标【买入、卖出信号、计算持仓收益、计算累计收益率】

    在上一次获取股票数据[使用JQData查询行情数据.财务指标.估值指标]学习了使用JQData来查询股票相关数据, 这次则开始一点点构建咱们的量化交易系统了. 量化交易平台功能模块了解: 对于一个量化 ...

最新文章

  1. 构建根文件系统启动(1)
  2. 怎样把pdf转换成word
  3. 015_Vue生命周期
  4. 倒戈了,转投简书 --------
  5. 中国人均负债15.5万元,你贡献了多少?
  6. Emgu-WPF学习使用-阈值化
  7. linux otl 连接mysql_Linux下用OTL操作MySql(包括自己封装的类库及示例代码下载)...
  8. rabbitmq 手动提交_第四章----SpringBoot+RabbitMQ发送确认和消费手动确认机制
  9. 关于sql中字符串的疑惑
  10. NGS中的一些软件功能介绍
  11. avast! Virus Cleaner 1.0.210
  12. 关于Linux下ISE和vivado安装cable usb驱动的问题
  13. nodejs遍历文件夹下所有文件
  14. hiberfil.sys和swapfile.sys文件的删除
  15. 开一间蜜雪冰城能挣多少钱?
  16. PostgreSQL-Docker创建PostgreSQL数据库并导入矢量数据
  17. 三十八、C++ 信号捕获
  18. 足球视频AI(一)——位置与平面坐标的转换
  19. Win10右键菜单“发送到”添加/删除选项的方法
  20. 网络安全——缓冲区溢出攻击

热门文章

  1. mac文件共享连不上服务器,mac服务器文件夹共享权限设置
  2. mysql 没有my.cnf文件_Linux mysql没有my.cnf,替代文件为mysql.conf.d
  3. 阿里云服务器不能发送smtp协议邮件问题
  4. python pyqt5图片(QPixmap)和opencv图片数据结构相互转换
  5. android 删除号码恢复,手机联系人误删了怎么恢复
  6. 新电脑win10 改win7 要注意
  7. ##if语句与if语句的嵌套
  8. 《asp.net夜话》一书视频ASP.NET夜话视频1-14章下载(ASP.NET夜话2009年5月8日更新)
  9. Google网址大全
  10. 如何修复“Windows/System32/Config/System中文件丢失或损坏”故障