最近,数字货币市场的剧烈波动让许多投资者措手不及。我也不例外,一些仓位已经失手,盯盘变得异常疲惫。然而,我始终没有放弃通过量化交易来辅助决策的想法。随着大模型技术的日益成熟,我决定开发一个智能交易助手,帮助我在繁忙的市场中更好地把握机会。
本文将分享这个项目的实现过程,包括如何利用Python和阿里云的大规模语言模型(LLM)Qwen 2.5 vl来构建一个功能强大的数字货币行情助手。希望这篇文章能为同样在数字货币市场中挣扎的朋友们提供一些启发和帮助。

项目背景与目标
市场现状
数字货币市场以其高波动性和复杂性著称。传统的手动交易方式不仅耗时费力,而且容易受到情绪影响,导致决策失误。为了应对这些问题,我希望能够开发一个自动化工具,能够实时获取市场数据、计算技术指标,并根据这些信息生成交易建议。
目标
- 实时获取K线数据
从币安交易所获取最新的K线数据。 - 计算技术指标
包括移动平均线(MA)、指数平滑异同移动平均线(MACD)和相对强弱指数(RSI)等。 - 生成图表
使用Plotly创建交互式图表,直观展示市场走势和技术指标。 - 上传图片到OSS
将生成的图表保存为图片并上传到阿里云OSS,以便后续分析。 - 智能分析
利用阿里云的大规模语言模型Qwen进行图像分析,提供专业的投资建议。
实现过程
1. 环境搭建
首先,我们需要安装必要的库和配置环境变量。以下是主要依赖项:
pip install requests pandas plotly kaleido oss2 aliyun-python-sdk-core openai streamlit
同时,确保配置了以下环境变量:
BINANCE_API_KEY
BINANCE_API_SECRET
OSS_ACCESS_KEY_ID
OSS_ACCESS_KEY_SECRET
OSS_ENDPOINT
OSS_BUCKET_NAME
QWEN_API_KEY
2. 创建通用函数文件 utils.py
为了保持代码的整洁和可维护性,我们将所有通用函数放在一个单独的文件 utils.py
中。这些函数包括但不限于:
- API请求
:如 create_requests_session
,send_signed_request
等。 - 技术指标计算
:如 calculate_ma
,calculate_macd
,calculate_rsi
等。 - 图表生成
:如 create_technical_chart
。 - 图片上传
:如 upload_image_to_oss
。 - 智能分析
:如 analyze_with_qwen2_5vl
。
3. 构建主界面 25_炒币神器.py
接下来,我们使用Streamlit构建用户界面。主界面分为两个部分:左侧用于配置参数和显示图表,右侧用于显示持仓信息和操作按钮。
主要功能模块
- K线图显示
:通过 display_kline
函数获取并显示选定交易对的K线图。 - 技术指标选择
:用户可以选择是否显示MA、MACD和RSI等技术指标。 - 图表保存
:点击“保存为图片”按钮后,调用 save_chart_as_image
函数将当前图表保存为图片,并上传到OSS。 - 智能分析
:点击“使用Qwen2.5VL分析”按钮后,调用 analyze_with_qwen2_5vl
函数,传入图片URL,获取并显示分析结果。
4. 流程图
为了更清晰地展示整个项目的流程,我们绘制了一个简单的流程图。以下是SVG格式的流程图:

