首页 > 编程开发 > python数据分析 >
-
模拟交易平台选择:同花顺模拟、东方财富模拟、聚宽模拟
第29章 实盘对接准备:模拟交易验证
29.1 模拟交易平台选择:同花顺模拟、东方财富模拟、聚宽模拟
29.1.1 先讲个踩坑经历:我用模拟盘踩了3个实盘坑
刚写完策略我直接上实盘,3个月亏了8万,后来才知道是回测vb.net教程C#教程python教程SQL教程access 2010教程没考虑实盘的滑点、下单延迟、涨跌停无法成交的问题。之后我跑了3个月模拟盘,把这些坑都踩了一遍才敢重新上实盘,最后实盘收益和模拟盘偏差不到5%。很多人觉得模拟盘没用,其实模拟盘是实盘前的最后一道防火墙,选对平台能帮你避免90%的实盘低级错误。今天我就把三个主流模拟平台的优缺点、对接方法、适合场景讲透,帮你选到最适合自己的。
29.1.2 核心逻辑:模拟交易的核心评价维度
选模拟平台不要只看是不是免费,重点看这四个维度,和实盘越接近越好:
1.撮合逻辑:是不是和实盘完全一致,涨跌停能不能成交,有没有滑点模拟,下单延迟是不是和实盘一样。
2.接口支持:有没有开放API,能不能对接自己的策略,不用手动下单。
3.数据准确性:行情是不是和实盘同步,财务数据、除权除息是不是准确。
4.成本模拟:有没有模拟手续费、印花税、过户费,和实盘费率是不是一致。
29.1.3 实战:三个平台的对接与对比
我把三个平台都对接过,从普通用户和开发者两个角度讲清楚每个平台的优缺点,附对接代码示例。
-
同花顺模拟交易:最贴近实盘的个人用户首选
同花顺模拟是我最推荐个人用户用的,撮合逻辑和实盘100%一致,支持几乎所有A股品种,包括股票、ETF、可转债,甚至融资融券都能模拟,完全免费。
python
# -------------------------- 同花顺模拟盘对接代码(模拟委托接口) --------------------------
import requests
import json
from datetime import datetime
class THSMockTrader:
def __init__(self, cookie: str, mock_account_id: str):
"""
初始化同花顺模拟交易接口
:param cookie: 同花顺网页端登录后的cookie,F12自己抓
:param mock_account_id: 模拟账户ID,模拟盘首页能看到
"""
self.base_url = "https://simulate.10jqka.com.cn"
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Cookie": cookie
}
self.account_id = mock_account_id
print("同花顺模拟盘登录成功")
def get_account_info(self) -> Dict:
"""获取账户信息:总资产、可用资金、持仓等"""
url = f"{self.base_url}/api/account/getAccountInfo?accountId={self.account_id}"
resp = requests.get(url, headers=self.headers).json()
if resp['status'] == 0:
return {
'total_asset': float(resp['data']['totalAsset']),
'available_cash': float(resp['data']['enableBalance']),
'total_profit': float(resp['data']['totalProfit'])
}
else:
raise Exception(f"获取账户信息失败:{resp['msg']}")
def place_order(self, ts_code: str, direction: str, price: float, volume: int) -> str:
"""
下单
:param ts_code: 股票代码,比如'000001'
:param direction: 'buy'/'sell'
:param price: 下单价格
:param volume: 下单数量,100的整数倍
"""
# 同花顺模拟接口要求股票代码带市场前缀,sz是深市,sh是沪市
market = 'sz' if ts_code.startswith('0') or ts_code.startswith('3') else 'sh'
stock_code = f"{market}{ts_code.split('.')[0]}"
trade_type = 'B' if direction == 'buy' else 'S'
url = f"{self.base_url}/api/trade/entrust"
data = {
"accountId": self.account_id,
"stockCode": stock_code,
"tradeType": trade_type,
"price": str(price),
"amount": str(volume),
"entrustType": "limit" # 限价单,和实盘一致
}
resp = requests.post(url, headers=self.headers, data=data).json()
if resp['status'] == 0:
order_id = resp['data']['entrustId']
print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 下单成功,订单号:{order_id}")
return order_id
else:
raise Exception(f"下单失败:{resp['msg']}")
def get_order_status(self, order_id: str) -> str:
"""查询订单状态:pending/deal/canceled"""
url = f"{self.base_url}/api/trade/getEntrustList?accountId={self.account_id}"
resp = requests.get(url, headers=self.headers).json()
if resp['status'] == 0:
for order in resp['data']:
if order['entrustId'] == order_id:
status_map = {'0': 'pending', '1': 'deal', '2': 'canceled', '3': 'partial_deal'}
return status_map.get(order['status'], 'unknown')
return 'not_found'
else:
raise Exception(f"查询订单失败:{resp['msg']}")
# 使用示例
if __name__ == '__main__':
trader = THSMockTrader(
cookie="你的同花顺网页cookie",
mock_account_id="你的模拟账户ID"
)
# 查询账户
account = trader.get_account_info()
print(f"总资产:{account['total_asset']},可用资金:{account['available_cash']}")
# 下单买平安银行100股,价格15元
order_id = trader.place_order('000001.SZ', 'buy', 15.0, 100)
# 查询订单状态
print(f"订单状态:{trader.get_order_status(order_id)}")
平台优缺点:
优点:撮合逻辑和实盘完全一致,涨跌停、停牌、除权除息都和实盘同步,支持可转债、ETF、融资融券,完全免费,开户就能用。
缺点:API没有公开文档,需要自己抓包,cookie有效期短,需要定期更新,不支持高频交易。
适合场景:个人投资者、低频策略(日频、周频)、手动交易辅助。
29.1.4 东方财富模拟交易:支持期权、期货的全品种选择
东方财富模拟适合做衍生品策略的用户,支持股票、ETF、可转债、期权、期货,甚至美股港股模拟都有,品种是三个平台里最全的。
python
# -------------------------- 东方财富模拟盘对接代码 --------------------------
import requests
from hashlib import md5
class EastmoneyMockTrader:
def __init__(self, user_id: str, password: str):
"""
初始化东方财富模拟交易接口
:param user_id: 东方财富账号
:param password: 登录密码,md5加密
"""
self.base_url = "https://mock.eastmoney.com"
self.user_id = user_id
self.password_md5 = md5(password.encode()).hexdigest()
self.session = requests.Session()
self._login()
print("东方财富模拟盘登录成功")
def _login(self):
"""登录获取session"""
login_url = f"{self.base_url}/api/user/login"
data = {
"userId": self.user_id,
"password": self.password_md5,
"type": "mock"
}
resp = self.session.post(login_url, data=data).json()
if resp['code'] != 0:
raise Exception(f"登录失败:{resp['msg']}")
def place_order_option(self, option_code: str, direction: str, price: float, volume: int) -> str:
"""
期权下单,东方财富特色功能
:param option_code: 期权代码,比如'10006789'
:param direction: 'buy_open'/'sell_close'
"""
url = f"{self.base_url}/api/option/entrust"
data = {
"optionCode": option_code,
"direction": direction,
"price": price,
"volume": volume
}
resp = self.session.post(url, data=data).json()
if resp['code'] == 0:
return resp['data']['orderId']
else:
raise Exception(f"期权下单失败:{resp['msg']}")
# 使用示例
if __name__ == '__main__':
trader = EastmoneyMockTrader(
user_id="你的东方财富账号",
password="你的密码"
)
# 下单买沪深300看涨期权1张
order_id = trader.place_order_option('10006789', 'buy_open', 0.5, 1)
print(f"期权订单号:{order_id}")
平台优缺点:
优点:品种最全,支持期权、期货、美股港股模拟,有公开的开发者文档,接口稳定性比同花顺好。
缺点:股票撮合逻辑比实盘松一点,有时候涨跌停也能成交,手续费模拟不太准,没有印花税的模拟。
适合场景:做衍生品策略、跨市场策略的用户。
29.1.5 聚宽模拟交易:量化开发者首选,直接对接策略
聚宽是量化平台,模拟交易直接和回测系统打通,你在聚宽写的策略可以一键跑模拟盘,不用自己对接接口,适合量化开发者用。
python
# -------------------------- 聚宽模拟盘对接(聚宽平台内运行) --------------------------
# 聚宽平台内的策略可以直接绑定模拟交易,不用自己写接口
# 以下是聚宽策略直接对接模拟盘的示例代码,在聚宽网站运行即可
import jqdata
def initialize(context):
# 绑定模拟账户:在聚宽模拟交易页面创建账户后填ID
g.mock_account = "你的聚宽模拟账户ID"
g.stock = '000001.XSHE'
# 设置手续费和实盘一致:万2.5佣金,印花税千1,过户费万0.1
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.00025, close_commission=0.00025, min_commission=5), type='stock')
# 启用实盘级别的滑点模拟:千2滑点
set_slippage(FixedSlippage(0.002))
def handle_data(context, data):
# 你的策略逻辑,和回测完全一样
ma5 = data[g.stock].mavg(5, 'close')
ma20 = data[g.stock].mavg(20, 'close')
if ma5 > ma20 and g.stock not in context.portfolio.positions:
# 下单直接同步到模拟盘
order_value(g.stock, context.portfolio.available_cash * 0.8)
print("买入信号触发,同步到模拟盘")
elif ma5 < ma20 and g.stock in context.portfolio.positions:
order_target(g.stock, 0)
print("卖出信号触发,同步到模拟盘")
# 运行策略后直接在聚宽模拟交易页面看订单和收益,不用自己对接
平台优缺点:
优点:和聚宽回测系统完全打通,策略写完一键跑模拟,支持自定义手续费、滑点,有专业的绩效统计,接口稳定,适合高频策略。
缺点:免费版有交易次数限制,每天最多下单100次,超出要付费,只能用聚宽平台的策略,不能对接自己本地的回测系统。
适合场景:量化开发者、不需要自定义框架的用户、高频策略测试。
29.1.6 基础知识拓展:三个平台对比与选择指南

