使用API获取新加坡股票数据的完整指南

简介: 本文为开发者提供获取新加坡股票数据的完整API指南,涵盖股票列表、历史K线、STI指数等核心接口调用方法,附Python实战示例(含实时监控、量化回测、WebSocket订阅与缓存优化),助力金融科技应用高效开发。(239字)

使用API获取新加坡股票数据的完整指南

在金融科技开发和量化交易领域,获取准确、实时的股票数据是构建分析系统和交易策略的基础。新加坡作为亚洲重要的金融中心,其股票市场数据对于开发者和投资者具有重要价值。本文将详细介绍如何通过API接口获取新加坡股票数据,并提供完整的实现示例。

一、数据源选择与准备工作

在开始之前,我们需要选择一个可靠的数据源(仅供参考,不构成任何投资建议)。

1.1 获取访问凭证

要使用该数据服务,首先需要获取API密钥。

1.2 安装必要依赖

对于Python开发者,建议安装以下库:

pip install requests pandas matplotlib

二、核心接口详解

2.1 获取新加坡股票列表

要获取新加坡交易所(SGX)的股票列表,可以使用以下接口:

import requests

def get_singapore_stocks(api_key, page_size=20, page=1):
    """获取新加坡股票列表"""
    url = "https://api.stocktv.top/stock/stocks"
    params = {
   
        "key": api_key,
        "countryId": 43,  # 新加坡国家ID
        "pageSize": page_size,
        "page": page
    }

    response = requests.get(url, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"请求失败: {response.status_code}")
        return None

# 使用示例
api_key = "您的API密钥"
stocks_data = get_singapore_stocks(api_key)
if stocks_data and stocks_data.get("code") == 200:
    for stock in stocks_data.get("data", {
   }).get("records", []):
        print(f"代码: {stock['symbol']}, 名称: {stock['name']}, 最新价: {stock['last']}")

该接口返回的数据包含股票代码、名称、最新价格、涨跌幅、成交量等关键信息。

2.2 获取历史K线数据

对于技术分析和策略回测,历史K线数据至关重要:

def get_historical_kline(api_key, pid, interval="P1D", limit=100):
    """获取股票历史K线数据

    参数:
    - pid: 股票产品ID
    - interval: 时间间隔
        PT5M: 5分钟
        PT15M: 15分钟
        PT1H: 1小时
        P1D: 日线
        P1W: 周线
        P1M: 月线
    - limit: 数据条数
    """
    url = "https://api.stocktv.top/stock/kline"
    params = {
   
        "pid": pid,
        "interval": interval,
        "limit": limit,
        "key": api_key
    }

    response = requests.get(url, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"请求失败: {response.status_code}")
        return None

# 使用示例
kline_data = get_historical_kline(api_key, pid=60231, interval="P1D", limit=50)
if kline_data and kline_data.get("code") == 200:
    for candle in kline_data.get("data", []):
        print(f"时间: {candle['time']}, 开盘: {candle['open']}, 最高: {candle['high']}, 最低: {candle['low']}, 收盘: {candle['close']}")

2.3 获取新加坡海峡时报指数(STI)

海峡时报指数是衡量新加坡市场表现的核心指标:

def get_singapore_indices(api_key):
    """获取新加坡指数数据"""
    url = "https://api.stocktv.top/stock/indices"
    params = {
   
        "countryId": 15,  # 新加坡指数标识
        "key": api_key
    }

    response = requests.get(url, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"请求失败: {response.status_code}")
        return None

三、实战应用场景

3.1 构建个股监控系统

通过简单的API调用,可以实时监控特定股票的价位变动和成交量异常:

import time
from datetime import datetime

class StockMonitor:
    def __init__(self, api_key, stock_pid, alert_threshold=0.05):
        self.api_key = api_key
        self.stock_pid = stock_pid
        self.alert_threshold = alert_threshold
        self.last_price = None

    def monitor_price(self):
        """监控股票价格变动"""
        while True:
            current_data = self.get_current_price()
            if current_data:
                current_price = current_data['last']

                if self.last_price is not None:
                    price_change = (current_price - self.last_price) / self.last_price

                    if abs(price_change) > self.alert_threshold:
                        self.send_alert(f"价格异常波动: {price_change*100:.2f}%")

                self.last_price = current_price
                print(f"{datetime.now()}: 当前价格: {current_price}")

            time.sleep(60)  # 每分钟检查一次

    def get_current_price(self):
        """获取当前价格"""
        url = "https://api.stocktv.top/stock/queryStocks"
        params = {
   
            "id": self.stock_pid,
            "key": self.api_key
        }

        response = requests.get(url, params=params)
        if response.status_code == 200:
            data = response.json()
            if data.get("code") == 200:
                return data.get("data", [{
   }])[0]
        return None

    def send_alert(self, message):
        """发送警报"""
        print(f"警报: {message}")
        # 这里可以集成邮件、短信或推送通知