核心模块技术实现详解
1. 数据获取和处理模块
从代码实现来看,数据获取主要通过币安API完成。utils.py
中的get_kline_data
函数是核心:
def get_kline_data(symbol, interval="1h", limit=24):
url = f"https://api.binance.com/api/v3/klines"
params = {
"symbol": symbol,
"interval": interval,
"limit": limit
}
session = create_requests_session()
# ...处理请求逻辑
值得注意的是,系统使用了请求重试机制以提高稳定性:
retry_strategy = Retry(
total=3, # 最大重试次数
backoff_factor=1, # 重试间隔
status_forcelist=[429, 500, 502, 503, 504], # 需要重试的HTTP状态码
)
这确保了在网络不稳定情况下API请求的可靠性,对于实时交易系统至关重要。
2. 技术指标计算详解
系统实现了三种主要技术指标:
MA均线计算
def calculate_ma(df, periods):
result = df.copy()
for period in periods:
result[f'MA{period}'] = result['close'].rolling(window=period).mean()
return result
MA均线通过pandas的rolling
函数高效计算,支持多周期配置。
MACD指标计算
def calculate_macd(df, fast_period=12, slow_period=26, signal_period=9):
result = df.copy()
# 计算快线和慢线EMA
result[f'EMA{fast_period}']= result['close'].ewm(span=fast_period, adjust=False).mean()
result[f'EMA{slow_period}']= result['close'].ewm(span=slow_period, adjust=False).mean()
# 计算MACD线和信号线
result['MACD']= result[f'EMA{fast_period}']- result[f'EMA{slow_period}']
result['Signal']= result['MACD'].ewm(span=signal_period, adjust=False).mean()
# 计算MACD柱状图
result['Histogram']= result['MACD']- result['Signal']
MACD计算使用了指数移动平均(EMA),而非简单移动平均,这使得指标对最近价格变化更敏感。
RSI指标计算
def calculate_rsi(df, period=14):
result = df.copy()
# 计算价格变化
delta = result['close'].diff()
# 分离上涨和下跌
gain = delta.where(delta >0,0)
loss =-delta.where(delta <0,0)
# 计算平均上涨和下跌
avg_gain = gain.rolling(window=period).mean()
avg_loss = loss.rolling(window=period).mean()
# 计算RS和RSI
rs = avg_gain / avg_loss
result['RSI']=100-(100/(1+ rs))
RSI计算遵循标准公式,通过比较上涨和下跌的相对强度来衡量市场超买超卖情况。
3. 可视化技术实现
系统使用Plotly构建复杂的多层图表:
def create_technical_chart(df, symbol, interval, show_ma, show_macd, show_rsi, ma_periods, macd_fast, macd_slow, macd_signal, rsi_period, img_width, img_height):
# 计算需要的子图数量
rows =1# K线图
rows +=1# 成交量
if show_macd:
rows +=1
if show_rsi:
rows +=1
# 设置子图高度比例
row_heights =[0.5]# K线图占50%
row_heights.extend([0.5/(rows-1)]*(rows-1))# 其他指标平分剩余50%
图表创建的核心在于:
-
动态决定子图数量和比例 -
使用共享X轴确保时间对齐 -
为不同指标设置合适的样式和颜色
4. 多模态AI分析技术
系统集成了阿里云的Qwen2.5VL模型进行图表智能分析:
def analyze_with_qwen2_5vl(image_path, symbol, interval):
# 使用阿里云的OpenAI客户端进行调用
client = OpenAI(
api_key=os.getenv("QWEN_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 构造消息内容
messages =[
{
"role":"user",
"content":[
{"type":"text","text":f"用中文回答,分析以下{symbol} {interval} 指标图,并给出具体的趋势和投资建议: "},
{"type":"image_url","image_url": image_path},
]
}
]
这种多模态分析将视觉理解和自然语言处理结合起来,能够:
-
识别图表中的形态和模式 -
理解技术指标之间的关系 -
生成符合市场专业术语的分析文本 -
提供基于当前市场状况的投资建议
5. OSS存储与分享机制
系统使用阿里云OSS存储和分享图表:
def upload_image_to_oss(file_path, bucket_name, object_name):
# 配置OSS客户端
auth = oss2.Auth(os.getenv('OSS_ACCESS_KEY_ID'), os.getenv('OSS_ACCESS_KEY_SECRET'))
bucket = oss2.Bucket(auth, os.getenv('OSS_ENDPOINT'), bucket_name)
# 上传文件
bucket.put_object_from_file(object_name, file_path)
# 返回文件的URL
return f"http://{bucket_name}.{os.getenv('OSS_ENDPOINT')}/{object_name}"
这种存储机制实现了:
-
持久化存储技术分析图表 -
生成可访问的URL用于分享或AI模型分析 -
高效管理图片数据避免本地存储限制
系统架构与技术栈
从代码实现来看,整个系统采用了以下技术栈:
- 前端
:Streamlit创建交互式界面 - 数据处理
:Pandas和NumPy进行数据分析和计算 - 可视化
:Plotly构建专业图表 - API交互
:Requests库与币安API通信 - 图像处理
:Kaleido将Plotly图表导出为静态图像 - 云存储
:阿里云OSS存储图像数据 - AI分析
:通过OpenAI客户端集成Qwen2.5VL多模态大模型
这种架构设计的优势在于:
- 模块化设计
:各功能模块高度解耦,便于维护和扩展 - 云原生思想
:利用云服务减少本地依赖 - 前后端分离
:UI与业务逻辑清晰分离 - API优先
:通过标准化API接口实现数据交互
通过这种技术实现,该项目实现了从数据获取、技术分析到AI辅助决策的完整闭环,为加密货币交易提供了强大的技术支持。
运行与测试
完成代码编写后,可以通过以下命令启动应用:
streamlit run 25_炒币神器.py
打开浏览器访问 http://localhost:8501
即可看到完整的用户界面。通过不断调整参数和优化代码,最终实现了预期的功能。
通过这个项目,我成功构建了一个功能强大的数字货币行情助手,还学会了如何结合现代技术和工具来解决实际问题。未来,我将继续优化这个工具,增加更多功能,如自动交易、风险控制等,以期在复杂的市场环境中获得更好的收益。



加加笔记
微信号:jiajiabiji