印度金融市场数据全指南:K线、实时行情与IPO新股对接

印度金融市场数据全指南:K线、实时行情与IPO新股对接

一、印度金融市场特色与数据价值

印度作为全球增长最快的主要经济体之一,其金融市场具有独特优势:

  • 市场规模庞大
    NSE(国家证券交易所)日均交易量超5000亿卢比,BSE(孟买交易所)拥有百年历史
  • 指数多样性
    • Nifty 50:印度蓝筹股基准指数
    • Nifty Bank:银行板块风向标
    • Nifty IT:全球IT服务公司聚集地
  • 高成长性行业
    IT服务、制药、消费金融板块年增长率超15%
  • 独特交易机制
    交易时段:9:15-15:30(IST),含盘前竞价(9:00-9:15)
  • IPO热潮
    2023年印度IPO数量全球第三,新兴科技公司占比40%

二、环境配置与基础对接

# 基础配置 - 印度市场专用
API_KEY = "IN_3a8b7c2d4e5f6a7b8c9d0e"  # 替换为实际密钥
BASE_URL = "https://api.stocktv.top"
INDIA_ID = 14  # 印度国家代码(文档确认值)

# 时区设置
from datetime import datetime
import pytz
ist = pytz.timezone('Asia/Kolkata')  # 印度标准时区

# 安装依赖
# pip install requests websocket-client pandas plotly

三、K线数据专业对接方案

1. 多周期K线获取
def get_india_kline(pid, interval="PT15M"):
    """
    获取印度股票K线
    :param pid: 股票唯一ID(从市场列表获取)
    :param interval: 时间间隔(PT5M/PT15M/PT1H/P1D)
    """
    url = f"{BASE_URL}/stock/kline"
    params = {
        "pid": pid,
        "interval": interval,
        "key": API_KEY
    }
    response = requests.get(url, params=params)
    data = response.json()
    
    # 转换时间戳到IST时区
    df = pd.DataFrame(data['data'])
    df['time'] = pd.to_datetime(df['time'], unit='ms').dt.tz_localize('UTC').dt.tz_convert(ist)
    return df

# 获取信实工业(RELIANCE)15分钟K线
reliance_kline = get_india_kline(pid=12345, interval="PT15M")
2. 专业K线可视化(印度特色)
def plot_indian_stock(df, title):
    fig = make_subplots(rows=2, cols=1, shared_xaxes=True,
                       row_heights=[0.7, 0.3])
    
    # 印度常用绿色表示上涨
    fig.add_trace(go.Candlestick(
        x=df['time'],
        open=df['open'],
        high=df['high'],
        low=df['low'],
        close=df['close'],
        increasing_line_color='green',
        decreasing_line_color='red'
    ), row=1, col=1)
    
    # 添加20日EMA(印度分析师常用)
    df['EMA20'] = df['close'].ewm(span=20).mean()
    fig.add_trace(go.Scatter(
        x=df['time'],
        y=df['EMA20'],
        name='EMA20',
        line=dict(color='blue', width=2)
    ), row=1, col=1)
    
    # 成交量(印度以卢比计价)
    fig.add_trace(go.Bar(
        x=df['time'],
        y=df['volume'],
        name='成交量(₹)',
        marker_color='#7f7f7f'
    ), row=2, col=1)
    
    # 设置印度交易时段标记
    fig.update_xaxes(
        rangebreaks=[
            {'bounds': ['sat', 'mon']},  # 隐藏周末
            {'pattern': 'hour', 'bounds': [15.5, 9]},  # 非交易时段
        ]
    )
    
    fig.update_layout(
        title=f'{title} - NSE印度市场',
        yaxis_title='价格(₹)',
        template="plotly_dark",
        height=600
    )
    fig.show()

plot_indian_stock(reliance_kline, "信实工业(RELIANCE)")

四、实时行情数据对接

