import QUANTAXIS as QA
class QAAnalysis_stock():
"""
行情分析器
计算所有的指标
"""
def __init__(self, dataStruct, *args, **kwargs):
try:
# 如果是QA_Data_系列
self.data = dataStruct.data
self._data = dataStruct
except AttributeError:
# 如果是dataframe
self.data = dataStruct
# self.data=DataSturct.data
def __repr__(self):
return '< QAAnalysis_Stock >'
def __call__(self):
return self.data
# 使用property进行懒运算
@property
def open(self):
return self.data['open']
@property
def high(self):
return self.data['high']
@property
def low(self):
return self.data['low']
@property
def close(self):
return self.data['close']
@property
def vol(self):
if 'volume' in self.data.columns:
return self.data['volume']
else:
return self.data['vol']
@property
def volume(self):
if 'volume' in self.data.columns:
return self.data['volume']
else:
return self.data['vol']
@property
def date(self):
return self.data.index.levels[self.data.index.names.index(
'date')] if 'date' in self.data.index.names else self.data['date']
@property
def datetime(self):
return self.data.index.levels[self.data.index.names.index(
'datetime')] if 'datetime' in self.data.index.names else self.data.index.levels[self.data.index.names.index(
'date')]
@property
def index(self):
return self.data.index
# 均价
@property
def price(self):
return 0.25 * (self.open + self.close + self.high + self.low)
@property
def max(self):
return self.price.max()
@property
def min(self):
return self.price.min()
@property
def mean(self):
return self.price.mean()
# 一阶差分序列
@property
def price_diff(self):
return self.price.diff(1)
# 样本方差(无偏估计) population variance
@property
def pvariance(self):
return statistics.pvariance(self.price)
# 方差
@property
def variance(self):
return statistics.variance(self.price)
# 标准差
@property
def day_pct_change(self):
return (self.open - self.close) / self.open
@property
def stdev(self):
return statistics.stdev(self.price)
# 样本标准差
@property
def pstdev(self):
return statistics.pstdev(self.price)
# 调和平均数
@property
def mean_harmonic(self):
return statistics.harmonic_mean(self.price)
# 众数
@property
def mode(self):
return statistics.mode(self.price)
# 波动率
# 振幅
@property
def amplitude(self):
return self.max - self.min
# 偏度 Skewness
@property
def skewnewss(self):
return self.price.skew()
# 峰度Kurtosis
@property
def kurtosis(self):
return self.price.kurt()
# 百分数变化
@property
def pct_change(self):
return self.price.pct_change()
# 平均绝对偏差
@property
def mad(self):
return self.price.mad()
# 函数 指标计算
@lru_cache()
def add_func(self, func, *arg, **kwargs):
return func(self.data, *arg, **kwargs)
data=QA.QA_fetch_stock_day_adv('300872','2020-01-01','2021-09-15') #[可选to_qfq(),to_hfq()]
s=QA.QAAnalysis_stock(data)
@property
def open(self):
return self.data['open']
s.open
@property
def close(self):
return self.data['close']
s.close
@property
def high(self):
return self.data['high']
s.high
@property
def low(self):
return self.data['low']
s.low
@property
def vol(self):
if 'volume' in self.data.columns:
return self.data['volume']
else:
return self.data['vol']
s.vol
s.volume
@property
def datetime(self):
return self.data.index.levels[self.data.index.names.index(
'datetime')] if 'datetime' in self.data.index.names else self.data.index.levels[self.data.index.names.index('date')]
s.date
s.datetime
@property
def index(self):
return self.data.index
s.index
# 均价
@property
def price(self):
return 0.25 * (self.open + self.close + self.high + self.low)
s.price
@property
def mean(self):
return self.price.mean()
s.mean
@property
def max(self):
return self.price.max()
s.max
@property
def min(self):
return self.price.min()
s.min
# 平均绝对偏差
@property
def mad(self):
return self.price.mad()
s.mad
# 众数
@property
def mode(self):
return statistics.mode(self.price)
s.mode
# 一阶差分序列
@property
def price_diff(self):
return self.price.diff(1)
s.price_diff
# 方差
@property
def variance(self):
return statistics.variance(self.price)
s.variance
# 样本方差(无偏估计) population variance
@property
def pvariance(self):
return statistics.pvariance(self.price)
s.pvariance
# 标准差
@property
def stdev(self):
return statistics.stdev(self.price)
s.stdev
# 样本标准差
@property
def pstdev(self):
return statistics.pstdev(self.price)
s.pstdev
# 调和平均数
@property
def mean_harmonic(self):
return statistics.harmonic_mean(self.price)
s.mean_harmonic
# 振幅
@property
def amplitude(self):
return self.max - self.min
s.amplitude
# 偏度 Skewness
@property
def skewnewss(self):
return self.price.skew()
s.skewnewss
# 峰度Kurtosis
@property
def kurtosis(self):
return self.price.kurt()
s.kurtosis
# 百分数变化
@property
def pct_change(self):
return self.price.pct_change()
s.pct_change
@lru_cache()
def add_func(self, func, *arg, **kwargs):
return func(self.data, *arg, **kwargs)
s.add_func(QA.QA_indicator_CCI)