文章目录
显示
使用P值验证策略的可靠性
首先创建一个statistical_test.py
文件
一、测试平安银行的P值可靠性
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
import Data.Stock as st
import Strategy.Base as stb
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import Strategy.ma_strategy as ma
from scipy import stats
# 对策略收益进行ttest检验
def ttest(data_return):
# 调用假设检验tt est函数:scipy
t, p = stats.ttest_1samp(data_return, 0, nan_policy='omit')
# 获取单边P值
p_value = p/2
# 打印t、P
print("t value:" , t)
print("p value:" , p_value)
# 判断是否与理论均值有显著性差异
print("是否拒绝H0:收益均值=0:", p < 0.05)
return t, p_value
if __name__ == '__main__':
code = '000001.XSHE'
data = st.get_single_price(stock_code=code, timefrequency='daily', start_date=None, end_date='2021-01-01')
data = ma.ma_strategy(data)
# 策略的单次收益率
returns = data['profit_pct']
print(returns)
# 绘制一下分布图用于观察
# plt.hist(returns, bins=30)
# plt.show()
#对多个股票进行计算和测试
ttest(returns)
P Value
为0.08
,也就是说,从统计学上来说,它与均值0并没有显著的差异,但是这个结果不能够反推这个策略不赚钱,只能说从概率学上说,只有百分之8到10的概率是不赚钱的。大体上还是可以参考的策略,
如果说有一支股票,你测到它的P Value
=0.001,它并不能代表这支股票一定能赚到钱,它代表的是样本和理论数据有显著差异。也就是它极有可能让你赚钱,
所以从结论来说你可以简单的理解,当P Value
<0.05的时候,这个策略似乎是更可靠的,但这只是一个推论性质的指标,不是绝对的,
二、查看多只股票的P值
多测试2个股票的数据:
if __name__ == '__main__':
stocks = ['000001.XSHE','000858.XSHE','002594.XSHE']
for code in stocks:
data = st.get_single_price(stock_code=code, timefrequency='daily', start_date='2016-12-01', end_date='2021-01-01')
data = ma.ma_strategy(data)
# 策略的单次收益率
returns = data['profit_pct']
# print(returns)
# 绘制一下分布图用于观察
# plt.hist(returns, bins=30)
# plt.show()
#对多个股票进行计算和测试
print(code)
ttest(returns)
第一支股票的t Value
和最小,所以它样本的相似度最高,
从结果上来说,3支股票的p value
都没有小于0.05,也就是它和我们的样本没有啥显著性的差异
但是 当p value
越小,能代表和原来理论设置的0样本的差异越大 也就是越可能让我赚钱.
转载请注明:xuhss » Python量化交易实战-27使用P值验证策略的可靠性