来源:雪球App,作者: 码力十足学量化,(https://xueqiu.com/1501923589/219455737)
现在A股市场有沪深主板,创业板,科创板和北交所股票,这个交易所股票的涨跌停板幅度又有不同,例如:沪深主板的st股票为5%,其余涨跌幅为10%,创业板和科创板为20%,北交所股票为30%。所以在量化回测中必不可免的要将这样股票的计算进行分类。具体代码如下:
import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
def Calculate_the_stock_price_limit(df):
"""
计算每个交易日股票的涨跌停板,股票类型包括主板、创业板、ST股、科创板和北交所上市的股票,
涨跌停要按严格的四舍五入进行计算。
"""
# 计算涨停板
df.loc[df['股票代码'].str.startwith('sh60'),df['涨停板']]=df['前收盘价']*1.1
df.loc[df['股票名称'].str.startwith('ST'), df['涨停板']] = df['前收盘价'] * 1.05
df.loc[df['股票代码'].str.startwith('sh68'), df['涨停板']] = df['前收盘价'] * 1.2
df.loc[df['股票代码'].str.startwith('sz0'), df['涨停板']] = df['前收盘价'] * 1.1
df.loc[df['股票代码'].str.startwith('sz30')&(df['交易日期'] > pd.to_datetime('2020-08-23')), df['涨停板']] = df['前收盘价'] * 1.2
df.loc[df['股票代码'].str.startwith('bj4')|df['股票代码'].str.startwith('bj8'),df['涨停板']]=df['前收盘价'] * 1.3
# 涨停板小数点后两位需要精确的四舍五入
df['涨停板']=df['涨停价'].apply(lambda x: float(Decimal(x * 100).quantize(Decimal('1'), rounding=ROUND_HALF_UP) / 100))
# 计算跌停板
df.loc[df['股票代码'].str.startwith('sh60'), df['跌停板']] = df['前收盘价'] * 0.9
df.loc[df['股票名称'].str.startwith('ST'), df['跌停板']] = df['前收盘价'] * 0.95
df.loc[df['股票代码'].str.startwith('sh68'), df['跌停板']] = df['前收盘价'] * 0.8
df.loc[df['股票代码'].str.startwith('sz0'), df['跌停板']] = df['前收盘价'] * 0.9
df.loc[df['股票代码'].str.startwith('sz30') & (df['交易日期'] > pd.to_datetime('2020-08-23')), df['跌停板']] = df['前收盘价'] * 0.8
df.loc[df['股票代码'].str.startwith('bj4') | df['股票代码'].str.startwith('bj8'), df['跌停板']] = df['前收盘价'] * 0.7
# 涨停板小数点后两位需要精确的四舍五入
df['跌停板'] = df['跌停板'].apply(lambda x: float(Decimal(x * 100).quantize(Decimal('1'), rounding=ROUND_HALF_UP) / 100))
return df
以上为A股股票涨跌板的计算方法,但是我们在现实的股票交易过程,还会遇到开盘涨停,一字涨停,尾盘涨停,开盘跌停,一字跌停,尾盘跌停的情况,如何在函数中将这些情况进行判断呢?欢迎大家交流,同时也可以私我要完整代码。
兵字加部首再组词
亦跟奕宝宝起名哪个好(亦字取名寓意好吗 亦和奕哪个用名字好)