引言
随着金融科技的快速发展,数据驱动的交易决策已成为期货交易领域的重要趋势。本文将深入探讨一个结合了Model Content Protocol (MCP)和AI技术的期货交易策略分析应用——Futures MCP。该应用不仅提供了丰富的技术分析工具,还通过MCP协议与大型语言模型(如Claude、DeepSeek)实现了无缝对话式交互,为交易者带来全新的分析体验。代码库目前已经开源在GitHub上,地址:https://github.com/sencloud/futures_mcp
技术架构概览
Futures MCP应用采用了现代化的技术架构,主要包括以下核心组件:
- 数据获取层:基于akshare库实现对期货市场实时和历史数据的获取
- 技术分析层:包含多种常用技术指标的算法实现
- AI分析层:集成DeepSeek API,提供智能化的市场分析
- MCP服务层:实现Model Content Protocol标准,支持与AI助手的对话式交互
- 前端展示层:基于Streamlit构建直观的Web交互界面
核心功能实现
1. 数据获取模块
应用通过akshare库获取期货市场的实时和历史数据。以下是获取实时价格的核心实现:
def get_current_price(symbol):
try:
# 使用内盘期货实时行情接口
df = ak.futures_zh_realtime(symbol=symbol)
if df.empty:
return {"error": f"未找到期货代码 {symbol}"}
return df.iloc[0].to_dict()
except Exception as e:
return {"error": str(e)}
对于历史价格数据,应用首先获取主力合约代码,然后获取相应的历史行情:
def get_prices(symbol, start_date=None, end_date=None):
# ...
# 首先获取主力合约代码
symbol_info = ak.futures_zh_realtime(symbol=symbol)
if symbol_info.empty:
return {"error": f"未找到期货代码 {symbol}"}
main_contract = symbol_info.iloc[0]['symbol']
# 使用期货历史行情接口
df = ak.futures_main_sina(symbol=main_contract, start_date=start_date, end_date=end_date)
# ...
2. 技术分析模块
技术分析模块实现了多种经典技术指标,包括MA、MACD、RSI、布林带和KDJ等。以MACD指标为例:
def calculate_macd(data: pd.DataFrame, fast: int = 12, slow: int = 26, signal: int = 9) -> pd.DataFrame:
"""计算MACD指标"""
df = data.copy()
exp1 = df['close'].ewm(span=fast, adjust=False).mean()
exp2 = df['close'].ewm(span=slow, adjust=False).mean()
df['MACD'] = exp1 - exp2
df['Signal'] = df['MACD'].ewm(span=signal, adjust=False).mean()
df['MACD_Hist'] = df['MACD'] - df['Signal']
return df
应用提供了一个统一的接口来计算所有技术指标:
def calculate_all_indicators(data: pd.DataFrame) -> pd.DataFrame:
"""计算所有技术指标"""
df = data.copy()
df = calculate_ma(df)
df = calculate_macd(df)
df = calculate_rsi(df)
df = calculate_bollinger_bands(df)
df = calculate_kdj(df)
df = calculate_volume_ma(df)
return df
3. AI分析集成
应用使用DeepSeek API提供AI驱动的市场分析。DeepSeekClient类封装了API调用逻辑:
class DeepSeekClient:
"""DeepSeek API客户端"""
def __init__(self):
self.api_key = DEEPSEEK_API_KEY
self.base_url = DEEPSEEK_API_BASE
self.client = OpenAI(
api_key=self.api_key,
base_url=self.base_url
)
async def analyze_futures(self, symbol, data, stream=False):
"""分析期货数据"""
messages = [
{
"role": "system",
"content": "你是一个专业的期货分析师,请根据提供的数据进行分析。"
},
{
"role": "user",
"content": f"请分析{symbol}的以下数据:\n{data}"
}
]
response = await self.chat_completion(messages, stream=stream)
if not stream:
return response.choices[0].message.content
return response
4. MCP服务实现
应用使用FastMCP库实现了Model Content Protocol (MCP)标准,使应用功能可以通过AI助手(如Claude)以对话方式调用:
# 初始化MCP服务器
mcp = FastMCP("futures-mcp")
# 工具定义
@mcp.tool()
async def get_current_price(symbol: str) -> str:
"""获取期货实时价格
Args:
symbol: 期货代码,例如 M2509
"""
# 实现代码...
MCP服务器定义了多个核心工具,包括获取价格、获取技术指标、获取新闻和AI分析,这些工具可以直接在Claude等AI助手中调用。
5. Web界面实现
应用使用Streamlit构建了直观的Web界面,提供行情概览、技术指标、相关新闻和AI分析四个主要标签页:
# 主页面
tab1, tab2, tab3, tab4 = st.tabs(["行情概览", "技术指标", "相关新闻", "AI分析"])
with tab1:
# 行情概览标签页实现...
with tab2:
# 技术指标标签页实现...
with tab3:
# 相关新闻标签页实现...
with tab4:
# AI分析标签页实现...
创新点与技术亮点
1. MCP协议与AI集成
应用最大的创新点之一是采用了Model Content Protocol (MCP)标准,实现了AI助手与期货分析功能的无缝集成。用户可以直接在Claude等AI助手中,通过自然语言对话的方式,获取期货市场的实时数据和分析结果。例如:
- “分析近期豆粕的技术指标”
- “获取白糖的当前价格”
- “给我最近的期货新闻”
这种交互方式极大地提升了用户体验,让专业的期货分析工具变得更加易用和智能。
2. 丰富的技术指标实现
应用实现了多种常用的技术分析指标,包括:
- 移动平均线 (MA)
- MACD指标
- RSI指标
- 布林带
- KDJ指标
- 成交量分析
这些指标的算法实现都经过了优化,能够高效处理大量历史数据。
3. 数据序列化处理
在处理期货数据时,应用采用了自定义的JSON序列化函数,有效解决了日期时间、Pandas对象和NumPy数组等特殊类型的序列化问题:
def json_serial(obj):
"""JSON序列化函数,处理日期/时间和其他特殊类型"""
if isinstance(obj, (datetime, pd.Timestamp)):
return obj.isoformat()
if isinstance(obj, pd.DatetimeIndex):
return obj.astype(str).tolist()
# 其他类型处理...
部署与使用
应用提供了两种使用方式:
1. MCP服务 + AI助手
- 配置Claude Desktop,添加MCP服务器配置
- 在Claude Desktop中使用期货分析工具
2. Streamlit界面
- 启动Streamlit应用:
streamlit run app.py
- 访问浏览器 http://localhost:8501
- 在界面上选择期货品种、时间范围,查看分析结果
结论
Futures MCP应用通过结合现代技术栈、技术分析方法和AI能力,为期货交易者提供了强大而直观的分析工具。特别是通过MCP协议与AI助手的集成,应用开创了一种全新的期货市场分析交互方式,使专业分析工具变得更加智能和易用。
无论是专业交易者还是量化研究人员,都可以通过这个应用获取有价值的市场洞见,辅助交易决策。同时,该项目也为AI在金融领域的应用提供了一个很好的实践案例,展示了如何将大型语言模型与专业金融分析工具有机结合。