1. WebSocket实时行情订阅
class IndiaRealtime:
    def __init__(self):
        self.stock_map = {
            "RELIANCE": "信实工业",
            "HDFCBANK": "HDFC银行",
            "TCS": "塔塔咨询"
        }
    
    def on_message(self, ws, message):
        data = json.loads(message)
        if 'pid' in data:
            symbol = self.get_symbol_by_pid(data['pid'])
            trend = "🟢" if data['chgPct'] >=0 else "🔴"
            print(f"{trend} {symbol}: {data['last']} ₹ "
                  f"({data['chgPct']:.2f}%) 量: {data['turnover_numeric']/1e6:.2f}M")
    
    def start(self):
        ws = websocket.WebSocketApp(
            f"wss://ws-api.stocktv.top/connect?key={API_KEY}",
            on_message=self.on_message
        )
        threading.Thread(target=ws.run_forever).start()
    
    def get_symbol_by_pid(self, pid):
        # 根据PID获取股票代码(需预先缓存映射关系)
        return self.stock_map.get(str(pid), f"UNKNOWN_{pid}")

# 启动实时服务
india_rt = IndiaRealtime()
india_rt.start()

五、IPO新股数据对接

1. IPO日历与详情获取
def get_india_ipo(status="upcoming"):
    """获取印度IPO列表"""
    url = f"{BASE_URL}/stock/getIpo"
    params = {
        "countryId": INDIA_ID,
        "status": status,
        "key": API_KEY
    }
    response = requests.get(url, params=params)
    return response.json()['data']

# 获取近期IPO
ipos = get_india_ipo()
print("印度即将上市IPO:")
for ipo in ipos[:3]:
    print(f"- {ipo['company']} ({ipo['symbol']})")
    print(f"  交易所: {ipo['exchange']}")
    print(f"  发行价: {ipo['ipoPrice']} ₹")
    print(f"  市值: {ipo['ipoValue']} | 日期: {ipo['date']}")
2. IPO数据分析
def analyze_ipo_performance():
    ipos = get_india_ipo("recent")
    df = pd.DataFrame(ipos)
    
    # 计算首日收益率
    df['return_pct'] = (df['last'] - df['ipoPrice']) / df['ipoPrice'] * 100
    
    # 按交易所分析
    exchange_perf = df.groupby('exchange')['return_pct'].agg(['mean', 'count'])
    
    # 可视化
    fig = px.bar(df, x='symbol', y='return_pct', 
                 color='exchange', 
                 title="印度IPO首日收益率",
                 labels={'symbol':'股票代码', 'return_pct':'收益率(%)'})
    fig.show()
    
    return df

ipo_df = analyze_ipo_performance()

六、生产环境最佳实践

1. 印度市场特殊处理
# 印度市场假期(2023年示例)
IN_HOLIDAYS = ['2023-01-26', '2023-03-07', '2023-04-04', '2023-08-15']

def is_trading_day(date):
    """检查是否为印度交易日"""
    return date.weekday() < 5 and date.strftime('%Y-%m-%d') not in IN_HOLIDAYS

def is_trading_time(dt):
    """检查交易时段"""
    if not is_trading_day(dt): return False
    hour, minute = dt.hour, dt.minute
    # 主交易时段: 9:15-15:30 IST
    return (9,15) <= (hour,minute) <= (15,30)
2. 性能优化策略
import redis
from functools import lru_cache

# 初始化Redis缓存
redis_pool = redis.ConnectionPool(host='localhost', port=6379, db=3)
redis_client = redis.Redis(connection_pool=redis_pool)

@lru_cache(maxsize=100)
def get_stock_detail(pid):
    """带缓存的股票详情查询"""
    cache_key = f"in:stock:{pid}"
    if redis_client.exists(cache_key):
        return json.loads(redis_client.get(cache_key))
    
    url = f"{BASE_URL}/stock/queryStocks"
    params = {"id": pid, "key": API_KEY}
    response = requests.get(url, params=params)
    data = response.json()
    
    # 缓存15分钟
    redis_client.setex(cache_key, 900, json.dumps(data))
    return data

七、总结与资源

核心价值点:

  • 实时获取NSE/BSE双交易所数据
  • 支持中小板(SME)IPO数据
  • 卢比(Rupee)计价精准处理

印度市场注意事项:

  1. 价格单位:1手=1股(不同于多数市场)
  2. 涨跌幅限制:各板块不同(主板块±20%)
  3. 结算周期:T+2交割制度
  4. 特色板块:
    • Nifty IT:Infosys、TCS等IT巨头
    • Nifty Pharma:太阳制药等全球供应商

扩展资源:

重要提示:印度股市数据需遵守SEBI的《市场数据政策》,商业用途需获取授权

# 示例密钥生成代码(实际使用需官网申请)
import secrets
api_key = "IN_" + secrets.token_hex(12).upper()
print(f"生成印度专用API密钥: {api_key}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值