资讯动态

TqSdk 示例程序全指南:从实时行情、策略回测到算法交易的代码实战地图

发布时间:2026/10/13 2:13:46 来源:尧图企业网站定制
金融科技【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址https://gitcode.com/gh_mirrors/tq/tqsdk-python点击查看免费下载TqSdk 官方文档在 doc/demo/index.rst 中提供了一个按使用阶段划分的示例程序体系覆盖实时行情、K 线/Tick、下单撤单、自动交易、回测、数据下载、指标计算、期权、算法拆单与完整策略参考实现等全部核心能力。本文以该示例体系为主线逐段拆解每个示例的代码逻辑与底层实现帮助读者按图索骥把 TqSdk 从会装推进到会用、能改、能写策略。示例程序全景三大板块与推荐学习路径TqSdk 的示例不是散落的脚本而是一条按基础能力 → 策略与研究场景 → 交互式探索递进组织的学习路线板块对应文档定位基础示例base.rst option_base.rst与快速上手对应适合刚完成安装、熟悉主循环和常用接口的新用户策略示例algorithm.rst strategy.rst可直接改造的完整策略与算法拆单参考实现Notebook 示例jupyter.rstJupyter 环境下的交互式研究与因子计算基础示例文档给出了明确的阅读顺序先看t10、t20行情与更新机制再看t30K 线与基础数据、t40、t41账户与下单、t60、t70、t80自动交易最后看backtest、downloader、downloader_orders回测与下载。这套顺序恰好对应一个量化策略从拿数据到自动交易再到验证与复盘的完整闭环。基础示例从行情到交易的完整链路基础示例全部位于 tqsdk/demo/tutorial 目录命名以 t 开头、按主题递进编号。所有示例都依赖TqApi与TqAuth两个基础对象运行时需替换为真实的快期账户与密码。行情与更新机制t10、t20t10 - 获取实时行情t10.py是最小的完整程序展示了 TqSdk 的引用式quote 对象数据访问模型from tqsdk import TqApi, TqAuth # 创建API实例传入自己的快期账户 api TqApi(authTqAuth(快期账户, 账户密码)) # 获得上期所 ni2206 的行情引用当行情有变化时 quote 中的字段会对应更新 quote api.get_quote(SHFE.ni2206) # 输出 ni2206 的最新行情时间和最新价 print(quote.datetime, quote.last_price) # 关闭api,释放资源 api.close()合约代码统一采用交易所代码.合约代码格式如SHFE.ni2206交易所代码覆盖 SHFE、DCE、CZCE、CFFEX、INE、SSE、SZSE 等。运行该示例的终端输出时间戳 最新价如下t20 - 识别行情更新t20.py是理解 TqSdk 事件驱动模型的关键。TqSdk 的策略主体是一个wait_update()主循环但任意合约的任意业务变化都会触发该循环因此必须用is_changing()精确判断关心的对象与字段api TqApi(debugdebug.log, authTqAuth(快期账户, 账户密码)) quote api.get_quote(CZCE.FG209) while True: api.wait_update() # 等待业务信息发生变化 if api.is_changing(quote): # 该合约任何字段变化 print(行情变化, quote) if api.is_changing(quote, last_price): # 仅最新价变化 print(最新价变化, quote.last_price) if api.is_changing(quote, [ask_price1, ask_volume1, bid_price1, bid_volume1]): print(盘口变化, ...) # 买一/卖一档变化is_changing的第二参数既可以是单字段字符串也可以是字段列表debugdebug.log可以把调试信息写入指定文件便于排查问题。这一wait_update is_changing骨架会贯穿后续几乎所有示例是 TqSdk 编程范式的基石。K 线与 Tick 序列数据t30t30 - 使用 K 线/Tick 数据t30.py展示了序列数据接口get_tick_serial与get_kline_serial返回 pandas DataFrameticks api.get_tick_serial(DCE.i2209) # tick 序列引用 klines api.get_kline_serial(DCE.i2209, 10) # 10 秒 K 线引用 while True: api.wait_update() if api.is_changing(ticks): print(tick变化, ticks.iloc[-1]) # 序列中最后一个 tick # K 线时间戳变化意味着新 K 线产生datetime 单位是自 unix epoch 以来的纳秒 if api.is_changing(klines.iloc[-1], datetime): print(新K线, datetime.datetime.fromtimestamp(klines.iloc[-1][datetime] / 1e9)) if api.is_changing(klines.iloc[-1], close): print(K线变化, ..., klines.close.iloc[-1]) # close 是收盘价序列get_kline_serial(symbol, duration_seconds)的第二个参数是 K 线周期秒数例如10秒、5 * 60分钟线、24 * 60 * 60日线data_length可指定保留的 K 线数量。注意 K 线数据的datetime字段是纳秒级时间戳展示时需除以1e9转换。账户、下单与撤单t40、t41t40 - 下单/撤单t40.py同时演示了持仓、资金与委托单三个对象的联动position api.get_position(DCE.m2105) # 持仓引用变化时字段更新 account api.get_account() # 资金账户引用 order api.insert_order(symbolDCE.m2105, directionBUY, offsetOPEN, volume5, limit_price2750) while True: api.wait_update() if api.is_changing(order, [status, volume_orign, volume_left]): print(单状态: %s, 已成交: %d 手 % (order.status, order.volume_orign - order.volume_left)) if api.is_changing(position, pos_long_today): print(今多头: %d 手 % position.pos_long_today) if api.is_changing(account, available): print(可用资金: %.2f % account.available)insert_order的关键参数包括directionBUY/SELL、offsetOPEN开仓、CLOSE平仓、CLOSETODAY平今、volume与limit_price不传价格即为市价单。委托单的volume_orign - volume_left即为已成交量。t41 - 开仓/平仓t41.py给出一个典型的下单并等待完成写法以对手价ask_price1开仓后用while order.status ! FINISHED: api.wait_update()阻塞等待完成后再以bid_price1平今仓。FINISHED表示委托单终态。自动交易t60、t70、t71、t72、t80t60 - 单均线策略t60.py是一个自包含的微型策略最新价大于 10 秒 K 线 MA15 则市价开多小于则市价平仓。它直接用insert_order管理仓位if api.is_changing(klines): ma sum(klines.close.iloc[-15:]) / 15 if klines.close.iloc[-1] ma: api.insert_order(symbolDCE.m2207, directionBUY, offsetOPEN, volume5) breakt70 - 简单均线策略目标持仓模型t70.py引入 TqSdk 最常用的调仓工具TargetPosTask。与手动管理开平仓不同目标持仓模型只需声明我希望持有几手TargetPosTask会自动计算需要开仓/平仓的量并拆单执行from tqsdk import TqApi, TqAuth, TargetPosTask target_pos TargetPosTask(api, DCE.m2207) # 创建目标持仓 task ... if klines.close.iloc[-1] ma: target_pos.set_target_volume(5) # 目标多头 5 手 elif klines.close.iloc[-1] ma: target_pos.set_target_volume(0) # 目标空仓set_target_volume的参数正数表示目标多头手数负数表示目标空头手数0 表示空仓。该模型把交易逻辑从报单细节中解放出来是后续 t80 价差策略、多数示例策略乃至 tq_trading_unit.rst 交易单元方案的共同基础。t71 - 简单趋势策略t71.py是连续 3 根阳线做多、连续 3 根阴线做空的示例演示了 pandas 序列运算up df.close df.open生成布尔序列后取all()判断同时示范了TargetPosTask的offset_priority今昨开参数控制平仓时今仓/昨仓的优先顺序。t72 - 隔夜开盘抢单t72.py演示get_trading_status判断合约交易状态当trade_status AUCTIONORDERING集合竞价时立即以指定价报单并提示insert_order指令会在下一次wait_update()时真正发出。t80 - 价差回归策略t80.py展示了双合约联动的目标持仓用法当近月-远月价差大于 250 时空近月、多远月set_target_volume(-1)/set_target_volume(1)价差小于 200 时双边平仓是套利类策略的最小骨架。合约与市场信息查询t50 ~ t59、underlying_symbol从t50开始示例进入查询接口系列tqsdk/demo/tutorial这类接口返回一次性数据对象文档明确提示返回的对象不会更新不建议在循环内调用t50query_symbol_settlement(symbol, days, start_dt)查询交易所合约每日结算价如query_symbol_settlement(SHFE.ag2504, days3)。t51query_symbol_ranking(symbol, ranking_type, days)查询成交/持仓排名ranking_type支持VOLUME按成交量、LONG按多头持仓等。t52query_quotes(ins_class, product_id, exchange_id, expired, has_night)按合约类型、交易所、品种等条件批量查询合约ins_class取值如FUTURE、INDEX指数、CONT主连、STOCK、FUNDexpired控制是否含已下市合约。t53query_cont_quotes(exchange_id, product_id)查询主连合约对应的标的合约列表。t54query_symbol_info(ls)批量查询合约信息与query_options联用可获取期权合约的详细信息表。t55 ~ t59期权查询系列详见下文期权部分。underlying_symbolunderlying_symbol.py订阅主连合约KQ.mSHFE.rb后直接读取quote.underlying_symbol获取当前主力合约。回测与数据下载backtest、downloader、downloader_ordersbacktest - 回测backtest.py展示了 TqSdk 回测的最小用法——只需在创建TqApi时传入TqBacktestfrom datetime import date from tqsdk import TqApi, TqAuth, TqBacktest, TargetPosTask # 在创建 api 实例时传入 TqBacktest 就会进入回测模式 api TqApi(backtestTqBacktest(start_dtdate(2018, 5, 1), end_dtdate(2018, 10, 1)), authTqAuth(快期账户, 账户密码)) klines api.get_kline_serial(DCE.m1901, 5 * 60, data_length15) # 5分钟K线预留15根 target_pos TargetPosTask(api, DCE.m1901)回测模式下策略代码与实盘完全相同TqBacktest负责按历史数据重放行情、撮合下单并生成资金曲线。结合 backtest.rst含 回测接口 实现可以把同一份策略无缝迁移到实盘。downloader - 下载数据downloader.py使用DataDownloader将历史 K 线/Tick 落盘为 CSVfrom tqsdk.tools import DataDownloader kd DataDownloader(api, symbol_listSHFE.cu1805, dur_sec60, start_dtdatetime(2018, 1, 1, 6, 0, 0), end_dtdatetime(2018, 6, 1, 16, 0, 0), csv_file_namekline.csv) # 分钟线 td DataDownloader(api, symbol_listCFFEX.T1809, dur_sec0, start_dtdatetime(2018, 5, 1), end_dtdatetime(2018, 7, 1), csv_file_nametick.csv) # dur_sec0 表示 Tick 数据 with closing(api): while not kd.is_finished() or not td.is_finished(): api.wait_update() print(progress: kline: %.2f%% tick:%.2f%% % (kd.get_progress(), td.get_progress()))downloader_orders - 下载委托单和成交记录download_orders.py展示了把当日全部委托单、成交记录落盘到orders.csv、trades.csv的完整写法通过TqKq()账户配合api.get_order()、api.get_trade()批量导出CSV 已存在时自动追加到文件末尾。指标计算ta、ta_optionta - 指标计算ta.py一行代码演示一个技术指标全部来自tqsdk.ta模块from tqsdk.ta import * klines api.get_kline_serial(SHFE.cu1910, 10, data_length3000) print(ATR, ATR(klines, 26)) print(BIAS, BIAS(klines, 6)) print(BOLL, BOLL(klines, 3, 5)) print(DMI, DMI(klines, 14, 6)) print(KDJ, KDJ(klines, 9, 3, 3)) print(MA, MA(klines, 3)) print(MACD, MACD(klines, 20, 35, 10)) print(SAR, SAR(klines, 4, 0.02, 0.2))ta_option - 期权指标计算ta_option.py则覆盖期权定价体系tafunc.get_his_volatility计算历史波动率BS_VALUE计算理论价OPTION_VALUE拆出内在价值与时间价值OPTION_IMPV反解隐含波动率OPTION_GREEKS输出 delta/theta/gamma/vega/rho 全套希腊值——计算时需同时订阅期权与其标的的多合约 K 线get_kline_serial([SHFE.cu2009C44000, SHFE.cu2009], ...)。多账户multiaccountmultiaccount.py 演示TqMultiAccount同时驱动实盘TqAccount、模拟TqSim、快期模拟TqKq三类账户下单时通过account参数指定目标账户撤单、查资金/持仓/委托/成交也分别按账户实例隔离是机构级多账户管理的入门示例完整能力见 multiaccount.rst。行情图与指标画图t90 ~ t96t90 ~ t96 系列tqsdk/demo/tutorial演示 TqSdk 内置 Web 绘图api TqApi(web_guiTrue, ...)t90在主图中画指标线如klines[ma_MAIN] ma.ma后缀_MAIN表示画在主图。t91在附图中画指标线通过列名.board指定附图板。t92主图中画信号线api.draw_lineline_typeSEG、文字标注api.draw_text与方框api.draw_box支持bg_color背景色。t93在主图画线和方框id参数保证同一条线随行情持续更新颜色使用 ARGB 十六进制如0xFFFF3333。t94在附图画另一合约的 K 线把open/high/low/close列按rb2105.open格式写入并指定boardB2。t95同一附图中同时画 K 线、线段与方框。t96附图中画 MACD——先用MACD(klines, 12, 26, 9)计算再用 K 线模拟柱状图、把 diff/dea 指定到同一 board 并自定义颜色。绘图代码放在wait_update()循环内即可随行情实时刷新浏览器访问web_gui地址查看结果。期权基本使用o10 ~ o74期权基础示例位于 tqsdk/demo/option_tutorial建议顺序为先看o10、o20行情与筛选再看o30、o40、o41实值/平值/虚值分类与希腊值最后看o60 ~ o74波动率曲面、套利与保证金。o10获取期权实时行情期权代码形如DCE.m1807-C-2450大商所格式、SHFE.cu2006C44000上期所格式、CFFEX.IO2002-C-3550中金所格式。o20query_options(underlying_symbol, option_class, expired, strike_price, exercise_year, exercise_month, exchange_id)按多种条件筛选期权。o30query_atm_options(symbol, price, [档位], CALL)按档位返回实值/平值/虚值期权列表档位列表如[3, 2, 1]、[1, 0, -1]返回格式如[SHFE.au2012C30000]无匹配档返回None。o40 / o41OPTION_GREEKS计算希腊值、OPTION_IMPV计算隐含波动率传入无风险利率如0.025配合期权标的的多合约 K 线输入。o60VOLATILITY_CURVE用query_options拉取全部看跌期权、逐合约get_quote构建 quote 字典后计算波动率曲面。o70期权-期货平价套利比较买入看涨期权行权成本与卖出期货价发现套利空间则双边限价下单。o71 ~ o73按行权价组装期权列表get_quote_list批量取 quote、以及query_all_level_options/query_all_level_finance_options金融期权nearbys指定邻近合约数两种虚值/平值/实值分类方法。o74本地计算 ETF 期权卖方开仓保证金按认购/认沽两种公式分别实现需取strike_price、pre_settlement、underlying_quote.pre_close、volume_multiple等字段。策略示例可直接改造的参考实现doc/demo/strategy.rst 明确说明这一页收集的是可直接改造的完整策略示例更适合作为参考实现而非入门材料。所有策略源码在 tqsdk/demo/example 目录标注了从初级到高级的难度。如果只想先挑几篇代表性示例文档推荐趋势与均线Doublema双均线、tutorial-t60、tutorial-t70套利与价差PTA 产业链套利、养殖价差套利、tutorial-t80执行算法冰山订单算法、盘口下单算法、跟量下单算法POV、VWAP。经典策略经典策略组难度初级至高级包括Aberration 通道突破、Doublema 双均线doublema.py、价格动量、自动扶梯Escalator、菲阿里四价、R-Breaker隔夜/非隔夜两个版本、Dual Thrust、网格交易含异步版 gridtrading_async.py、随机森林、海龟交易、VWAP。以 doublema.py 为例它展示了新 K 线产生才计算信号的规范写法SHORT, LONG 30, 60 # 短/长周期 SYMBOL SHFE.bu2012 data_length LONG 2 # K 线数据长度 klines api.get_kline_serial(SYMBOL, duration_seconds60, data_lengthdata_length) target_pos TargetPosTask(api, SYMBOL) while True: api.wait_update() if api.is_changing(klines.iloc[-1], datetime): # 产生新 K 线:重新计算均线 short_avg ma(klines[close], SHORT) long_avg ma(klines[close], LONG) if long_avg.iloc[-2] short_avg.iloc[-2] and long_avg.iloc[-1] short_avg.iloc[-1]: target_pos.set_target_volume(-3) # 均线下穿做空 if short_avg.iloc[-2] long_avg.iloc[-2] and short_avg.iloc[-1] long_avg.iloc[-1]: target_pos.set_target_volume(3) # 均线上穿做多趋势策略趋势策略组包括三重指数平滑平均线 TRIX、基于分形的趋势突破、钱德动量震荡指标 CMO、涡旋指标、Hull 移动平均线、Keltner Channel、Qstick、Aroon 指标、量价趋势VPT。它们共享同一套骨架——在wait_update主循环里等待新 K 线用tqsdk.ta/tafunc计算指标再用TargetPosTask表达多空结论可直接替换指标与阈值适配自己的思路。套利策略套利策略组覆盖产业链与跨品种价差PTA 产业链套利涤纶短纤生产利润pta_spread.py、养殖价差套利smash_spread.py、双焦焦煤-焦炭、甲醇制烯烃MTO、铜铝比价、压榨价差、裂解价差、股指期货跨期、钢厂利润螺纹-铁矿-焦炭-焦煤rb-i-jt-spread.py、菜油/豆油/棕榈油多品种套利。pta_spread.py 是一个典型的多腿套利模板以日线计算涤纶短纤价值 −PTA 成本 乙二醇成本的历史均值与标准差z_score超过阈值建仓卖出 PF、买入 PTA/EG 或反向回归后平仓并带止损合约乘数通过quote.volume_multiple动态获取且整个策略可以直接放进TqBacktest中做历史验证。均值回归策略均值回归组包括卡尔曼滤波配对交易、基于距离的配对交易、枢轴点反转、CCI 均值回归、RSI 超买/超卖、Z-Score 均值回归。配对交易类示例的核心是构建价差序列spread并判断其相对历史均值的偏离与 z_score.py 的 Z-Score 思路同源。算法交易策略算法交易组是订单执行层面的参考实现共同特点是把大单拆成小单逐步成交、尽量降低冲击成本冰山订单算法iceberg_algorithm.py通过TargetPosTask的min_volume/max_volume参数把总量拆成 1~10 手的批次price支持ACTIVE对价、PASSIVE挂价或lambda direction: 价格的指定价模式并实时打印进度。盘口下单算法handicap_algorithm.py按盘口量的比例如 20%决定每轮下单手数ORDERBOOK_TYPE可选对手盘口买看卖一量或挂单盘口买看买一量价格变化时先撤单再按新价重挂。跟量下单算法 POVpov.py以市场累计成交量quote.volume的增量乘以跟量比例如 10%计算本轮下单量成交后更新基准成交量。算法模块示例TWAP / VWAP 计划任务doc/demo/algorithm.rst 面向已经理解目标持仓、下单/撤单和wait_update主循环的读者提供两个高级算法示例**twap_table时间平均加权算法**与vwap_table交易量平均加权算法。它们与上述示例策略中的执行算法不同是 TqSdk 内置的算法模块实现在 tqsdk/algorithm 中Twap类位于 tqsdk/algorithm/twap.py构造后即自动运行将总手数拆为随机手数列表、总时长拆为随机时间间隔列表每个时间段先用被动价PASSIVE跟单时间过去约 2/3 或仅剩 2 秒时撤掉未成单、改用主动价ACTIVE追单直到全部成交。twap_table/vwap_table函数位于 tqsdk/algorithm/time_table_generater.py返回一份 pandas DataFrame 形式的计划任务时间表配合TargetPosSchedulertarget_pos_scheduler.py逐行执行。twap_table的标准用法如下from tqsdk import TqApi, TqAuth, TargetPosScheduler from tqsdk.algorithm import twap_table api TqApi(authTqAuth(快期账户, 账户密码)) # 目标持仓 -100 手600s 内完成每步调整 1~5 手 time_table twap_table(api, CZCE.MA109, -100, 600, 1, 5) print(time_table.to_string()) target_pos_sch TargetPosScheduler(api, CZCE.MA109, time_table) while not target_pos_sch.is_finished(): api.wait_update() # 获取全部成交记录并计算成交均价 print(target_pos_sch.trades_df)从源码看twap_table的实现逻辑是先取当前持仓pos.pos算出与目标持仓的差额delta_pos若总手数小于单步上限则一步到位否则用_gen_random_list生成手数序列与时间间隔序列要求平均间隔不小于 3 秒随后把每一段拆成interval - 2秒的 PASSIVE 阶段 2 秒的 ACTIVE 阶段两行最终通过累计求和生成target_pos列。返回的时间表包含三列interval持续时间秒、target_pos该任务目标持仓、pricePASSIVE排队价 /ACTIVE对价 /None暂停。时间表是普通 DataFrame可以用 pandas 自由定制——例如在头部插入一行[10, 10, None]让第一项任务延迟 10 秒再开始。参数约束源码中会直接抛异常校验min_volume_each_step、max_volume_each_step必须为正整数且前者小于后者单步时间间隔不能小于 3 秒需调大单步手数阈值或拉长总时长duration以秒为单位可跨非交易时间段但不可跨交易日。Notebook 示例交互式研究环境doc/demo/jupyter.rst 提供了两个可直接在 Jupyter 中运行的 Notebookdemo.ipynb综合演示 TqSdk 在 Notebook 中的行情获取、K 线与主循环用法factor.ipynb因子计算场景适合在交互式环境中做研究型分析。Notebook 方式特别适合数据探索与因子研究可以在单元格中逐步调用TqApi、get_kline_serial、tqsdk.ta指标函数并把结果绘制成图表而无需像策略那样维护常驻主循环。如何运行示例环境与通用骨架所有示例的运行方式一致将代码中的TqAuth(快期账户, 账户密码)替换为真实快期账户然后直接以 Python 执行例如python tqsdk/demo/tutorial/t10.py运行前需安装依赖见 requirements.txt并完成快期账户认证。归纳这些示例可以提炼出 TqSdk 策略的五个通用骨架创建 APITqApi(authTqAuth(...))回测时追加backtestTqBacktest(start_dt, end_dt)多账户时传入TqMultiAccount。订阅数据get_quote/get_kline_serial/get_tick_serial返回随行情自动更新的引用对象。建立交易工具TargetPosTask目标持仓、TargetPosScheduler计划任务或直接insert_order。主循环while True: api.wait_update()配合is_changing精确响应行情/委托/持仓变化。收尾api.close()或使用with TqApi(...) as api上下文管理器自动释放资源。总结TqSdk 的示例程序体系是一份按阶段递进的实战地图t10~t30解决如何拿数据t40/t41解决如何下单t60/t70/t80建立自动交易范式backtest/downloader支撑验证与数据准备ta/ta_option提供指标与期权计算能力t90~t96覆盖可视化o10~o74深入期权场景策略示例tqsdk/demo/example与算法模块tqsdk/algorithm则给出可直接改造的完整参考实现。读者可按推荐顺序把示例逐个跑通、改造再结合 doc/quickstart.rst 与 doc/usage/index.rst 的完整文档体系逐步构建自己的实盘策略。赞分享金融科技【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址https://gitcode.com/gh_mirrors/tq/tqsdk-python点击查看免费下载相关推荐tqsdk-python 基本使用指南从实时行情、K线与下单到自动交易与回测的入门示例全解tqsdk python 基本使用指南从实时行情、K线与下单到自动交易与回测的入门示例全解 本文以 tqsdk python 仓库 doc/demo/base金融科技天勤量化TqSdk算法交易实战TWAP与VWAP策略实现指南天勤量化TqSdk是专业的期货量化交易开发包提供实时行情、历史数据和实盘交易功能。本文将详细介绍TqSdk中两种核心算法交易策略TWAP与VWAP的实现方法金融科技RQAlpha 策略示例实战指南从买入持有到期货配对交易的 7 个完整回测代码RQAlpha 策略示例实战指南从买入持有到期货配对交易的 7 个完整回测代码 RQAlpha 是一个可扩展、可替换的 Python 量化回测与交易框架支持金融科技上一篇plannotator PR 描述文本标注Phase 1实现剖析复用既有注释引擎把 prose 批注送入 Agent 反馈管道下一篇EverythingToolbar核心功能揭秘10个提升搜索效率的技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