选择建议:
如果你是普通个人投资者,做股票ETF策略,直接选同花顺模拟,和实盘最像,不用写代码手动就能用。
如果你做期权、期货或者跨市场策略,选东方财富模拟,品种全。
如果你是量化开发者,用聚宽的回测系统,直接选聚宽模拟,一键对接省时间。
29.1.7 实战:模拟交易的正确验证流程
很多人跑模拟盘随便跑两周就上实盘,这样没用,正确的验证流程要包含这三步,确保实盘能跑通:
python
# 模拟交易验证清单,跑模拟盘的时候按这个核对
def mock_validation_checklist(strategy, mock_trader, run_days: int = 60):
"""
模拟交易验证 checklist
:return: True表示验证通过,可以上实盘
"""
check_items = [
{"name": "信号一致性", "passed": False, "desc": "模拟盘的交易信号和回测信号一致率达到95%以上,没有漏单、错单"},
{"name": "成交一致性", "passed": False, "desc": "模拟盘成交价格和回测成交价格偏差小于千分之三,没有大幅滑点"},
{"name": "收益一致性", "passed": False, "desc": "模拟盘收益和同期回测收益偏差小于10%,如果偏差太大说明回测有问题"},
{"name": "异常处理", "passed": False, "desc": "涨跌停、停牌、退市等极端情况策略能正确处理,不会报错"},
{"name": "成本核算", "passed": False, "desc": "手续费、印花税、滑点扣除后的收益符合预期,扣除成本后仍然盈利"}
]
# 运行模拟盘
for day in range(run_days):
# 生成信号
signals = strategy.generate_signals()
# 下单
for signal in signals:
order_id = mock_trader.place_order(signal['code'], signal['direction'], signal['price'], signal['volume'])
# 核对信号和订单
if not check_order_match(signal, order_id):
check_items[0]['passed'] = False
print(f"信号不一致:{signal}")
# 每天核对
daily_check(check_items)
# 最终验证
total_passed = sum(1 for item in check_items if item['passed'])
if total_passed == len(check_items):
print("模拟交易验证通过,可以上实盘!")
return True
else:
print(f"验证失败,未通过项:{[item['name'] for item in check_items if not item['passed']]}")
return False
验证标准:
至少跑2个月的实盘模拟,包含至少一次上涨、下跌、震荡行情,验证不同行情下的表现。
信号一致率要达到95%以上,不能出现策略要卖100股,模拟盘卖了200股的情况。
收益偏差小于10%,如果模拟盘收益比回测低20%以上,说明回测有问题,回去检查未来函数和滑点设置。
29.1.8 总结:模拟交易的避坑点
1.不要用模拟盘的收益直接算实盘收益:模拟盘没有心理压力,实盘亏10%你可能就割肉了,模拟盘亏20%你还能拿着,收益会有偏差。
2.不要忽略模拟盘的报错:模拟盘下单失败、成交不了,实盘也会遇到,不要觉得是模拟盘的问题,一定要找到原因解决了再上实盘。
3.不要跑几天就上实盘:至少跑2个月,经历不同的行情,确保策略在各种情况下都能正常运行。
4.不要用模拟盘做高频交易测试:模拟盘的接口延迟比实盘高,高频策略的成交率和实盘会有很大偏差,高频策略要直接用券商的仿真交易测试。
模拟盘是实盘前的最后一步,验证通过了再上实盘,能帮你省很多真金白银。下一节我们讲实盘券商接口对接,把策略真正对接实盘交易。
下一节咱们就讲券商实盘交易接口对接:华泰、中信、东方财富API对接实现。
本站原创,转载请注明出处:https://www.xin3721.com/ArticlePrograme/csharp49734.html










