您现在的位置是: 首页 > 文档 文档
欧易OKX API高频交易:策略、实战与风控指南【速看】
时间:2025-03-08 82人已围观
欧易交易所如何利用API进行高频交易
欧易(OKX)交易所的API为高频交易者提供了强大的工具,允许他们构建和部署自动化交易策略,以捕捉快速变化的市场中的微小价格差异。高频交易(HFT)依赖于速度和效率,而API接口是实现这些目标的关键。本文将深入探讨如何利用欧易API进行高频交易,包括必要的准备工作、API接口选择、关键功能的实现以及风险管理等方面。
准备工作
在高频交易之前,必须做好充分的准备。这不仅关乎交易效率,更直接影响资金安全和策略的有效性。以下是必须认真对待的准备环节:
- 账户注册和KYC认证: 需要在欧易交易所注册账户,并严格按照交易所要求完成KYC(了解你的客户)认证流程。KYC认证旨在验证用户身份,是符合监管要求和使用API交易的必要前提。未完成KYC认证将无法使用API进行交易,甚至可能影响账户的正常使用。
- API密钥申请与权限配置: 成功登录欧易账户后,立即前往API管理页面创建专用于高频交易的API密钥。创建时,务必进行精细的权限设置,尤其需要开启交易权限,这是执行买卖操作的基础。强烈建议禁用或严格限制提现权限,最大限度地降低因API密钥泄露或被盗用而造成的资金损失风险。利用IP绑定功能,将API密钥的使用范围限定在特定的服务器或IP地址,能够有效防止未经授权的访问,进一步增强账户的安全性。API密钥的管理策略直接关系到资金安全,务必谨慎对待。
- 开发环境搭建与编程语言选择: 建立稳定高效的开发环境是高频交易成功的关键一步。选择合适的编程语言至关重要,Python、Java和C++是常见的选择。Python因其简洁的语法、强大的数据处理能力和丰富的第三方库支持(如NumPy、Pandas、TA-Lib等),在高频交易领域被广泛应用。同时,选择合适的集成开发环境(IDE)或文本编辑器,并配置相应的开发库和工具,以提高开发效率和代码质量。根据个人技术背景和策略需求,选择最合适的编程语言和开发环境。
- API文档深度阅读与理解: 深入、全面地阅读并理解欧易官方API文档,是正确、高效地使用API的前提。务必详细了解各个API接口的功能、请求参数、返回值格式、错误码以及调用频率限制。理解不同接口之间的关联和依赖关系,掌握API的使用规范和最佳实践。只有充分理解API文档,才能编写出稳定、可靠、高效的交易程序。
- 模拟交易环境充分测试与策略优化: 在将高频交易策略应用于真实交易之前,务必在欧易提供的模拟交易环境中进行充分的测试和验证。模拟交易环境能够真实模拟市场行情和交易机制,帮助开发者发现代码中的潜在错误、策略的不足以及性能瓶颈。通过反复测试和优化,不断完善交易策略,降低在真实交易中造成损失的风险。模拟交易是高频交易策略上线前的最后一道防线,切勿轻视。
API接口选择
欧易API提供了全面的接口服务,旨在满足不同层次的交易需求。特别是在高频交易场景下,选择合适的API接口至关重要。以下列举了几个在高频交易中扮演关键角色的接口,并对其功能和优势进行了详细阐述:
-
行情数据接口:
这是高频交易策略的基石。精准且及时的行情数据直接影响交易决策的质量。欧易提供了一系列行情数据接口,以满足不同需求:
- 公共行情接口: 提供实时的市场深度(Order Book),包括买一价/卖一价、买一量/卖一量等信息,帮助交易者了解市场供需关系;最新成交价(Last Trade)反映了市场当前的交易价格;以及不同时间周期的K线数据,便于进行技术分析和趋势判断。
- WebSocket行情接口: 采用WebSocket协议,与传统的REST API相比,WebSocket能够实现服务器主动推送数据,从而大幅降低延迟。这种低延迟的特性对于高频交易至关重要,能够确保交易者在第一时间获取市场变化,并及时作出反应。WebSocket行情接口提供多种数据流,如逐笔成交、实时深度等,可根据策略需求进行选择。
-
交易接口:
交易接口是执行交易指令的核心,包括下单、撤单以及查询订单状态等功能。
- 下单接口: 欧易提供多种订单类型,以适应不同的交易策略。市价单能够以当前市场最优价格快速成交,适合追求成交速度的策略;限价单允许用户指定成交价格,可以在期望的价格成交,适合追求价格的策略;止盈止损单则可以预设触发条件,在价格达到预设水平时自动执行,用于风险管理。
- 撤单接口: 在高频交易中,快速撤单至关重要。当市场行情发生不利变化时,能够及时撤销未成交的订单,避免损失。
- 批量下单/撤单接口: 批量下单/撤单接口允许交易者一次性提交多个订单或撤单请求,极大地提高了交易效率。在高频交易环境下,时间就是金钱,批量操作能够显著减少延迟,提升策略的执行效率。
-
账户信息接口:
用于实时查询账户余额和持仓信息,以便及时调整交易策略。
- 账户余额接口: 提供可用资金和已用资金的查询功能。可用资金是指可以用于交易的资金,已用资金是指已经被冻结或用于下单的资金。
- 持仓信息接口: 允许查询当前持有的币种和数量,以及持仓的平均成本价和盈亏情况。
选择合适的API接口是构建高效高频交易系统的关键。对延迟有较高要求的策略,应优先考虑WebSocket行情接口和批量下单/撤单接口。同时,需要根据具体的交易策略和风险管理需求,选择合适的订单类型和账户信息接口。
关键功能实现
利用欧易API进行高频交易,需精心构建并高效执行以下核心功能模块,以确保系统稳健性及策略有效性:
-
行情数据接收和处理:
通过欧易提供的WebSocket行情接口,实时订阅并处理市场深度、交易对价格等关键数据流。该过程至关重要,直接影响交易决策的质量和速度。
- 数据解析: 接收到的原始JSON数据需经过高效、精准的解析,转换为程序可直接使用的结构化数据格式。采用诸如 rapid 或 simd 等高性能JSON库,能显著降低解析延迟,尤其在高频环境下,毫秒级的优化都至关重要。
- 数据存储: 解析后的数据依据不同的需求,选择合适的存储方案。内存数据库(例如Redis)适用于存储最新行情数据,供实时交易策略使用;时序数据库(如InfluxDB、TimescaleDB)则用于存储历史数据,便于回测分析、策略优化以及风险管理。数据存储应具备高吞吐量和低延迟特性,以适应高频交易的需要。
- 异常处理: 高频交易系统必须具备强大的容错能力。网络连接中断、数据校验失败、API限流等异常情况都可能发生。系统需具备自动重连机制、数据重传机制、错误日志记录以及告警功能,确保在异常情况下仍能维持稳定运行,并将损失降到最低。
-
交易信号生成:
基于接收到的实时行情数据,结合预先设定的交易策略,自动生成交易信号。策略的设计应充分考虑市场波动性、交易手续费、滑点等因素。
交易策略可从简单的价差套利、趋势跟踪策略,发展到复杂的量化模型,例如:
- 均值回归策略: 当价格偏离移动平均线时,预测价格将回归平均水平,从而进行买入或卖出操作。
- 动量策略: 追踪价格上涨或下跌的趋势,顺势交易,以获取短期利润。
- 机器学习模型: 利用历史数据训练模型,预测未来价格走势,例如使用LSTM、Transformer等深度学习模型。
信号生成模块的效率直接影响交易机会的把握,因此,算法优化至关重要。采用向量化计算、并行处理等技术,可有效提高信号生成速度。
-
订单管理:
根据交易信号,自动执行下单、撤单等操作,是连接策略和市场的桥梁。
- 智能下单: 根据市场深度和交易策略,选择最优的订单类型和价格。例如,当市场流动性较好时,可使用限价单以获取更好的成交价格;当市场波动剧烈、需要快速成交时,应使用市价单。还可考虑使用冰山委托、隐藏委托等高级订单类型,以减少对市场的冲击。
- 快速撤单: 当市场情况发生变化、交易策略需要调整时,必须以极快的速度撤销未成交的订单。撤单速度的快慢直接影响交易结果,尤其在高频交易中。采用高效的撤单算法、优化网络传输,可显著降低撤单延迟。
- 订单状态监控: 实时监控订单的成交状态,包括已成交、未成交、部分成交、已撤销等。根据订单状态的变化,及时调整交易策略,并进行相应的风险控制。建立完善的订单状态跟踪系统,有助于提高交易的准确性和效率。
-
风控管理:
建立完善的风控体系,对交易行为进行实时监控和干预,防止过度交易和潜在亏损,是高频交易系统稳定运行的保障。
- 仓位控制: 严格限制单笔交易的仓位和总仓位。设定合理的仓位上限,防止因单笔交易失误而导致重大损失。总仓位控制则有助于降低市场风险,避免过度杠杆。
- 止损止盈: 为每笔交易设置止损和止盈价格,预先设定可承受的最大损失和期望的最小收益。当价格触及止损或止盈价格时,系统自动平仓,锁定利润或限制亏损。止损和止盈策略的设计应根据市场波动性和交易策略的特点进行调整。
- 频率限制: 限制单位时间内下单和撤单的次数,防止API被滥用。过高的下单频率可能会触发交易所的风控机制,导致API被限制使用。合理的频率限制有助于保护API的稳定性,并避免因程序错误导致的过度交易。
代码示例 (Python)
以下是一个简要的Python示例,演示如何使用欧易API获取实时行情数据并进行交易下单。请注意,这只是一个基础示例,实际应用中需要进行错误处理、参数校验和更完善的逻辑。
import okx.PublicData as PublicData
import okx.Trade as Trade
import okx.Account as Account
import time
import # 引入库,方便处理API返回的JSON数据
# 替换成你的API Key, Secret Key 和 Passphrase
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"
# 初始化API客户端,需要提供API密钥,密钥和密码
account_api = Account.AccountAPI(api_key, secret_key, passphrase, False) #False 代表使用模拟盘
trade_api = Trade.TradeAPI(api_key, secret_key, passphrase, False)
public_data_api = PublicData.PublicDataAPI()
# 获取BTC-USDT的最新成交价
ticker = public_data_api.get_ticker('BTC-USDT')
if ticker and ticker['code'] == '0': # 检查API调用是否成功
last_price = ticker['data'][0]['last']
print(f"当前BTC-USDT最新价格: {last_price}")
else:
print(f"获取行情数据失败: {ticker}")
# 创建一个市价买单。请确保你的账户有足够的USDT
instrument_id = 'BTC-USDT' # 交易对
size = '0.001' # 买入数量,例如0.001 BTC
order_type = 'market' # 市价单
side = 'buy' # 买入
order_params = {
'instId': instrument_id,
'tdMode': 'cash', # 现货
'side': side,
'ordType': order_type,
'sz': size
}
#发送下单请求
order_response = trade_api.place_order(**order_params)
if order_response and order_response['code'] == '0':
order_id = order_response['data'][0]['ordId']
print(f"市价买单已提交,订单ID: {order_id}")
else:
print(f"下单失败: {order_response}")
# 为了观察订单状态,可以查询订单详情 (可选)
#time.sleep(2) # 等待几秒让订单被处理
#order_detail = trade_api.get_order_detail(instrument_id, order_id)
#print(f"订单详情: {order_detail}")
# 获取账户信息 (可选,验证资产是否足够)
account_info = account_api.get_account_balance() # 获取账户资产
#print(f"账户信息: {.dumps(account_info, indent=4)}") # 格式化打印账户信息
重要提示:
-
请务必替换
YOUR_API_KEY
,YOUR_SECRET_KEY
和YOUR_PASSPHRASE
为你自己的真实凭证。 - 在实际交易前,建议使用模拟交易环境进行测试。将`False`改为`True`可切换到实盘模式。
- 请仔细阅读欧易API文档,了解API的详细参数和限制。
- 请谨慎操作,充分了解加密货币交易的风险。
- 本示例代码仅供参考,不构成任何投资建议。
API密钥
在加密货币交易和数据访问中,API密钥扮演着至关重要的角色。它们是连接你的应用程序或脚本与交易所或其他加密货币服务提供商的桥梁。正确配置和安全保管API密钥是保障账户安全和数据完整性的基础。
以下是你需要设置的API密钥相关参数:
api_key = "YOUR_API_KEY"
API密钥,也称为公钥,用于标识你的账户或应用程序。它类似于用户名,但由交易所生成。
secret_key = "YOUR_SECRET_KEY"
密钥是与API密钥关联的私密字符串,用于对你的请求进行签名,验证请求的来源并确保其未被篡改。务必将其视为密码,切勿与他人分享。妥善保管私钥至关重要,一旦泄露可能导致资金损失。
passphrase = "YOUR_PASSPHRASE"
部分交易所还提供密码短语(Passphrase)作为额外的安全层。密码短语与API密钥和密钥配合使用,进一步增强账户的安全性, 防止未经授权的访问。这相当于一个额外的验证步骤。
重要提示:
- 生成API密钥后,务必启用必要的权限。交易所通常允许你自定义API密钥的权限,例如仅允许交易或仅允许读取数据。最小权限原则是最佳实践,只授予你的应用程序或脚本所需的最低权限。
- 妥善保管你的API密钥、密钥和密码短语。切勿将其存储在公共代码库中,或者通过不安全的渠道传输。使用环境变量或加密存储来保护它们。
- 定期更换API密钥。出于安全考虑,建议定期轮换API密钥,以降低密钥泄露的风险。
- 开启二次验证(2FA):尽可能为您的交易所账户开启二次验证,即使API密钥泄露,也能有效阻止未经授权的提币操作。
初始化API客户端
初始化API客户端是访问加密货币交易所API的第一步,它允许你的应用程序与交易所进行通信,获取市场数据或执行交易操作。你需要根据交易所提供的SDK或API文档,使用相应的编程语言和库来完成初始化。
以下示例展示了如何初始化公共数据API、交易API和账户API客户端。这些客户端分别用于获取公开市场数据、进行交易操作以及管理账户信息。
public_data = PublicData.PublicAPI(api_key, secret_key, passphrase, False)
PublicData.PublicAPI: 这是公共数据API客户端的初始化类。它允许你访问交易所提供的公开市场数据,例如交易对信息、最新成交价、订单簿深度等。
api_key: 你的API密钥,用于身份验证。你需要从交易所获取API密钥。
secret_key: 你的API密钥对应的私钥,用于签名请求。同样需要从交易所获取私钥,务必妥善保管,切勿泄露。
passphrase: 某些交易所可能需要一个passphrase作为额外的安全验证手段。
False:
这是一个布尔值参数,用于指示是否使用模拟交易环境。
False
表示使用真实交易环境,
True
表示使用模拟交易环境。使用模拟交易环境进行测试可以避免在真实交易中产生不必要的损失。
tradeAPI = Trade.TradeAPI(api_key, secret_key, passphrase, False)
Trade.TradeAPI: 这是交易API客户端的初始化类。它允许你进行买入、卖出等交易操作。
参数的含义与
PublicData.PublicAPI
相同。请确保你已经启用了交易权限,并了解交易规则和手续费。
accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False)
Account.AccountAPI: 这是账户API客户端的初始化类。它允许你查询账户余额、交易历史等信息。
参数的含义与
PublicData.PublicAPI
相同。
获取市场深度数据
获取指定交易对的市场深度信息,也被称为订单簿数据,是了解市场买卖力量和价格分布的关键。以下代码展示了如何通过API调用获取指定交易对的订单簿数据。
def get_order_book(instrument_id):
此函数
get_order_book
接受一个参数:
-
instrument_id
: 交易对的唯一标识符,例如 "BTC-USD-SWAP" 代表比特币对美元的永续合约。
函数内部,我们首先定义一个参数字典
params
,用于存放API请求所需的参数。
params = {}
然后,将
instrument_id
赋值给
params
字典中的
instId
键,这是API要求的参数名称。
params['instId'] = instrument_id
接下来,调用
public_data.get_instruments(params)
函数来获取订单簿数据。
public_data
是一个假设存在的API客户端对象,其
get_instruments
方法用于发起API请求。需要注意的是,实际API客户端对象和方法名称可能因交易所而异。正确的调用方式应该参考交易所的API文档。
result = public_data.get_instruments(params)
API调用返回的结果存储在
result
变量中。通常,
result
是一个包含订单簿数据的JSON对象,包含买单(bid)和卖单(ask)的价格和数量信息。具体的数据结构取决于交易所的API设计。
将结果打印到控制台,方便开发者查看和调试。
print(result)
注意:以上代码片段仅为示例,你需要根据具体的交易所API文档进行调整,包括 API 端点,参数名称,认证方式以及数据解析方法。 另外,需要处理 API 调用可能出现的错误,如网络错误, 身份验证错误, 和速率限制等。
下单
place_order
函数用于在加密货币交易所下达交易订单。该函数接收多个参数,用于详细描述订单的属性。以下是对每个参数的详细说明以及示例代码:
参数说明:
-
instrument_id
: (字符串) 指定交易的合约或交易对。例如,BTC-USD
表示比特币对美元的交易对。 该参数是必须的. -
side
:(字符串) 指明交易方向。可以设置为buy
(买入) 或sell
(卖出)。该参数是必须的. -
size
:(浮点数或整数) 指定要交易的加密货币的数量或合约数量。该参数是必须的. -
price
:(浮点数或整数) 指定限价单的价格。只有当市场价格达到或超过此价格时,订单才会被执行。如果下的是市价单,则该参数不生效.
其他参数 (在示例代码中设置):
-
tdMode
: (字符串) 交易模式。示例代码中设置为"cash"
, 表示现货交易 (币币交易)。其他可能的值包括杠杆交易等,具体取决于交易所的支持。 -
ordType
: (字符串) 订单类型。示例代码中设置为"limit"
, 表示限价单。 另一个常用的值是"market"
, 表示市价单,它会立即以当前市场最优价格成交。
示例代码:
def place_order(instrument_id, side, size, price):
"""
下达交易订单。
参数:
instrument_id (str): 交易对,例如 "BTC-USD"。
side (str): 交易方向,"buy" (买入) 或 "sell" (卖出)。
size (float 或 int): 交易数量。
price (float 或 int): 限价单价格。
"""
params = {}
params['instId'] = instrument_id
params['tdMode'] = "cash" # 现货交易
params['side'] = side # 买入或卖出
params['ordType'] = "limit" # 限价单
params['sz'] = size
params['px'] = price
result = tradeAPI.place_order(params) # 调用交易 API 下单
print(result) # 打印下单结果
代码解释:
-
该函数首先创建一个空字典
params
,用于存储订单参数。 -
然后,它将
instrument_id
,side
,size
和price
参数以及固定的tdMode
和ordType
参数添加到params
字典中。 -
接下来,它调用
tradeAPI.place_order(params)
函数,将订单参数传递给交易所的交易 API。tradeAPI
是一个预先定义好的,用于与交易所API交互的模块或类。 - 打印下单结果,通常包含订单ID,状态等信息。
注意事项:
- 在实际使用中,需要根据交易所的 API 文档,正确设置订单参数。
- 交易API通常需要身份验证,需要在代码中添加身份验证信息 (例如 API 密钥)。
- 下单函数可能会抛出异常,例如网络错误、参数错误等,需要在代码中进行异常处理。
- 务必谨慎测试,并了解交易规则,避免造成损失。
查询账户余额
此函数用于查询指定账户的加密货币余额。 通过调用账户API的
get_account
方法,并传递必要的参数,可以检索账户的详细信息,包括可用余额、冻结余额以及其他相关账户属性。
def get_account_balance():
该函数定义了名为
get_account_balance
的函数,它不接受任何显式输入参数,但可以在函数内部构建请求参数。
params = {}
创建一个空字典
params
。 这个字典用于存储向账户API发送请求时可能需要的参数,例如账户ID、币种类型等。在示例中,
params
被初始化为空字典,表示不传递任何参数。 根据API的具体要求,可能需要填充相应的参数。
result = accountAPI.get_account(params)
调用
accountAPI
对象的
get_account
方法。
accountAPI
是一个预先实例化的账户API接口对象,它封装了与账户相关的各种操作。
get_account
方法接收
params
字典作为输入,并向服务器发送请求以获取账户信息。 API的调用通常涉及网络请求和数据解析。
print(result)
将API调用返回的结果打印到控制台。
result
变量包含从API返回的账户信息,通常是一个JSON格式的数据结构,包含了账户的各种属性,如余额、可用余额、冻结金额等。
print
语句用于将这些信息显示在控制台上,方便开发者查看和调试。
主函数
在Python脚本中,
if __name__ == '__main__':
结构是程序执行的入口点。当脚本直接运行时,该条件成立,其下的代码块会被执行。这允许你区分脚本是被直接执行,还是被作为模块导入到其他脚本中。
例如:
instrument_id = 'BTC-USDT'
定义了交易的标的,这里是比特币(BTC)对泰达币(USDT)的交易对。在实际应用中,你可以根据需要更改此变量以交易不同的加密货币对。
以下是一些被注释掉的函数调用示例,展示了如何与交易所的API进行交互:
# get_order_book(instrument_id)
此函数(未在此处定义)用于获取指定交易对的订单簿信息。订单簿包含了当前市场上买单和卖单的价格和数量,是进行交易决策的重要参考。获取订单簿通常是实时交易策略的基础。
# place_order(instrument_id, 'buy', '0.001', '20000')
此函数(同样未在此处定义)用于下单。参数包括交易对(
instrument_id
)、交易方向(
'buy'
,买入)、数量(
'0.001'
,0.001个BTC)和价格(
'20000'
,20000 USDT)。这是一个买入0.001个比特币,并且期望以20000 USDT价格成交的示例订单。实际交易所的API可能会有更精细的参数,例如订单类型(限价单、市价单等)。
# get_account_balance()
此函数(未定义)用于获取账户余额信息。在交易前,你需要确认账户有足够的资金来执行交易。交易所通常会返回账户中各种币种的可用余额和冻结余额。
# 以下是使用WebSocket订阅订单簿数据的示例(需要像'websocket-client'这样的WebSocket库):
# 你需要建立与OKX API的WebSocket连接,进行身份验证,并订阅'books'频道。
# 'books'频道提供实时订单簿的更新。交易所通常提供不同的频道和频率选项,以满足不同交易策略的需求。
print("准备就绪...")
注意: 此代码仅为示例,需要根据实际情况进行修改和完善。 务必替换YOUR_API_KEY
, YOUR_SECRET_KEY
, 和 YOUR_PASSPHRASE
为你的真实API密钥。此外,真正的WebSocket订阅实现也需要依赖相应的websocket客户端库。
风险管理
高频交易蕴含着潜在的高收益,但同时也伴随着显著的风险。有效的风险管理至关重要,有助于保护资本并提升长期盈利能力。以下是高频交易中一些关键的风险管理措施:
- 严格止损: 必须为每一笔交易预设明确的止损价格,并在交易执行过程中严格遵守。止损价位的设定应基于对市场波动性、交易策略特性以及个人风险承受能力的综合评估。自动化的止损机制能够确保在市场不利波动时迅速退出交易,避免重大损失。
- 资金管理: 合理控制单笔交易的仓位大小和整体持仓比例,避免过度交易。过度交易会放大风险敞口,增加遭受重大损失的可能性。建议采用固定的仓位规模或者根据账户净值动态调整仓位大小,以控制风险。同时,应设置每日或每周的最大亏损额度,一旦达到上限立即停止交易。
- 监控系统: 实时监控交易系统的各项指标,包括订单执行速度、滑点、延迟以及硬件和软件的运行状态。及早发现并处理异常情况,例如网络中断、程序错误或市场数据异常。建立完善的报警机制,以便在出现问题时能够立即收到通知并采取相应措施。
- 合规性: 全面了解并严格遵守交易所的交易规则和相关法律法规。高频交易往往受到更为严格的监管,违规行为可能导致账户冻结、罚款甚至法律诉讼。务必确保交易行为符合所有适用的规定,定期审查合规政策,并及时更新以适应法规变化。
- 安全措施: 采取严密的安全措施,保护API密钥和账户凭证的安全,防止被盗用。使用强密码、启用双重验证,并将API密钥存储在安全的环境中。定期审查账户访问权限,并监控账户活动,以便及时发现可疑行为。定期审查和更新交易策略,以适应市场变化。市场环境不断变化,原有的交易策略可能失效。需要定期评估策略的有效性,并根据市场情况进行调整和优化。回测和模拟交易是评估策略性能的重要手段,有助于识别潜在的缺陷和改进空间。
高频交易是一个复杂且具有挑战性的领域,需要深入的知识、精湛的技术以及严格的风险管理。只有做好充分的准备、选择合适的工具、实现关键功能并严格遵守风控规则,持续学习并适应市场变化,才能在这个领域取得长期成功。