如何利用免费股票 API 构建量化交易策略:实战分享

作为一个入市多年、踩过不少坑的普通散户,前两年全凭感觉买股票,要么追高被套在山顶,要么错过最佳卖点拍大腿,折腾大半年没找到合适的操作节奏,还耗费了大量时间和精力。后来偶然接触到量化交易,才彻底明白:“用数据说话、用规则约束”,才是降低风险、提升操作效率的关键——但一开始就被“量化门槛高”“API 收费贵”这两个难题劝退,直到偶然发现这个免费股票 API,才算真正迈出了量化入门的第一步,今天就把这份实测可行的经验,毫无保留分享给和我当初一样迷茫的新手。
如何利用免费股票 API 构建量化交易策略.png

先跟大家说句实在话:新手做量化,真的不用一开始就追求复杂的机器学习模型,也不用花大价钱买付费 API。免费版就足够我们完成基础的策略搭建、实时数据接入和历史回测,等后续有了更高需求(比如做高频交易、需要 Level2 深度数据),再考虑升级付费版也不迟,这也是我实测下来,最省钱、最高效的量化入门路径。

今天不聊虚的,纯个人实操经验拆解,下面教大家使用这款免费股票 API,搭建一个简单易上手、适合新手的量化交易策略,全程避开我踩过的各种坑,保证接地气、可落地。

一、前期准备

新手最担心的就是“技术太复杂、注册流程繁琐”,但 iTick 的免费版完全不用操心这些,全程 5 分钟就能搞定,零门槛,免费版本特别适合个人开发者和刚接触量化的新手交易者。

具体步骤:

  1. 打开 iTick 官网,点击右上角“立即获取”,用个人邮箱就可以完成注册,无需填写复杂的个人信息,全程一步到位;
  2. 注册成功后,直接进入控制台,找到“API 管理”模块,就能看到 API Token —— 这个 Token 非常关键,后续接入实时数据、调用各种接口都要用到,建议大家妥善保存,切勿泄露给他人;
  3. 重点跟大家说下免费版的权限(新手必看):支持 A 股、港股、美股等多市场的基础实时报价,以及分钟级至日线级的历史 K 线数据,请求频率限制为 10 次/分钟,完全能满足新手搭建简单量化策略的需求(比如趋势跟踪、均线交叉策略),而且是永久免费,不用到期续费,对新手非常友好。

二、接入实时数据

量化交易的核心逻辑是什么?其实很简单:实时获取市场数据 → 根据预设的策略逻辑判断 → 触发对应的交易信号,其中“实时数据接入”是最基础、也最关键的一步——如果数据延迟太高,策略判断就会失真,甚至可能导致不必要的亏损。而 iTick 的免费 API,支持 RESTful API 和 WebSocket 两种推送方式,实时延迟非常低(主要市场延迟<100ms),完全能满足非超高频策略的使用需求,新手也能轻松驾驭。

我全程用的是 Python(新手首选编程语言,语法简单、网上资料多,遇到问题能快速找到解决方案),下面直接上实测可用的代码,大家复制粘贴后,替换成自己的 API Token,就能直接运行,轻松获取实时股票数据,每一步我都标了详细注释,看不懂的地方慢慢看,不用怕。

首先,需要安装两个必要的库(打开电脑终端,输入对应命令即可):pip install requests websocket-client,这两个都是 Python 常用库,用于调用 API、接收实时数据,安装过程不会出错,新手放心操作。

1. 用 RESTful API 获取实时报价

import requests

# 替换成你自己的iTick API Token
api_token = "你的API Token"
# 设定要获取的股票(以A股贵州茅台为例,代码格式:区域.代码,SH=上交所,SZ=深交所)
url = "https://api.itick.org/stock/quote?region=SH&code=600519"
# 请求头,必须带上Token,否则会调用失败、报错
headers = {"accept": "application/json", "token": api_token}

# 发送请求,获取股票实时数据
response = requests.get(url, headers=headers)
# 解析数据,转换成JSON格式,方便后续查看和使用
data = response.json()

# 打印获取到的实时数据(重点看这几个关键信息,新手可直接参考)
print("股票名称:", data["s"])
print("实时价格:", data["ld"])
print("实时成交量:", data["v"])
print("实时涨跌幅:", data["chp"])

