使用 Python 的 NSE 期权链数据 – 第二部分 |沙阿·斯塔万

在上一篇文章中,我们讨论了如何使用 python 获取 nifty 和 bank nifty 数据。那篇文章的反响很好,因此根据大众的需求,这里有一个扩展版本。在本文中,我们将学习如何每 30 秒从 nse 网站获取期权链数据。此内容仅用于学习目的。

在 python 中,我们将使用 asyncio 每 30 秒向 nse 数据发出一次 api 请求。

在python中安装所需的库

pip 安装 aiohttp 异步

代码

import aiohttpimport asyncioimport requestsimport jsonimport mathimport timedef strRed(skk):         return "33[91m {}33[00m".format(skk)def strGreen(skk):       return "33[92m {}33[00m".format(skk)def strYellow(skk):      return "33[93m {}33[00m".format(skk)def strLightPurple(skk): return "33[94m {}33[00m".format(skk)def strPurple(skk):      return "33[95m {}33[00m".format(skk)def strCyan(skk):        return "33[96m {}33[00m".format(skk)def strLightGray(skk):   return "33[97m {}33[00m".format(skk)def strBlack(skk):       return "33[98m {}33[00m".format(skk)def strBold(skk):        return "33[1m {}33[00m".format(skk)def round_nearest(x, num=50): return int(math.ceil(float(x)/num)*num)def nearest_strike_bnf(x): return round_nearest(x, 100)def nearest_strike_nf(x): return round_nearest(x, 50)url_oc      = "https://www.nseindia.com/option-chain"url_bnf     = 'https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY'url_nf      = 'https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY'url_indices = "https://www.nseindia.com/api/allIndices"headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',            'accept-language': 'en,gu;q=0.9,hi;q=0.8',            'accept-encoding': 'gzip, deflate, br'}cookies = dict()def set_cookie():    sess = requests.Session()    request = sess.get(url_oc, headers=headers, timeout=5)    return dict(request.cookies)async def get_data(url, session):    global cookies    async with session.get(url, headers=headers, timeout=5, cookies=cookies) as response:        if response.status == 401:            cookies = set_cookie()            async with session.get(url, headers=headers, timeout=5, cookies=cookies) as response:                return await response.text()        elif response.status == 200:            return await response.text()        return ""async def fetch_all_data():    async with aiohttp.ClientSession() as session:        indices_data = await get_data(url_indices, session)        bnf_data = await get_data(url_bnf, session)        nf_data = await get_data(url_nf, session)    return indices_data, bnf_data, nf_data# Process the fetched datadef process_indices_data(data):    global bnf_ul, nf_ul, bnf_nearest, nf_nearest    data = json.loads(data)    for index in data["data"]:        if index["index"] == "NIFTY 50":            nf_ul = index["last"]        if index["index"] == "NIFTY BANK":            bnf_ul = index["last"]    bnf_nearest = nearest_strike_bnf(bnf_ul)    nf_nearest = nearest_strike_nf(nf_ul)def process_oi_data(data, nearest, step, num):    data = json.loads(data)    currExpiryDate = data["records"]["expiryDates"][0]    oi_data = []    for item in data['records']['data']:        if item["expiryDate"] == currExpiryDate:            if nearest - step*num <= item["strikePrice"]  0 else strRed(ce_oi)        pe_color = strGreen(pe_oi) if pe_change > 0 else strRed(pe_oi)        print(f"Strike Price: {strike}, Call OI: {ce_color} ({strBold(f'+{ce_change}') if ce_change > 0 else strBold(ce_change) if ce_change  0 else strBold(pe_change) if pe_change  0 else strRed(ce_oi)        pe_color = strGreen(pe_oi) if pe_change > 0 else strRed(pe_oi)        print(f"Strike Price: {strike}, Call OI: {ce_color} ({strBold(f'+{ce_change}') if ce_change > 0 else strBold(ce_change) if ce_change  0 else strBold(pe_change) if pe_change < 0 else pe_change})")def calculate_support_resistance(oi_data):    highest_oi_ce = max(oi_data, key=lambda x: x[1])    highest_oi_pe = max(oi_data, key=lambda x: x[2])    return highest_oi_ce[0], highest_oi_pe[0]async def update_data():    global cookies    prev_nifty_data = prev_bank_nifty_data = None    while True:        cookies = set_cookie()        indices_data, bnf_data, nf_data = await fetch_all_data()        process_indices_data(indices_data)        nifty_oi_data = process_oi_data(nf_data, nf_nearest, 50, 10)        bank_nifty_oi_data = process_oi_data(bnf_data, bnf_nearest, 100, 10)        support_nifty, resistance_nifty = calculate_support_resistance(nifty_oi_data)        support_bank_nifty, resistance_bank_nifty = calculate_support_resistance(bank_nifty_oi_data)        print(strBold(strCyan(f"nMajor Support and Resistance Levels:")))        print(f"Nifty Support: {strYellow(support_nifty)}, Nifty Resistance: {strYellow(resistance_nifty)}")        print(f"Bank Nifty Support: {strYellow(support_bank_nifty)}, Bank Nifty Resistance: {strYellow(resistance_bank_nifty)}")        print_oi_data(nifty_oi_data, bank_nifty_oi_data, prev_nifty_data, prev_bank_nifty_data)        prev_nifty_data = nifty_oi_data        prev_bank_nifty_data = bank_nifty_oi_data        for i in range(30, 0, -1):            print(strBold(strLightGray(f"rFetching data in {i} seconds...")), end="")            time.sleep(1)        print(strBold(strCyan("nFetching new data... Please wait.")))        await asyncio.sleep(1)async def main():    await update_data()asyncio.run(main())

