量化体系(一) | 监控北向资金

熟悉我的小伙伴都知道我沉迷于炒股,那炒股有没有什么诀窍呀?在股市中有这么一股资金总是可以做出准确的判断高抛低吸,被投资者称为聪明资金——北向资金。那我们岂不是可以抄作业,根据北向资金的流入流出情况判断之后股市的行情,不多说了直接写个爬虫监控ta先。

目标网站:

aHR0cDovL2RhdGEuZWFzdG1vbmV5LmNvbS9oc2d0L2luZGV4Lmh0bWw=

目录

1、分析请求

2、获取数据


1、分析请求

北向资金分为沪股通、深股通两个渠道,目标数据就是下图圈起来的数据。

df0c8ce7736ab2f2d8a929875b4ede65.png

这个网站是老朋友了像这个10.28亿,接口发送给我们的不是10.28而可能是1028…搜的时候要搜1028,结果发现没有(打脸),那就再搜2515,结果如下图

196f8033f1ac803de60759283d6ce69a.jpeg

ta还进行了四舍五入难怪搜索1028搜不到。找到了接口就看看有没有加密。

b1759fa1515dadd610a3cddeb5da626c.png

看起来有加密了,但其实都是固定的,别问我为什么知道(多测试几遍就知道了)。

既然获取了北向资金的总体流向,那不如再加多一个北向资金前10大成交股

a5a2f433cc6d5293d8363e81fa0ce847.jpeg

这个和北向资金那个接口类型差不多,这就不过多赘述了

2、数据获取

我现在写爬虫的时候都是先用postman获取一个初步的爬虫,具体操作可以看三秒完成一个爬虫,然后在这个基础上进行功能的添加。

获取北向资金

由于参数都可以写死,直接请求拿到数据就好了。

def get_page(url, data_mode='{'):
    return jquery_list(requests.get(url=url, headers=headers).text, data_mode=data_mode)


def north_fund():
 """北向资金"""
 north_url = 'http://push2.eastmoney.com/api/qt/kamt/get?cb=jQuery112307554364681569443_1613660190289&' \
                'fields1=f1%2Cf2%2Cf3%2Cf4&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf63&' \
                'ut=b2884a393a59ad64002292a3e90d46a5&_=1613660190290'
    total_fund, text, step = 0, '', 0
    for i in get_page(url=north_url, data_mode='{')['data'].items():
        rjlr = round(i[1]['netBuyAmt'] / 10000, 2)
        if i[0] == 'hk2sh':
            text += f'沪股通流入:{rjlr}亿\n'
            total_fund += rjlr
        if i[0] == 'hk2sz':
            text += f'深股通流入:{rjlr}亿\n'
            total_fund += rjlr
        step += 1

    text = f'北向资金净流入{round(total_fund, 3)}亿\n' + text
    return text

获取北向资金10大成交股

def top10_rank():
    """top10成交榜"""
    hs = {'HGT': '1', 'SGT': '3'}
    timestamp = int(time.time() * 1000) - 300
    text = ''
    for x, y in hs.items():
        sgt_url = 'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?' \
                  f'callback=jQuery112305742757220060151_{timestamp}&st=DetailDate%2CRank&sr=1&ps=10&p=1&' \
                  f'type=HSGTCJB&token=70f12f2f4f091e459a279469fe49eca5&filter=(MarketType%3D{y})&sty={x}'
        stock_code, name_list, jme_list, percent_list = [], [], [], []
        if x == 'HGT':
            hsgt = '沪股通'
        else:
            hsgt = '深股通'
        text += f'--------------------------------\n{hsgt}\n'
        for i in get_page(url=sgt_url):
            code = i['Code']
            stock_code.append(code)
            name = i['Name']
            name_list.append(name)
            close = i['Close']
            change_percent = round(i['ChangePercent'], 2)
            percent_list.append(change_percent)
            jme = round(i[f'{x}JME'] / 100000000, 2)
            jme_list.append(jme)
            mrje = round(i[f'{x}MRJE'] / 100000000, 2)
            mcje = round(i[f'{x}MCJE'] / 100000000, 2)
            cjje = round(i[f'{x}CJJE'] / 100000000, 2)
            data = {'code': code, 'name': name, 'close': close, '涨跌幅': change_percent,
                    '净买额': jme, '买入金额': mrje, '卖出金额': mcje, '成交金额': cjje}
        for i in range(len(stock_code)):
            text += f'{stock_code[i]} {name_list[i]} 净买额:{jme_list[i]}亿 涨跌幅:{percent_list[i]}%\n'
    return text

这个网站返回的数据看起来像json格式,但其实又不是,一开始我只想到了用正则提取数据。

d54b045a69c427a7c4e48e2200dd9907.jpeg

后来我了解到了eval()的作用,如下:

a = '[1, 2, 3]'
print(type(a), a)		<class 'str'> [1, 2, 3]
print(type(eval(a)), eval(a))	<class 'list'> [1, 2, 3]

eval()不单对列表有效,字典等其他数据类型也可以这样用。知道了这个方法就不用使用正则这么麻烦了,直接把花括号中的片段截取下来进行eval()就转为json格式了。

def jquery_list(jquery, data_mode='{'):
    reverse_mode = {'[': ']', '{': '}', '(': ')'}
    tail_str = jquery[-5:][::-1]
    return eval(jquery[jquery.index(data_mode): -tail_str.index(reverse_mode[data_mode])])

运行结果:

545196839c2082c4a007a8a038c4bf3d.jpeg

本节讲的网站没有什么难度,这只是构成我量化体系的一部分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值