实测效果跟大家说一下:运行代码后,能瞬间获取到茅台的实时价格、成交量、涨跌幅,延迟非常低,和我们平时用的股票软件上的价格基本同步。新手建议先从单个股票入手,熟悉数据格式和调用流程,再慢慢扩展到多只股票,循序渐进更稳妥。

2. 用 WebSocket 订阅实时行情

如果我们的策略需要持续监控多只股票的实时走势(比如同时监控茅台、宁德时代、比亚迪),用 WebSocket 就更合适了,它能实现“实时推送”功能,不用反复发送请求,操作效率更高,也更节省时间。

import websocket
import json

# 替换成你自己的iTick API Token
api_token = "你的API Token"

# 定义消息接收函数,实时接收平台推送的行情数据
def on_message(ws, message):
    # 解析推送的数据,转换成可查看的格式
    data = json.loads(message)
    # 打印实时行情(可根据自己的需求修改,比如只打印涨跌幅超过1%的股票)
    print(f"股票:{data['s']} | 实时价格:{data['ld']} | 涨跌幅:{data['chp']}%")

# 定义连接函数,建立WebSocket连接(不用修改,复制即可)
def on_open(ws):
    # 订阅多只股票的实时行情(这里以茅台、宁德时代、比亚迪为例,可自行修改)
    subscribe_msg = {
        "action": "subscribe",
        "types": "quote",
        "params": "SH$600519,SZ$300750,SZ$002594",
    }
    # 发送订阅请求,完成多只股票实时行情订阅
    ws.send(json.dumps(subscribe_msg))

# 建立WebSocket连接,固定格式,不用修改
ws = websocket.WebSocketApp("wss://api.itick.org/stock",
                            on_open=on_open,
                            on_message=on_message)

# 持续运行,实时接收行情数据(关闭终端即可停止)
ws.run_forever()

三、实战搭建交易策略

成功接入实时数据后,就可以正式搭建量化交易策略了。新手建议从“双均线策略”入手,这个策略逻辑简单、容易理解、风险可控,也是很多资深量化交易者入门时首选的策略,结合 iTick 的实时数据和历史数据,就能快速实现,不用复杂的编程基础。

先跟大家简单拆解下双均线策略的核心逻辑(不用记复杂公式,理解意思就行,新手也能听懂):
选取两条均线——短期均线(比如 20 日均线)和长期均线(比如 60 日均线),通过两条均线的“交叉”情况,来判断交易信号:

  • ① 短期均线上穿长期均线(行业内叫“金叉”),说明股票趋势向好,触发“买入”信号;
  • ② 短期均线下穿长期均线(行业内叫“死叉”),说明股票趋势走坏,触发“卖出”信号。

结合 iTick 获取的实时数据,让程序自动判断信号,避免我们被主观情绪干扰——这也是量化交易的核心优势:理性、纪律性强,不会追涨杀跌,也不会因为贪心或恐慌做出错误决策。

策略搭建步骤

  1. 获取历史数据:用 iTick 的 API 获取某只股票的历史 K 线数据(比如近 3 年的日线数据),用来回测策略——回测非常重要,能帮我们验证这个策略在过去的行情中是否有效,避免盲目实盘操作,新手一定要重视;
  2. 计算均线:用 Python 的 talib 库(专门用于股票技术分析的库,新手直接用即可),计算出短期均线(MA20)和长期均线(MA60);
  3. 生成交易信号:根据两条均线的交叉情况,自动生成买入、卖出信号,不用手动判断;
  4. 接入实时数据:用前面讲的 WebSocket 方法,实时监控股票走势,当触发买入或卖出信号时,及时发出提醒(新手建议先只开启提醒功能,不直接自动交易,避免操作失误)。

完整实战代码

import requests
import websocket
import json
import talib
import pandas as pd

# ---------------------- 第一步:获取历史K线数据(用于回测策略,验证策略有效性)----------------------
api_token = "你的API Token"
# 获取茅台近1000条日线数据(limit=100 可自行修改,kType="8"表示日线,固定格式)
url = "https://api.itick.org/stock/ ?region=SH&code=600519&kType=8&limit=100"
headers = {"accept": "application/json", "token": api_token}
response = requests.get(url, headers=headers)
history_data = response.json()

