|
最近,数字货币市场的剧烈波动让许多投资者措手不及。我也不例外,一些仓位已经失手,盯盘变得异常疲惫。然而,我始终没有放弃通过量化交易来辅助决策的想法。随着大模型技术的日益成熟,我决定开发一个智能交易助手,帮助我在繁忙的市场中更好地把握机会。 本文将分享这个项目的实现过程,包括如何利用Python和阿里云的大规模语言模型(LLM)Qwen 2.5 vl来构建一个功能强大的数字货币行情助手。希望这篇文章能为同样在数字货币市场中挣扎的朋友们提供一些启发和帮助。
项目背景与目标市场现状数字货币市场以其高波动性和复杂性著称。传统的手动交易方式不仅耗时费力,而且容易受到情绪影响,导致决策失误。为了应对这些问题,我希望能够开发一个自动化工具,能够实时获取市场数据、计算技术指标,并根据这些信息生成交易建议。 目标- 实时获取K线数据
- 计算技术指标包括移动平均线(MA)、指数平滑异同移动平均线(MACD)和相对强弱指数(RSI)等。
- 生成图表使用Plotly创建交互式图表,直观展示市场走势和技术指标。
- 上传图片到OSS将生成的图表保存为图片并上传到阿里云OSS,以便后续分析。
- 智能分析利用阿里云的大规模语言模型Qwen进行图像分析,提供专业的投资建议。
实现过程1. 环境搭建首先,我们需要安装必要的库和配置环境变量。以下是主要依赖项: pipinstallrequests pandas plotly kaleido oss2 aliyun-python-sdk-core openai streamlit
同时,确保配置了以下环境变量: BINANCE_API_KEYBINANCE_API_SECRETOSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRETOSS_ENDPOINTOSS_BUCKET_NAMEQWEN_API_KEY
2. 创建通用函数文件utils.py为了保持代码的整洁和可维护性,我们将所有通用函数放在一个单独的文件utils.py中。这些函数包括但不限于: - API请求:如
create_requests_session,send_signed_request等。 - 技术指标计算:如
calculate_ma,calculate_macd,calculate_rsi等。 - 图表生成:如
create_technical_chart。 - 图片上传
- 智能分析:如
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函数是核心: defget_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均线计算defcalculate_ma(df,periods): result=df.copy() forperiodinperiods: result[f'MA{period}']=result['close'].rolling(window=period).mean() returnresult
MA均线通过pandas的rolling函数高效计算,支持多周期配置。 MACD指标计算defcalculate_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指标计算defcalculate_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构建复杂的多层图表: defcreate_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# 成交量 ifshow_macd: rows+=1 ifshow_rsi: rows+=1 # 设置子图高度比例 row_heights=[0.5]# K线图占50% row_heights.extend([0.5/(rows-1)]*(rows-1))# 其他指标平分剩余50%
图表创建的核心在于:
4. 多模态AI分析技术系统集成了阿里云的Qwen2.5VL模型进行图表智能分析: defanalyze_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存储和分享图表: defupload_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 returnf"http://{bucket_name}.{os.getenv('OSS_ENDPOINT')}/{object_name}"
这种存储机制实现了:
系统架构与技术栈从代码实现来看,整个系统采用了以下技术栈: - 前端
- 数据处理
- 可视化
- API交互
- 图像处理
- 云存储
- AI分析:通过OpenAI客户端集成Qwen2.5VL多模态大模型
这种架构设计的优势在于: - 模块化设计
- 云原生思想
- 前后端分离
- API优先
通过这种技术实现,该项目实现了从数据获取、技术分析到AI辅助决策的完整闭环,为加密货币交易提供了强大的技术支持。 运行与测试完成代码编写后,可以通过以下命令启动应用: streamlit run 25_炒币神器.py
打开浏览器访问http://localhost:8501即可看到完整的用户界面。通过不断调整参数和优化代码,最终实现了预期的功能。 通过这个项目,我成功构建了一个功能强大的数字货币行情助手,还学会了如何结合现代技术和工具来解决实际问题。未来,我将继续优化这个工具,增加更多功能,如自动交易、风险控制等,以期在复杂的市场环境中获得更好的收益。 |