3.2 开发量化交易策略

获取历史数据后,可以进行策略回测分析:

import pandas as pd
import numpy as np

class StrategyBacktester:
    def __init__(self, api_key):
        self.api_key = api_key

    def backtest_moving_average(self, pid, short_window=10, long_window=30):
        """移动平均线策略回测"""
        # 获取历史数据
        kline_data = get_historical_kline(self.api_key, pid, interval="P1D", limit=200)

        if not kline_data or kline_data.get("code") != 200:
            return None

        # 转换为DataFrame
        df = pd.DataFrame(kline_data.get("data", []))
        df['time'] = pd.to_datetime(df['time'], unit='ms')
        df.set_index('time', inplace=True)

        # 计算移动平均线
        df['short_ma'] = df['close'].rolling(window=short_window).mean()
        df['long_ma'] = df['close'].rolling(window=long_window).mean()

        # 生成交易信号
        df['signal'] = 0
        df['signal'][short_window:] = np.where(
            df['short_ma'][short_window:] > df['long_ma'][short_window:], 1, 0
        )
        df['positions'] = df['signal'].diff()

        # 计算收益率
        df['returns'] = df['close'].pct_change()
        df['strategy_returns'] = df['returns'] * df['signal'].shift(1)

        return df

四、开发注意事项

4.1 交易时间处理

新加坡股市交易时间通常为北京时间09:00-17:00(含午休),在非交易时段,价格数据将保持为收盘价。开发时需要考虑这一特性。

4.2 错误处理与频率限制

建议在代码中增加完善的错误处理机制:

def safe_api_call(func, max_retries=3):
    """安全的API调用装饰器"""
    def wrapper(*args, **kwargs):
        for attempt in range(max_retries):
            try:
                result = func(*args, **kwargs)
                if result and result.get("code") == 200:
                    return result
                elif result and result.get("code") != 200:
                    print(f"API返回错误: {result.get('message')}")
                    time.sleep(2 ** attempt)  # 指数退避
            except Exception as e:
                print(f"第{attempt+1}次尝试失败: {e}")
                time.sleep(2 ** attempt)
        return None
    return wrapper

4.3 数据单位与货币

SGX股票通常以新加坡元(SGD)计价,处理跨境投资应用时需要注意汇率转换。

五、性能优化建议

5.1 使用WebSocket实时数据

对于需要实时数据的应用场景,建议使用WebSocket协议:

import websocket
import json

class RealTimeDataClient:
    def __init__(self, api_key):
        self.api_key = api_key
        self.ws = None

    def connect(self):
        """连接WebSocket服务器"""
        ws_url = f"wss://api.stocktv.top/ws?key={self.api_key}"
        self.ws = websocket.WebSocketApp(
            ws_url,
            on_message=self.on_message,
            on_error=self.on_error,
            on_close=self.on_close
        )

        self.ws.on_open = self.on_open
        self.ws.run_forever()

    def subscribe_stock(self, symbol):
        """订阅股票实时数据"""
        if self.ws:
            subscribe_msg = {
   
                "action": "subscribe",
                "symbol": symbol,
                "channel": "stock"
            }
            self.ws.send(json.dumps(subscribe_msg))

    def on_message(self, ws, message):
        """处理接收到的消息"""
        data = json.loads(message)
        print(f"实时数据: {data}")

    def on_error(self, ws, error):
        print(f"WebSocket错误: {error}")

    def on_close(self, ws, close_status_code, close_msg):
        print("WebSocket连接关闭")

    def on_open(self, ws):
        print("WebSocket连接已建立")

5.2 数据缓存策略

对于频繁访问的数据,建议实现缓存机制以减少API调用:

from functools import lru_cache
import time

