tushare使用及重叠与非重叠检验

目录

前言

重叠与非重叠检验

1.非重叠模式检验

2.重叠模式检验


前言

本人是在校物理专业大学生,在牛市的行情下接触了股市,看着股市当中各种各样数据顿时感觉头疼无比。适逢其时,量化投资便映入眼帘,在学习量化的过程中,苦于无法直接获得股市数据,在上网冲浪的过程发现了tushare这一利器。

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、处理到数据存储的过程,数据多样易获取,在数据分析,机器学习,股票预测等领域都可以被广泛的应用。从tushare获取到的数据为dataframe格式,无需重新对数据进行处理,可以直接将数据存储至Oracle、MySQL,MongoDB、HDF5、CSV等中。

官网链接如下:https://tushare.pro/。其包括股票,基金,期权,债券,期货等多种数据。数据种类如下:https://tushare.pro/document/1?doc_id=108

笔者tushare ID:441542

重叠与非重叠检验

重叠检验与非重叠检验非常适用于量化金融,特别是交易策略的开发。非重叠模式检验关于二进制字符串中预先指定的模式的频率。如果该频率在统计上显著不同于真实随机序列的预期出现次数,则这将表明该序列是非随机的,并且我们检验的模式发生的概率太高或太低。这两种模式提供一个可靠的理论方法来检验设定的模式在市场收益序列中的显著程度,这同样可以应用于检验艾略特波浪理论和分形市场假说等。

1.非重叠模式检验

def non_overlapping_patterns(self, bin_data: str, pattern="000000001", num_blocks=8):
    n = len(bin_data);
    pattern_size = len(pattern);
    block_size = math.floor(n / num_blocks)
    pattern_counts = numpy.zeros(num_blocks)
    # 针对每个数据块执行操作
    for i in range(num_blocks):
        block_start = i * block_size
        block_end = block_start + block_size
        block_data = bin_data[block_start:block_end]
        # 计算模式出现次数
        j = 0
        while j < block_size:
            sub_block = block_data[j:j + pattern_size]
            if sub_block == pattern:
                pattern_counts[i] += 1
                j += pattern_size
            else:
                j += 1
    mean = (block_size - pattern_size+1) / pow(2, pattern_size)
    var = block_size * ((1 / pow(2, pattern_size)) - (((2 * pattern_size) - 1) / (pow(2, pattern_size * 2))))
    chi_squared = 0
    for i in range(num_blocks):
        chi_squared += pow(pattern_counts[i] - mean, 2.0) / var
    p_val =s pc.gammaincc(num_blocks / 2, chi_squared / 2)
    return p_val

2.重叠模式检验

def overlapping_patterns(self, bin_data: str, pattern_size=9, block_size=1032):
    n = len(bin_data);
    pattern = "";
    for i in range(pattern_size):
        pattern += "1"
    num_blocks = math.floor(n / block_size)
    lambda_val = float(block_size - pattern_size + 1) / pow(2, pattern_size)
    eta = lambda_val / 2.0
    
    piks = [self.get_prob(i, eta) for i in range(5)]
    diff = float(numpy.array(piks).sum())
    piks.append(1.0 - diff)
    
    pattern_counts = numpy.zeros(6)
    for i in range(num_blocks):
        block_start = i * block_size
        block_end = block_start + block_size
        block_data = bin_data[block_start:block_end]
        # 计算模式出现次数
        pattern_count = 0
        j = 0
        while j < block_size:
            sub_block = block_data[j:j + pattern_size]
            if sub_block == pattern:
                pattern_counts += 1
                j += 1
            if pattern_count <= 4:
                pattern_counts[pattern_count] += 1
            else:
                pattern_counts[5] += 1
    chi_squared = 0.0
    for i in range(len(pattern_counts)):
        chi_squared += pow(pattern_counts[i] - num_blocks*piks[i], 2.0) / (num_blocks*piks[i])
    return spc.gammaincc(5.0 / 2.0,chi_squared / 2.0)

def get_prob(self, u, x):
    out = 1.0 * numpy.exp(-x)
    if u != 0:
        out = 1.0 * x * numpy.exp(2 * -x)*(2 ** -u)* spc.hyplfl(u + 1, 2, x)
    return out

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值