使用vnpy获取免费的实盘行情tick数据

SimNow 模拟交易环境配置说明

一、第一套环境(主模拟交易环境)

基础信息

  • 统一BrokerID:9999
  • 支持期权范围:上期所、能源中心、中金所、广期所、郑商所、大商所期权

服务器地址(看穿式前置,使用监控中心生产秘钥)

共三组可用前置节点:

  1. 第一组
    • 交易前置(Trade Front):182.254.243.31:30001
    • 行情前置(Market Front):182.254.243.31:30011
  2. 第二组
    • 交易前置(Trade Front):182.254.243.31:30002
    • 行情前置(Market Front):182.254.243.31:30012
  3. 第三组
    • 交易前置(Trade Front):182.254.243.31:30003
    • 行情前置(Market Front):182.254.243.31:30013

认证信息

  • 默认APPID:simnow_client_test
  • 默认认证码:0000000000000000(16个0)
  • 终端认证:默认开启,程序化接入用户可选择关闭

交易品种

  • 六家交易所全部期货品种
  • 上期所、能源中心、中金所、广期所全部期权品种
  • 郑商所、大商所部分期权品种

账户资金

初始资金2000万,支持入金操作,每日最多入金3次。

服务时间

与实盘生产环境交易时段完全一致。


二、7×24 环境(CTP API开发专用)

基础信息

  • BrokerID:9999
  • 支持期权范围:上期所、能源中心、中金所、广期所、郑商所、大商所期权

服务器地址(看穿式前置,使用监控中心生产秘钥)

  • 交易前置(Trade Front):182.254.243.31:40001
  • 行情前置(Market Front):182.254.243.31:40011
  • 环境标识:【7×24】

环境说明

  1. 定位:仅服务于CTP API开发爱好者,仅提供CTP接口测试能力,不提供结算等配套服务
  2. 开通时效:新注册用户需等待第三个交易日方可使用本环境
  3. 数据同步:账户资金、持仓等数据与第一套环境上一交易日状态保持一致

认证信息

与第一套环境规则一致:

  • 默认APPID:simnow_client_test
  • 默认认证码:0000000000000000(16个0)
  • 终端认证:默认开启,程序化接入用户可选择关闭

服务时间

  • 交易日:当日 16:00 ~ 次日 09:00
  • 非交易日:当日 16:00 ~ 次日 12:00

使用建议

  • 日常模拟交易、使用商业终端操作:推荐使用第一套环境
  • CTP接口开发、联调测试:使用本7×24环境
  • 接入账户要求:SimNow正式账户(上一交易日之前注册的账户均有效)

# 连接CTP

python 复制代码
    # 实盘行情
    setting = {
        "用户名": "-------------",
        "密码": "-------------",
        "经纪商代码": "9999",
        "交易服务器": "182.254.243.31:30002",
        "行情服务器": "182.254.243.31:30012",
        "产品名称": "simnow_client_test",
        "授权编码": "0000000000000000",
        "柜台环境": "实盘",
    }
    # 回放行情
    """ 回放行情 """
    setting = {
        "用户名": "-------------",
        "密码": "-------------",
        "经纪商代码": "9999",
        "交易服务器": "182.254.243.31:40001",
        "行情服务器": "182.254.243.31:40011",
        "产品名称": "simnow_client_test",
        "授权编码": "0000000000000000",
        "柜台环境": "实盘",
    }

获取tick数据的Python代码:

python 复制代码
from vnpy.event import EventEngine, Event
from vnpy.trader.engine import MainEngine
from vnpy_ctp import CtpGateway
from vnpy.trader.object import TickData, SubscribeRequest
from vnpy.trader.constant import Exchange
import time

# 全局存储
latest_tick = None
last_volume = 0

def on_tick(event: Event):
    """
    事件回调,底层事件引擎推送tick事件就执行,事件驱动,不是轮询
    """
    global latest_tick, last_volume
    tick: TickData = event.data
    current_tick_volume = tick.volume - last_volume
    last_volume = tick.volume

    print(
        f"\r时间: {tick.datetime.strftime('%Y-%m-%d %H:%M:%S')} | 最新价: {tick.last_price:7.2f} | 本tick成交量:{current_tick_volume} | 买一:{tick.bid_price_1:7.2f} | 卖一:{tick.ask_price_1:7.2f}",
        end="",
        flush=True
    )

    latest_tick = {
        "close": tick.last_price,
        "timestamp": tick.datetime,
        "volume": current_tick_volume,
        "bid_price": tick.bid_price_1,
        "ask_price": tick.ask_price_1,
        "bid_volume": tick.bid_volume_1,
        "ask_volume": tick.ask_volume_1,
    }

def main(vt_symbol: str):
    # 1. 创建事件引擎
    event_engine = EventEngine()
    # 2. 创建主引擎,注入事件引擎
    main_engine = MainEngine(event_engine)
    # 3. 添加CTP网关
    main_engine.add_gateway(CtpGateway)

    setting = {
        "用户名": "-------------",
        "密码": "-------------",
        "经纪商代码": "9999",
        "交易服务器": "182.254.243.31:30002",
        "行情服务器": "182.254.243.31:30012",
        "产品名称": "simnow_client_test",
        "授权编码": "0000000000000000",
        "柜台环境": "实盘",
    }
    # 连接交易网关
    """ 行情回放 """
    setting = {
        "用户名": "-------------",
        "密码": "-------------",
        "经纪商代码": "9999",
        "交易服务器": "182.254.243.31:40001",
        "行情服务器": "182.254.243.31:40011",
        "产品名称": "simnow_client_test",
        "授权编码": "0000000000000000",
        "柜台环境": "实盘",
    }

    

    # 注册TICK事件回调
    from vnpy.trader.event import EVENT_TICK
    event_engine.register(EVENT_TICK, on_tick)

    # 连接网关
    main_engine.connect(setting, "CTP")
    time.sleep(3)

    # ========== 核心修复:构造标准订阅请求对象 ==========
    print(f"订阅合约 {vt_symbol}")
    # 拆分合约代码和交易所
    symbol_code, exchange_str = vt_symbol.split(".")
    # 构造订阅请求对象(这是subscribe方法唯一接受的参数类型)
    subscribe_req = SubscribeRequest(
        symbol=symbol_code,
        exchange=Exchange(exchange_str)
    )
    # 调用标准订阅接口
    main_engine.subscribe(subscribe_req, "CTP")

    print("订阅完成,等待CTP推送tick,Ctrl+C退出\n")
    try:
        # 主线程阻塞;事件引擎内部子线程自动处理事件
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n收到退出信号,正在关闭引擎...")
    finally:
        main_engine.close()
        print("引擎已关闭")

if __name__ == "__main__":
    main("ag2610.SHFE")
相关推荐
夏悠6 天前
期货日内交易:止盈止损怎么设置最合理
期货交易
筱璦2 个月前
量化交易系统源码可售
区块链·交易·期货·期货交易
筱璦4 个月前
期货交易系统部署一 — 数据库及web
web·后台·期货交易
筱璦4 个月前
C#期货分仓、策略交易模拟演示系统(含资源下载)
开发语言·c#·策略模式·量化交易·期货交易
DolphinDB智臾科技2 年前
基于 MDL 行情插件的中金所 L1 数据处理最佳实践
期货·量化金融·dolphindb·期货交易·期货行情·行情·中金所
股票程序交易接口2 年前
期货交易程序化,哪些API可供选择及如何使用?
api·策略·程序化·股票api接口·股票量化接口·期货交易