class CachedDataFetcher:
    def __init__(self, api_key, cache_ttl=300):
        self.api_key = api_key
        self.cache_ttl = cache_ttl
        self.cache = {
   }

    @lru_cache(maxsize=128)
    def get_cached_data(self, endpoint, params):
        """带缓存的数据获取"""
        cache_key = f"{endpoint}_{hash(frozenset(params.items()))}"

        if cache_key in self.cache:
            cached_data, timestamp = self.cache[cache_key]
            if time.time() - timestamp < self.cache_ttl:
                return cached_data

        # 调用API获取新数据
        url = f"https://api.stocktv.top/{endpoint}"
        params['key'] = self.api_key
        response = requests.get(url, params=params)

        if response.status_code == 200:
            data = response.json()
            self.cache[cache_key] = (data, time.time())
            return data

        return None

六、总结

通过本文介绍的API接口,开发者可以轻松获取新加坡股票市场的实时行情、历史数据和指数信息。这些数据接口设计合理,支持RESTful API和WebSocket两种协议,能够满足不同场景下的数据需求。

无论是构建个股监控系统、开发量化交易策略,还是进行市场分析研究,这些接口都提供了可靠的数据支持。在实际开发过程中,建议关注错误处理、频率限制和数据缓存等关键点,以确保应用的稳定性和性能。

相关文章
|
11天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
18317 102
|
3天前
|
人工智能 安全 Linux
【OpenClaw保姆级图文教程】阿里云/本地部署集成模型Ollama/Qwen3.5/百炼 API 步骤流程及避坑指南
2026年,AI代理工具的部署逻辑已从“单一云端依赖”转向“云端+本地双轨模式”。OpenClaw(曾用名Clawdbot)作为开源AI代理框架,既支持对接阿里云百炼等云端免费API,也能通过Ollama部署本地大模型,完美解决两类核心需求:一是担心云端API泄露核心数据的隐私安全诉求;二是频繁调用导致token消耗过高的成本控制需求。
3520 4
|
6天前
|
人工智能 安全 API
OpenClaw“小龙虾”进阶保姆级攻略!阿里云/本地部署+百炼API配置+4种Skills安装方法
很多用户成功部署OpenClaw(昵称“小龙虾”)后,都会陷入“看似能用却不好用”的困境——默认状态下的OpenClaw更像一个聊天机器人,缺乏连接外部工具、执行实际任务的能力。而Skills(技能插件)作为OpenClaw的“动手能力核心”,正是打破这一局限的关键:装对Skills,它能帮你自动化处理流程、检索全网资源、管理平台账号,真正变身“能做事的AI管家”。
4522 7
|
7天前
|
人工智能 安全 前端开发
Team 版 OpenClaw:HiClaw 开源,5 分钟完成本地安装
HiClaw 基于 OpenClaw、Higress AI Gateway、Element IM 客户端+Tuwunel IM 服务器(均基于 Matrix 实时通信协议)、MinIO 共享文件系统打造。
7205 6
|
6天前
|
人工智能 API 网络安全
Mac mini × OpenClaw 保姆级配置教程(附阿里云/本地部署OpenClaw配置百炼API图文指南)
Mac mini凭借小巧机身、低功耗和稳定性能,成为OpenClaw(原Clawdbot)本地部署的首选设备——既能作为家用AI节点实现7×24小时运行,又能通过本地存储保障数据隐私,搭配阿里云部署方案,可灵活满足“长期值守”与“隐私优先”的双重需求。对新手而言,无需复杂命令行操作,无需专业技术储备,按本文步骤复制粘贴代码,即可完成OpenClaw的全流程配置,同时接入阿里云百炼API,解锁更强的AI任务执行能力。
5806 1
|
15天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
18168 116
|
9天前
|
人工智能 JSON API
保姆级教程:OpenClaw阿里云及本地部署+模型切换流程+GLM5.0/Seedance2.0/MiniMax M2.5接入指南
2026年,GLM5.0、Seedance2.0、MiniMax M2.5等旗舰大模型相继发布,凭借出色的性能与极具竞争力的成本优势,成为AI工具的热门选择。OpenClaw作为灵活的AI Agent平台,支持无缝接入这些主流模型,通过简单配置即可实现“永久切换、快速切换、主备切换”三种模式,让不同场景下的任务执行更高效、更稳定。
6206 4

热门文章

最新文章