100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【Python】用A股当天收盘价去计算下一个交易日涨停价格

【Python】用A股当天收盘价去计算下一个交易日涨停价格

时间:2020-02-05 17:16:45

相关推荐

【Python】用A股当天收盘价去计算下一个交易日涨停价格

文章目录

方法1方法2测试方法.

A股涨停的价格,不一定正好是10%,而是最靠近10%的数值,因为股价只精确到0.01,没有0.001这个数值,所以,经常会出现不是10%的情况,如下图所示:

Python里的…

round这个函数,说实话是真的坑…,第三位小数为5的时候,round(x,2),会出现比如

PS C:\Users\Yu> python3Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 , 07:18:10) [MSC v.1900 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> round(3.65,2)3.65>>> round(3.665,2)3.67>>> round(3.675,2)3.67>>>

所以不用round

这里需要考虑到一种情况就是,当乘以(1+10%)后,小数位只有两位的时候,需要补成三位小数才可以

因为国内股价(50ETF之类的基金不考虑)只精准到0.01,所以乘以(1+10%)最多只有三位小数

方法1

#!/usr/bin/env python# -*- coding: utf-8 -*-"""@Time : /8/26 11:26@Author : Yujinneng@File : 关于涨停价格.py@Software: PyCharm"""def output_price(close_price):daily_limit_price = close_price * (1 + 0.1)one_part_price = int(str(daily_limit_price).split(".")[0])'''daily_limit_price = int(str(daily_limit_price).split(".")[1][:3])daily_limit_price = str(daily_limit_price).ljust(3, '0')# 这两行代码,在一种情况下会出现异常.比如前一天收盘价为10.07,会出现第一行daily_limit_price 其实是077,但是int后,会变成77,补0后就成了770,所以要修改成下面的直接补全成3位然后进行int.'''daily_limit_price = int(str(daily_limit_price).split(".")[1][:3].ljust(3, '0'))one_number = str(daily_limit_price)[-1:]if one_number == '5':daily_limit_price = int(daily_limit_price) + 5daily_limit_price = int(daily_limit_price)daily_limit_price = int(daily_limit_price)daily_limit_price = (daily_limit_price / 1000)daily_limit_price = round(daily_limit_price, 2)hold_price = one_part_price + daily_limit_price# up_price = round(daily_limit_price,2) # 但是这样做,会有问题,2.675-->2.67,,3.575-->3.58,不能这样处理.# # 涨停,跌停价格判断为*(+/- 10%)最接近10%的数值# 举例,昨收盘价为3.25的股价,今日涨停3.58,跌停2.93# 3.25*1.1 = 3.575, 3.35*0.9 = 2.925,向上取2.93# 3.58涨幅为10.15%,08月26日的力帆股份,601777.SH# 这里一定最多只有三位小数return hold_priceclose_price = 37limit_price = output_price(close_price)print(limit_price)gain = (limit_price-close_price)/close_pricegain = "%.2f%%" % (gain * 100)print(gain)

方法2

下面这个应该是没问题.如果有问题请指出…

def output_price(input_close_price):daily_limit_price = input_close_price * (1 + 0.1)daily_limit_price = daily_limit_price*1000if str(daily_limit_price).split(".")[0][-1] == str(5):daily_limit_price += 5daily_limit_price = daily_limit_price/1000daily_limit_price = round(daily_limit_price, 2)return daily_limit_price# up_price = round(daily_limit_price,2) # 但是这样做,会有问题,2.675-->2.67,,3.575-->3.58,不能这样处理.# # 涨停,跌停价格判断为*(+/- 10%)最接近10%的数值# 举例,昨收盘价为3.25的股价,今日涨停3.58,跌停2.93# 3.25*1.1 = 3.575, 3.35*0.9 = 2.925,向上取2.93# 3.58涨幅为10.15%,08月26日的力帆股份,601777.SH# 这里一定最多只有三位小数close_price = 10.07limit_price = output_price(close_price)print(limit_price)gain = (limit_price-close_price)/close_pricegain = "%.2f%%" % (gain * 100)print(gain)

测试方法.

感觉一个一个手动太蠢了…

for i in range(100):close_price = random.uniform(10, 20)limit_price = output_price(close_price)gain = (limit_price - close_price) / close_price# <class 'float'>gain_percent = "%.2f%%" % (gain * 100)print(gain_percent)if (gain >= 0.1010) or (gain <= 0.0990):print(gain)

搞了一个这个,感觉试了下,还是可以的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。