# 转换数据格式,方便后续计算均线(新手不用修改这部分代码)
df = pd.DataFrame(history_data["data"], columns=["date", "open", "high", "low", "close", "volume"])
# 将价格数据转换为数值类型,避免计算时出错
df[["open", "high", "low", "close", "volume"]] = df[["open", "high", "low", "close", "volume"]].astype(float)

# 计算20日均线(短期)和60日均线(长期),新手可修改timeperiod调整均线周期
df["MA20"] = talib.SMA(df["close"], timeperiod=20)
df["MA60"] = talib.SMA(df["close"], timeperiod=60)

# ---------------------- 第二步:生成交易信号(金叉买入,死叉卖出,自动判断)----------------------
# 初始化交易信号(0表示无信号,1表示买入,-1表示卖出,固定设定)
df["signal"] = 0
# 金叉:短期均线上穿长期均线,且前一天短期均线低于长期均线(触发买入)
df.loc[(df["MA20"] > df["MA60"]) & (df["MA20"].shift(1) < df["MA60"].shift(1)), "signal"] = 1
# 死叉:短期均线下穿长期均线,且前一天短期均线高于长期均线(触发卖出)
df.loc[(df["MA20"] < df["MA60"]) & (df["MA20"].shift(1) > df["MA60"].shift(1)), "signal"] = -1

# 打印回测结果(查看过去的交易信号是否有效,新手重点参考这部分)
print("历史交易信号汇总(仅显示有信号的日期):")
print(df[df["signal"] != 0][["date", "close", "MA20", "MA60", "signal"]])

# ---------------------- 第三步:接入实时数据,监控交易信号(新手仅开启提醒,不自动交易)----------------------
def on_message(ws, message):
    data = json.loads(message)
    # 获取实时收盘价、当前日期,用于判断信号
    current_close = data["price"]
    current_date = data["date"]
    # 模拟实时计算均线(这里简化处理,实际可结合历史数据实时更新,新手不用修改)
    # 重点:当实时价格触发金叉/死叉时,打印提醒,新手手动执行交易更稳妥
    # (重要提醒:本文仅为经验分享,不构成投资建议,实盘操作需谨慎)
    if df["MA20"].iloc[-1] > df["MA60"].iloc[-1] and df["MA20"].iloc[-2] < df["MA60"].iloc[-2]:
        print(f"【买入提醒】{current_date} | {data['name']} 触发金叉,实时价格:{current_close}")
    elif df["MA20"].iloc[-1] < df["MA60"].iloc[-1] and df["MA20"].iloc[-2] > df["MA60"].iloc[-2]:
        print(f"【卖出提醒】{current_date} | {data['name']} 触发死叉,实时价格:{current_close}")

def on_open(ws):
    subscribe_msg = {
        "action": "subscribe",
        "token": api_token,
        "symbols": ["SH.600519"]  # 监控茅台的实时行情,可自行修改成其他股票代码
    }
    ws.send(json.dumps(subscribe_msg))

# 启动实时监控,关闭终端即可停止
ws = websocket.WebSocketApp("wss://api.itick.org/stock", on_open=on_open, on_message=on_message)
ws.run_forever()

四、总结

不知不觉写了这么多,其实总结下来就一句话:新手入门量化交易,不用怕技术复杂,不用怕成本太高,用免费股票 API,从最简单的双均线策略入手,先搞定实时数据接入,再慢慢优化策略、熟悉模拟实盘,一步一个脚印,比盲目跟风、凭感觉交易靠谱太多。

我自己就是这样过来的,从一开始连 API 是什么都不知道,到现在能熟练搭建简单的量化策略,实时监控多只股票的行情,虽然没有赚到大钱,但至少避开了以前的主观交易坑,交易心态也平稳了很多——其实量化交易的核心,从来不是“战胜市场”,而是“理解市场”,用纪律性约束自己的交易行为,克服贪心和恐慌,这也是我一直坚持的交易理念。

温馨提示:本文仅供代码参考,不构成任何投资建议。市场有风险,投资需谨慎

参考文档:https://blog.itick.org/stock-api/global-stock-market-realtime-quotes-for-quantitative-trading
GitHub:https://github.com/itick-org/

posted @ 2026-01-27 16:46  forexLable  阅读(5)  评论(0)    收藏  举报