SimNow 模拟交易环境配置说明
一、第一套环境(主模拟交易环境)
基础信息
- 统一BrokerID:9999
- 支持期权范围:上期所、能源中心、中金所、广期所、郑商所、大商所期权
服务器地址(看穿式前置,使用监控中心生产秘钥)
共三组可用前置节点:
- 第一组
- 交易前置(Trade Front):182.254.243.31:30001
- 行情前置(Market Front):182.254.243.31:30011
- 第二组
- 交易前置(Trade Front):182.254.243.31:30002
- 行情前置(Market Front):182.254.243.31:30012
- 第三组
- 交易前置(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】
环境说明
- 定位:仅服务于CTP API开发爱好者,仅提供CTP接口测试能力,不提供结算等配套服务
- 开通时效:新注册用户需等待第三个交易日方可使用本环境
- 数据同步:账户资金、持仓等数据与第一套环境上一交易日状态保持一致
认证信息
与第一套环境规则一致:
- 默认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")