输出:

使用 Python 的 NSE 期权链数据 - 第二部分 |沙阿·斯塔万

使用 Python 的 NSE 期权链数据 - 第二部分 |沙阿·斯塔万

立即学习“Python免费学习笔记(深入)”;

您甚至可以通过此链接观看演示视频

谢谢!!
我们下一篇富有洞察力的博客见。

以上就是使用 Python 的 NSE 期权链数据 – 第二部分 |沙阿·斯塔万的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1348799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 12:21:30
下一篇 2025年12月13日 12:21:43

相关推荐

  • 如何使用 Python 抓取 Google 新闻:分步指南

    网络抓取已成为开发人员的一项基本技能,使他们能够从各种在线资源中提取有价值的数据。最受欢迎的抓取目标之一是 google 新闻,它是世界各地最新新闻文章的丰富存储库。本指南旨在提供详细的分步方法来抓取 google 新闻,重点针对中高级开发人员。我们将涵盖从基础知识到高级技术的所有内容,确保您拥有有…

    2025年12月13日
    000
  • 使用 Python 抓取 Google 财经的终极指南

    网络抓取已成为开发人员的一项基本技能,尤其是在提取有价值的财务数据时。谷歌财经是此类数据的热门来源,但抓取这些数据可能具有挑战性。本指南将引导您完成使用 python 抓取 google finance 的过程,涵盖基本和高级技术。无论您是初学者还是中高级开发人员,本文旨在通过实际示例和解决方案满足…

    2025年12月13日
    000
  • 我的创建事件管理 CLI 应用程序的旅程

    我的创建事件管理 cli 应用程序的旅程 介绍 作为软件开发的初学者,最令人兴奋和艰巨的任务之一就是创建您的第一个重要项目。对我来说,这是事件管理 cli 应用程序。这个项目不仅帮助我巩固了对 python 的理解,还向我介绍了 sqlalchemy orm、click 等 cli 库以及软件开发的…

    2025年12月13日
    000
  • 如何使用 Python 抓取亚马逊产品数据

    介绍 在当今数据驱动的世界中,抓取亚马逊产品数据已成为开发人员的一项关键技能,尤其是那些从事电子商务、市场研究和竞争分析的开发人员。本综合指南旨在为中高级公司开发人员提供有效抓取亚马逊产品数据所需的知识和工具。我们将介绍各种方法、工具和最佳实践,以确保您能够收集所需的数据,同时遵守道德和法律准则。有…

    2025年12月13日
    000
  • 使用 Lyzr SDK 构建 NLP

    在软件开发领域,将自然语言的想法转化为功能代码通常是一个充满挑战且耗时的过程。但是,如果您可以借助先进的 ai 工具 简化此流程呢?欢迎使用nl2php,这是一款创新的应用程序,旨在轻松地将您的自然语言指令转换为准确的 php 代码。 利用 lyzr automata 和 openai 的 gpt-…

    2025年12月13日
    000
  • 除了拉上外套拉链之外:掌握 Python 中的“zip_longest”

    我敢打赌,您可能遇到过尝试在 python 中压缩两个不同长度的列表而丢失数据的挫败感。itertools.zip_longest 可以拯救世界。在这里我想探索如何使用zip_longest(),将其与标准zip进行比较,并深入研究它的闪光点的实际场景。 itertools.zip_longest …

    2025年12月13日
    000
  • 使用 Python 和 Microsoft Learn 开启您的编码之旅!

    为什么 Python 应该成为你的第一门编程语言 Python 不仅仅是另一种编程语言 — 它是编码领域的瑞士军刀。原因如下: 易于学习:Python 的语法清晰易读,非常适合初学者。 多功能:从 Web 开发到 AI,Python 都能做到。 高需求: 公司不断寻找Python开发人员。 立即学习…

    2025年12月13日
    000
  • 计算机编程入门自学教程

    计算机编程是将人类意图转化为计算机可执行指令的过程,已成为现代社会必不可少的技能。入门自学步骤包括:选择一门简单编程语言;寻找适合学习风格的学习材料;持续实践,构建自己的项目;了解基础概念,如数据类型、变量、控制流、函数;构建实际项目,应用技能;遇到困难时寻求帮助。 计算机编程入门自学教程 入门:为…

    2025年12月13日
    000
  • 如何在电脑上安装python软件操作方法

    如何安装 Python: 1. 前往官方网站:https://www.python.org/downloads/。 2. 根据操作系统选择版本,建议安装最新稳定版本。 3. 下载安装程序。 4. 运行安装程序,选择“将 Python 添加到 PATH”。 5. 点击“安装”。 6. 验证安装:输入“…

    2025年12月13日
    000
  • python怎么进入编程界面操作方法

    Python 编程的第一步是进入解释器或交互模式。可以在命令行窗口输入 “python” 或使用 IDLE(交互式开发环境)新建脚本文件。界面显示为文本命令行,提示符为 “>>>” 或 “Python>”…

    2025年12月13日
    000
  • python入门题目100道知识点

    Python 是一种高级、通用的解释型编程语言,以简洁性和易读性闻名。其特点包括:可读性强、可移植性高、开源且免费、拥有庞大的社区和库。Python 支持多种数据类型、运算符、条件语句和循环语句。它还提供函数、模块和类等高级特性,使代码编写更有效率。 Python 入门 100 道知识点 1. 什么…

    2025年12月13日
    000
  • python能做什么?python是做什么的?

    Python 是一种通用编程语言,用途广泛,包括:Web 开发、数据科学、人工智能、科学计算、自动化、系统管理以及教育和研究。 Python 的用途 Python 是一种功能强大的通用编程语言,由于其广泛的库和简单易学的语法而备受青睐。它广泛应用于各种领域,包括: 1. Web 开发 构建动态网站和…

    2025年12月13日
    000
  • python.org.downloads手机版在哪里下载

    Python.org 目前没有移动版应用程序。替代选项包括:移动应用程序:Pydroid 3QPythonTermux在线 IDE:Online Python CompilerReplitPaizaCloud Python.org 移动版下载 如何下载 Python.org 移动版? Python.…

    2025年12月13日
    000
  • c++和python先学哪个最合适?c++和python都有什么用处?

    对于初学者来说,选择学习 C++ 或 Python 取决于他们的学习目标:面向对象编程和计算机系统底层知识:C++自动化任务、数据分析和机器学习:Python此外,也要考虑兴趣和职业目标,以及经验水平(Python 更适合新手)。 先学哪个语言更合适? 初学者选择学习 C++ 还是 Python 取…

    2025年12月13日
    000
  • Python 类变量和实例变量的黑白区别

    python 中的类变量和实例变量 在python中,有两种类型的变量:类变量和实例变量。理解这两类变量之间的区别对于编写高效且有组织的代码至关重要。这与其他语言有点不同。 类变量 类变量,也称为静态变量,是由类的所有实例共享的变量。它们是在任何方法或构造函数之外定义的,并且与类本身相关联,而不是与…

    2025年12月13日
    000
  • 使用 Lyzrai 转换文本:分步指南

    写作是我们日常生活中必不可少的一部分。无论是起草电子邮件、创建文档还是讲述故事,我们都力求清晰和准确。然而,使用拼写检查器纠正错误可能具有挑战性。 使用人工智能校对,这是一款旨在润色文本的出色工具。今天,我们将探索使用 ai 来改进写作、纠正语法、拼写、标点符号和格式的简单代码。 问题陈述 创建语法…

    2025年12月13日
    000
  • Python 中的装饰器 Getter 和 Setter

    装饰器的一种类型是属性获取器和设置器。这些装饰器允许对类实例中的变量进行受控访问。 属性 getter 和 setter 是专为控制面向对象编程中的属性而设计的。它们与函数装饰器不同,因为它们用于类属性(请在此处查看我关于函数装饰器的帖子)。函数装饰器和属性 getter 和 setter 装饰器都…

    2025年12月13日
    000
  • Django:如何使用 Shell?

    “我只需要运行这段代码的一部分,有什么办法吗?” 是的,可以使用 django shell 运行一段代码或脚本。它是一个交互式命令行界面,允许我们直接与数据库交互并测试代码片段。它类似于 python 提示符,但可以从您的项目导入函数、模型等。 如何访问 django shell? 此命令会打开已导…

    2025年12月13日
    000
  • 使用 Lyzr SDK 构建生产力助手

    在我们快节奏的世界中,保持生产力往往具有挑战性。由于需要兼顾众多任务和实现目标,找到适当的平衡点可能会让人不知所措。输入生产力助手,这是一款创新的应用程序,旨在根据您的特定需求提供个性化提示和可行的建议。该应用程序由 lyzr automata 和 openai 的 gpt-4 turbo 提供支持…

    2025年12月13日
    000
  • pycharm安装pip教程2024

    如何在 PyCharm 中安装 pip?确保 PyCharm 已安装 Python解释器。启用 “Package Installer”(软件包安装器)。在 PyCharm 控制台中键入以下命令并按 Enter:pip install –user pip。验证 pi…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信