欧易交易所与KuCoin 如何通过 API 进行自动化交易
导言
在快速发展的数字资产交易领域,自动化交易系统正变得越来越普及和重要。它们允许交易者摆脱手动操作的束缚,并能够全天候响应市场变化。API(应用程序编程接口)是连接交易平台和自动化交易程序的关键桥梁。通过API,交易者能够编写自定义的交易机器人,这些机器人可以根据预先设定的算法和策略,自动执行买卖操作。这种自动化不仅解放了交易者的双手,让他们不必时刻盯盘,而且还显著提高了交易效率,特别是在高频交易和快速波动的市场环境中,能够及时抓住稍纵即逝的市场机会。本文将深入探讨如何利用两大主流加密货币交易所——欧易交易所(OKX)和 KuCoin 的 API 进行自动化交易。我们将详细分析其技术实现细节,包括API密钥管理、数据获取、订单提交以及风险控制等方面,并探讨这些自动化交易系统在不同市场条件下的潜在应用场景,例如趋势跟踪、套利交易和做市策略。
欧易交易所 (OKX) API 自动化交易
欧易交易所 (OKX) 提供了全面的应用程序编程接口 (API),包括 REST API 和 WebSocket API,开发者可以利用这些接口构建复杂的自动化交易系统和应用程序。这些 API 允许用户以编程方式访问和管理其欧易账户,并执行各种交易操作,而无需手动干预。通过 API 密钥进行身份验证,确保交易安全。
REST API: REST API 提供了一组 HTTP 端点,用于执行各种操作,例如获取市场数据、下单、管理账户信息等。它们基于请求-响应模型,适用于非实时的数据请求和操作。开发者可以使用各种编程语言(如 Python、Java、JavaScript)通过 HTTP 请求与 REST API 进行交互。常用的 REST API 功能包括:
- 市场数据: 获取实时和历史交易数据,包括价格、成交量、深度等。
- 交易功能: 下达市价单、限价单、止损单等各种类型的订单。
- 账户管理: 查询账户余额、交易历史、持仓信息等。
- 资金划转: 进行币种的充值、提现和内部转账。
WebSocket API: WebSocket API 提供了一个持久的双向通信通道,允许开发者实时接收市场数据更新和账户信息。与 REST API 相比,WebSocket API 更适合需要实时数据的应用程序,例如高频交易和实时风险管理系统。通过订阅特定的频道,开发者可以接收到以下类型的实时数据:
- 实时市场行情: 接收最新的交易价格、成交量等数据。
- 订单簿更新: 获取订单簿的实时变化,包括新增、修改和删除的订单。
- 账户信息更新: 接收账户余额、订单状态等信息的实时更新。
- 交易执行报告: 接收已成交订单的详细信息。
使用欧易 API 进行自动化交易需要一定的编程技能和对加密货币交易市场的了解。开发者需要仔细阅读欧易 API 文档,了解各个 API 端点的功能和使用方法。还需要注意安全问题,妥善保管 API 密钥,并采取适当的风险管理措施,以防止意外损失。
REST API:
REST API 在加密货币交易平台中扮演着至关重要的角色,主要用于获取实时的市场数据,查询账户的详细信息,执行下单和撤单等核心操作。它采用一种基于请求-响应模型的同步通信方式,这意味着客户端发送请求后必须等待服务器的响应才能继续执行后续操作,从而保证了数据的一致性和实时性。
- 认证: 在使用欧易等加密货币交易所提供的 REST API 之前,进行严格的身份认证是必不可少的步骤。这通常涉及到生成一对唯一的 API 密钥对,包括 API Key(公钥)和 Secret Key(私钥)。API Key 用于标识你的身份,而 Secret Key 则用于对请求进行签名,防止恶意篡改。每个 API 请求的头部都需要添加相应的签名信息,以证明请求的合法性。常见的签名算法是 HMAC-SHA256,该算法结合了哈希函数和密钥,提供了强大的安全性。你需要将请求参数、当前时间戳和 Secret Key 按照特定的规则组合起来,然后使用 HMAC-SHA256 进行哈希运算,并将运算结果作为签名添加到请求头中。时间戳的引入可以有效防止重放攻击,提高 API 的安全性。
-
获取市场数据:
通过 REST API,你可以轻松获取各种交易对的全面市场数据,包括实时的价格、成交量、深度数据以及历史K线数据等信息。这些数据对于制定交易策略、分析市场趋势至关重要。例如,可以使用
/api/v5/market/tickers
接口获取所有交易对的最新成交价、24小时成交量、涨跌幅等关键指标。还可以使用/api/v5/market/depth
接口获取指定交易对的买卖盘口深度数据,用于判断市场买卖力量的强弱。 -
交易操作:
REST API 提供了丰富的交易接口,支持下单、撤单等多种交易操作。通过这些接口,你可以程序化地执行交易策略,提高交易效率。例如,可以使用
/api/v5/trade/order
接口提交新的交易订单,并通过指定交易对、交易方向(买入/卖出)、订单类型(市价单/限价单)、价格和数量等参数来精确控制交易行为。还可以使用/api/v5/trade/cancel-order
接口撤销未成交的订单,灵活调整交易策略。在进行交易操作时,务必仔细核对参数,避免因参数错误导致交易失败或产生不必要的损失。 -
账户管理:
通过 REST API,你可以方便地查询账户的各项信息,包括账户余额、持仓情况、历史交易记录、资金流水等。这些信息对于管理资产、监控交易风险至关重要。例如,可以使用
/api/v5/account/balance
接口获取账户中各种币种的可用余额、冻结余额和总余额,全面了解账户的资金状况。还可以使用/api/v5/account/bills
接口查询历史交易记录,用于分析交易行为、评估交易策略的效果。
WebSocket API:
WebSocket API 是一种为客户端与服务器之间提供全双工通信通道的先进技术,它基于单一 TCP 连接实现持久性的双向数据传输。与传统的 HTTP 请求-响应模式不同,WebSocket 允许服务器在没有客户端显式请求的情况下主动推送数据,从而显著降低延迟并提升实时性,是构建实时应用的关键技术。
- 订阅频道: 通过 WebSocket API,开发者可以根据需求订阅各种类型的市场数据频道。这些频道涵盖了从实时的最新交易价格、成交量,到更详细的交易明细数据和订单簿深度更新等信息。一旦所订阅频道的数据发生任何变动,交易所的服务器会立即将更新后的数据通过 WebSocket 连接推送到客户端,确保数据的高度同步和即时性。
- 账户数据订阅: 除了市场数据,WebSocket API 还支持订阅用户的个人账户数据频道。通过订阅此类频道,用户可以实时追踪其账户余额的变动情况,包括充值、提现、交易盈亏等。同时,用户还可以接收关于订单状态的实时更新,例如订单的创建、成交、取消等,这对于及时调整交易策略至关重要。
- 优势: WebSocket API 的核心优势在于其卓越的实时性。它能够以极低的延迟将数据从服务器传输到客户端,这对于需要快速响应市场变化的交易策略至关重要,例如高频交易和套利策略。相较于传统的轮询或长轮询方法,WebSocket 大大降低了服务器的资源消耗,并提升了数据传输效率,为开发者提供了更强大、更灵活的实时数据解决方案。
代码示例 (Python):
以下是一个使用欧易 REST API 获取 BTC-USDT 市场最新成交价的 Python 代码示例。此示例演示了如何构建经过身份验证的请求,以从欧易交易所获取实时市场数据。
import requests
import base64
import hmac
import hashlib
import time
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"
base_url = "https://www.okx.com"
上述代码段定义了用于向欧易 API 进行身份验证所需的凭据。 确保将 `YOUR_API_KEY`、`YOUR_SECRET_KEY` 和 `YOUR_PASSPHRASE` 替换为您在欧易交易所生成的实际 API 密钥、密钥和短语。
base_url
变量设置为欧易 API 的基本 URL。
def generate_signature(timestamp, method, request_path, body):
message = timestamp + method + request_path + (str(body) if body else '')
mac = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode()
generate_signature
函数计算请求的数字签名。 此签名对于验证请求的真实性至关重要。 它使用您的 `secret_key`,时间戳,HTTP方法,请求路径以及请求正文的内容来创建一个 HMAC-SHA256 哈希值,然后使用 Base64 编码该哈希值。
def get_ticker(instrument_id):
timestamp = str(int(time.time()))
method = "GET"
request_path = "/api/v5/market/ticker?instId=" + instrument_id
body = None
signature = generate_signature(timestamp, method, request_path, body)
get_ticker
函数构造并发送获取指定交易对(在本例中为 BTC-USDT)最新成交价的请求。 它首先创建一个时间戳,设置 HTTP 方法为 GET,构建请求路径,生成签名。
instrument_id
参数允许你指定要检索数据的特定交易对。 此函数随后使用构建的签名和时间戳创建必要的请求头。
headers = {
'OK-ACCESS-KEY': api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': passphrase
}
url = base_url + request_path
response = requests.get(url, headers=headers)
return response.()
上述代码段设置请求头,包括 API 密钥、签名、时间戳和密码短语。 这些 header 对于欧易 API 的身份验证至关重要。 然后,它使用 `requests.get` 方法向欧易 API 发送 GET 请求,并将定义的 header 包含在请求中。 API 的响应以 JSON 格式返回。
if __name__ == '__main__':
ticker_data = get_ticker("BTC-USDT")
if ticker_data and ticker_data['code'] == '0':
print(f"BTC-USDT 最新成交价: {ticker_data['data'][0]['last']}")
else:
print(f"获取数据失败: {ticker_data}")
此代码块检查脚本是否作为主程序运行。 如果是,它将调用 `get_ticker` 函数,传递 "BTC-USDT" 作为 `instrument_id`。 它检查响应是否成功(通过检查 `code` 是否为 '0')。 如果成功,它将从响应数据中提取最新成交价并将其打印到控制台。 否则,将打印一条错误消息。
KuCoin API 自动化交易
KuCoin 交易所提供强大的 API 接口,允许开发者和交易者构建自动化交易系统。这些接口主要分为两类:REST API 和 WebSocket API,各自服务于不同的交易需求。
REST API :KuCoin 的 REST API 是一种同步请求/响应式接口。它允许用户执行各种操作,例如:
- 获取市场数据 :查询交易对的实时价格、历史 K 线数据、市场深度信息,为交易策略提供数据基础。
- 管理账户信息 :查询账户余额、交易历史、持仓情况,监控资金流动。
- 下单和撤单 :创建限价单、市价单等多种订单类型,并可随时撤销未成交的订单,灵活控制交易。
- 充提币操作 :发起充值和提现请求,管理数字资产。
REST API 通常用于执行非实时性操作,例如周期性地获取市场数据或批量下单。由于每次请求都需要建立连接,因此不适合高频交易。
WebSocket API :KuCoin 的 WebSocket API 是一种双向通信协议,允许服务器主动向客户端推送数据。这意味着用户可以实时接收市场数据更新、订单状态变化等信息,而无需频繁发送请求。主要用途包括:
- 实时行情推送 :接收实时交易价格、成交量等数据,用于构建高频交易策略。
- 订单状态更新 :实时跟踪订单的成交、撤销等状态变化,及时调整交易策略。
- 深度数据更新 :获取实时更新的订单簿深度数据,进行更精细化的市场分析。
WebSocket API 非常适合需要实时数据的交易场景,例如高频交易、套利交易等。通过建立持久连接,可以显著降低延迟,提高交易效率。
使用 KuCoin API 进行自动化交易需要具备一定的编程能力和对 KuCoin API 文档的理解。开发者可以使用各种编程语言(如 Python、Java、Node.js 等)和相应的 API 客户端库来简化开发过程。安全性至关重要,需要妥善保管 API 密钥,并采取必要的安全措施,防止账户被盗用。
REST API:
KuCoin 的 REST API 接口设计风格与欧易类似,主要用于执行同步操作。 它提供了一系列HTTP端点,允许开发者以编程方式访问KuCoin交易所的功能,包括市场数据查询、交易执行和账户管理等。 这种同步交互意味着客户端发送请求后需要等待服务器返回响应才能继续执行后续操作。
- 认证: KuCoin API 的认证方式也需要使用 API 密钥对(API Key 和 Secret Key),并在请求头中添加签名信息。API Key 用于标识用户的身份,而 Secret Key 则用于生成签名,确保请求的安全性。签名算法是 HMAC-SHA256,但具体的签名方式可能略有不同,包括签名字符串的组成、时间戳的使用,需要仔细阅读 KuCoin 的 API 文档。正确的签名是成功调用API的关键。为了提高安全性,建议采取IP白名单等措施限制API Key的使用范围。
- 获取市场数据: 使用 REST API 可以获取各种交易对的市场数据,如实时价格、深度信息等。具体来说,可以获取包括最新成交价、最高价、最低价、交易量,以及订单簿的深度信息。这些数据对于分析市场趋势、制定交易策略至关重要。通过API,还可以获取历史K线数据,用于回测交易策略。
- 交易操作: 提供了下单、撤单等交易接口,可以根据预设的交易策略执行交易。可以创建市价单、限价单等不同类型的订单。下单时需要指定交易对、交易方向(买入或卖出)、数量和价格(对于限价单)。撤单接口则允许取消尚未成交的挂单。使用API进行交易操作需要谨慎,务必充分测试,确保交易逻辑的正确性,避免意外损失。
- 账户管理: 可以查询账户余额、交易历史等信息。 包括不同币种的可用余额、冻结余额,以及历史交易记录、充提币记录等。这些信息有助于用户监控账户状态、进行财务管理。 API还提供了查询手续费率的接口,方便用户了解交易成本。
WebSocket API:
KuCoin的WebSocket API是获取实时市场数据和用户账户信息的主要途径。它允许开发者构建响应迅速的交易机器人、实时监控工具和数据分析系统。
- 连接和订阅: 为了建立WebSocket连接,您必须首先通过KuCoin REST API获取一个有效的WebSocket连接令牌。此令牌用于身份验证,并确保只有授权用户才能访问实时数据流。获取令牌后,您可以使用标准的WebSocket协议建立连接。连接建立后,您可以根据您的需求订阅不同的市场数据频道和账户数据频道。市场数据频道提供各种交易对的实时价格、交易量、订单簿快照和深度信息。账户数据频道则推送用户账户的资产变动、订单状态更新以及其他与账户相关的事件。
- 数据接收和处理: KuCoin服务器会将实时数据以预定义的格式(通常是JSON)推送到已连接的客户端。客户端需要实现相应的解析逻辑,以便从接收到的数据包中提取所需的信息。对于交易机器人,这可能意味着根据价格变动自动下单;对于监控工具,则可能是实时更新图表和警报。重要的是,客户端必须能够高效地处理大量的实时数据,并根据预设的策略做出相应的响应,例如调整交易策略、发出警报或记录数据。开发者应仔细阅读KuCoin的WebSocket API文档,了解数据的结构和含义,以便正确地解析和利用这些数据。
代码示例 (Python):
以下是一个使用 KuCoin REST API 获取 BTC-USDT 市场最新成交价的 Python 代码示例。此代码展示了如何进行身份验证并调用 API 端点。
import requests
import
import hmac
import hashlib
import time
import base64
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE" # KuCoin 账户的密码
base_url = "https://api.kucoin.com"
def generate_signature(endpoint, request_method, timestamp, request_body, secret_key):
"""生成 KuCoin API 请求签名。"""
data_to_sign = str(timestamp) + request_method + endpoint + ('' if request_body is None else .dumps(request_body))
signature = hmac.new(secret_key.encode('utf-8'), data_to_sign.encode('utf-8'), hashlib.sha256).digest()
return base64.b64encode(signature).decode('utf-8')
def get_ticker(symbol):
"""获取指定交易对的最新成交价信息。"""
endpoint = f'/api/v1/market/orderbook/level1?symbol={symbol}'
method = 'GET'
timestamp = str(int(time.time() * 1000)) # KuCoin 使用毫秒级时间戳
body = None # GET 请求通常没有请求体
signature = generate_signature(endpoint, method, timestamp, body, secret_key)
headers = {
'KC-API-KEY': api_key,
'KC-API-SIGN': signature,
'KC-API-TIMESTAMP': timestamp,
'KC-API-PASSPHRASE': passphrase,
'KC-API-KEY-VERSION': '2' # 使用版本 2 的签名
}
response = requests.get(base_url + endpoint, headers=headers)
return response.()
if __name__ == '__main__':
ticker_data = get_ticker("BTC-USDT")
if ticker_data and ticker_data['code'] == '200000':
print(f"BTC-USDT 最新成交价: {ticker_data['data']['price']}")
else:
print(f"获取数据失败: {ticker_data}")
代码解释:
-
导入必要的库:
requests
用于发送 HTTP 请求,hmac
和hashlib
用于生成 API 签名,time
用于获取时间戳,base64
用于对签名进行编码。 -
设置 API 密钥:
将
YOUR_API_KEY
、YOUR_SECRET_KEY
和YOUR_PASSPHRASE
替换为您的 KuCoin API 凭据。 -
生成签名:
generate_signature
函数使用 HMAC-SHA256 算法生成 API 请求签名。签名是 KuCoin API 身份验证的关键部分。 -
构造请求头:
请求头包含 API 密钥、签名、时间戳和密码短语。
KC-API-KEY-VERSION: '2'
指明签名版本。 -
发送请求:
requests.get
函数向 KuCoin API 发送 GET 请求。 -
处理响应:
检查响应状态码是否为
200000
(成功)。如果成功,则打印 BTC-USDT 的最新成交价。
安全提示:
- 保护您的 API 密钥: 不要将 API 密钥存储在公共代码仓库中。建议使用环境变量或配置文件来管理 API 密钥。
- 使用 HTTPS: 始终使用 HTTPS 协议来保护您的 API 请求。
- 验证响应: 验证 API 响应的完整性,以防止中间人攻击。
自动化交易策略示例
以下是一些常见的自动化交易策略,这些策略可以通过利用欧易(OKX)和 KuCoin 等交易所提供的应用程序编程接口(API)来实现。这些API允许开发者编写程序,自动执行交易操作,从而实现各种复杂的交易策略。
- 网格交易(Grid Trading): 网格交易是一种利用市场价格波动进行套利的策略。它将交易资金分成若干等份,并在预先设定的价格范围内,以固定间隔设置多个买入和卖出订单,形成一个“网格”。当市场价格波动时,程序会自动执行买卖操作。例如,当价格下跌并触及买单时,程序会自动买入;当价格上涨并触及卖单时,程序会自动卖出。这种策略旨在通过频繁的小额交易,在震荡市场中赚取差价。网格交易的关键在于合理设置网格的上下限、网格密度(买卖单之间的价格间隔)以及每笔交易的资金量。
- 趋势跟踪(Trend Following): 趋势跟踪策略依赖于识别和跟随市场趋势。它使用各种技术指标,如移动平均线(Moving Averages)、MACD(Moving Average Convergence Divergence)、RSI(Relative Strength Index)等,来判断当前的市场趋势方向。一旦确认了趋势,程序就会按照趋势方向进行交易。例如,如果移动平均线显示上升趋势,程序就会自动买入;反之,如果移动平均线显示下降趋势,程序就会自动卖出。趋势跟踪策略的成功与否很大程度上取决于选择合适的指标以及调整指标参数,以适应不同的市场环境。
- 套利交易(Arbitrage Trading): 套利交易是指利用不同交易所或交易平台之间,同一种数字资产的价格差异来获利的策略。由于市场信息不对称或其他因素,同一数字资产在不同交易所的价格可能存在细微的差异。套利交易程序会实时监控多个交易所的价格,一旦发现有利可图的价差,就会同时在价格较低的交易所买入,并在价格较高的交易所卖出,从而赚取无风险利润。套利交易对速度要求极高,通常需要使用高性能的服务器和优化的算法,以确保能够及时抓住短暂的套利机会。同时,还需要考虑交易手续费、提币费用以及交易所的交易量等因素。
- 做市策略(Market Making): 做市策略旨在为市场提供流动性,并通过买卖价差赚取利润。做市商会在买卖盘口挂出买单(bid)和卖单(ask),并尽可能地缩小买卖价差。当有交易者以做市商的价格买入或卖出时,做市商就会从中赚取差价。做市策略需要不断调整买卖盘口的价格和数量,以应对市场变化和交易流量。做市商需要承担一定的风险,因为他们需要在市场出现剧烈波动时,维持盘口的稳定,并承担可能出现的亏损。作为回报,做市商通常可以获得交易所提供的交易手续费返还或其他优惠。
注意事项
- 风险管理: 自动化交易虽然高效,但也伴随着潜在风险,因此严格的风险管理至关重要。除了设置止损点和止盈点,还应根据市场波动率和个人风险承受能力动态调整仓位大小,并考虑使用追踪止损等策略进一步控制风险,防止因突发市场事件造成的意外亏损。同时,建议定期审查和优化风险管理策略,使其适应不断变化的市场环境。
- API 限制: 交易所为了保障系统稳定性和公平性,通常会对 API 的调用频率进行限制。超出限制可能会导致程序被暂时或永久禁用。因此,需要合理设计程序架构,避免不必要的 API 调用。可以采用批量请求、缓存数据等技术手段来降低 API 调用频率。应密切关注交易所的 API 限制规则,并根据实际情况进行调整。
- 安全性: API 密钥是访问交易所账户的凭证,一旦泄露,可能导致资产被盗。因此,API 密钥应妥善保管,绝不泄露给他人。建议使用专门的密钥管理工具存储 API 密钥,并启用二次验证等安全措施。同时,定期更换 API 密钥也是一个良好的安全习惯。在程序代码中,应避免将 API 密钥硬编码,而是从安全的环境变量或配置文件中读取。
- 代码测试: 在真实交易环境中运行自动化交易程序之前,必须进行充分的测试,以确保程序的稳定性和可靠性。测试应包括回测和模拟交易。回测可以使用历史数据验证交易策略的有效性,而模拟交易则可以模拟真实市场环境,检验程序的运行情况。在测试过程中,应重点关注程序的性能、错误处理能力和风险控制机制。只有经过充分测试的程序才能安全地投入实盘交易。
- 文档阅读: 交易所的 API 文档是使用 API 的重要参考资料。仔细阅读 API 文档,可以了解 API 的功能、参数、返回值、错误代码等信息。只有充分了解 API 的使用方法和注意事项,才能编写出高效、稳定的自动化交易程序。同时,API 文档通常会包含交易所的最新规则和政策,及时阅读可以避免因违反规则而导致程序被禁用。
开发环境准备
为了高效地进行加密货币自动化交易开发,我们需要搭建完善的开发环境,选择合适的工具,并获取必要的访问权限:
-
编程语言:
Python 是开发自动化交易策略的首选语言之一,因为它拥有强大的生态系统和丰富的第三方库,能够极大地简化开发流程。例如:
-
requests
:用于发送 HTTP 请求,可以用来获取交易所的公开数据,例如历史价格、交易对信息等。 -
websocket-client
:用于建立 WebSocket 连接,能够实时接收交易所推送的市场数据,例如实时价格、深度信息等。这对于高频交易和快速响应市场变化至关重要。 -
pandas
:用于数据分析和处理,可以对获取的历史数据进行清洗、整理和分析,为策略开发提供数据支持。 -
numpy
:用于数值计算和科学计算,可以进行复杂的数学运算,例如统计分析、风险评估等。
-
-
集成开发环境 (IDE):
选择一个合适的 IDE 可以提高开发效率。常用的 IDE 包括:
- VS Code:一个轻量级的、可扩展的代码编辑器,拥有丰富的插件,可以满足各种开发需求。
- PyCharm:一个专业的 Python IDE,提供代码自动补全、调试、代码检查等功能,能够提高开发效率。
- Jupyter Notebook:一个交互式的开发环境,适合进行数据分析和原型开发。
- API 密钥: 要访问欧易和 KuCoin 交易所的 API,需要先在交易所注册账号并申请 API 密钥对(API Key 和 Secret Key)。请务必妥善保管您的 API 密钥,避免泄露,并了解交易所的 API 使用规则和限制。同时,阅读相关API文档, 例如欧易的 REST API 和 WebSocket API 文档, KuCoin的 REST API 和 WebSocket API 文档.
- 测试账户: 在真实交易之前,强烈建议使用交易所提供的模拟交易账户(也称为沙盒环境或测试网)进行策略测试。这可以帮助您验证策略的有效性,发现潜在的 Bug,并避免在真实交易中造成损失。每个交易所的模拟交易环境有所不同,请仔细阅读相关文档。