最近,数字货币市场的剧烈波动让许多投资者措手不及。我也不例外,一些仓位已经失手,盯盘变得异常疲惫。然而,我始终没有放弃通过量化交易来辅助决策的想法。随着大模型技术的日益成熟,我决定开发一个智能交易助手,帮助我在繁忙的市场中更好地把握机会。
本文将分享这个项目的实现过程,包括如何利用Python和阿里云的大规模语言模型(LLM)Qwen 2.5 vl来构建一个功能强大的数字货币行情助手。希望这篇文章能为同样在数字货币市场中挣扎的朋友们提供一些启发和帮助。
数字货币市场以其高波动性和复杂性著称。传统的手动交易方式不仅耗时费力,而且容易受到情绪影响,导致决策失误。为了应对这些问题,我希望能够开发一个自动化工具,能够实时获取市场数据、计算技术指标,并根据这些信息生成交易建议。
首先,我们需要安装必要的库和配置环境变量。以下是主要依赖项:
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_KEYutils.py为了保持代码的整洁和可维护性,我们将所有通用函数放在一个单独的文件utils.py中。这些函数包括但不限于:
create_requests_session,send_signed_request等。calculate_ma,calculate_macd,calculate_rsi等。create_technical_chart。upload_image_to_oss。analyze_with_qwen2_5vl。25_炒币神器.py接下来,我们使用Streamlit构建用户界面。主界面分为两个部分:左侧用于配置参数和显示图表,右侧用于显示持仓信息和操作按钮。
display_kline函数获取并显示选定交易对的K线图。save_chart_as_image函数将当前图表保存为图片,并上传到OSS。analyze_with_qwen2_5vl函数,传入图片URL,获取并显示分析结果。为了更清晰地展示整个项目的流程,我们绘制了一个简单的流程图。以下是SVG格式的流程图:
从代码实现来看,数据获取主要通过币安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请求的可靠性,对于实时交易系统至关重要。
系统实现了三种主要技术指标:
defcalculate_ma(df,periods):
result=df.copy()
forperiodinperiods:
result[f'MA{period}']=result['close'].rolling(window=period).mean()
returnresult
MA均线通过pandas的rolling函数高效计算,支持多周期配置。
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),而非简单移动平均,这使得指标对最近价格变化更敏感。
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计算遵循标准公式,通过比较上涨和下跌的相对强度来衡量市场超买超卖情况。
系统使用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%
图表创建的核心在于:
系统集成了阿里云的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},
]
}
]
这种多模态分析将视觉理解和自然语言处理结合起来,能够:
系统使用阿里云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}"
这种存储机制实现了:
从代码实现来看,整个系统采用了以下技术栈:
这种架构设计的优势在于:
通过这种技术实现,该项目实现了从数据获取、技术分析到AI辅助决策的完整闭环,为加密货币交易提供了强大的技术支持。
完成代码编写后,可以通过以下命令启动应用:
streamlit run 25_炒币神器.py
打开浏览器访问http://localhost:8501即可看到完整的用户界面。通过不断调整参数和优化代码,最终实现了预期的功能。
通过这个项目,我成功构建了一个功能强大的数字货币行情助手,还学会了如何结合现代技术和工具来解决实际问题。未来,我将继续优化这个工具,增加更多功能,如自动交易、风险控制等,以期在复杂的市场环境中获得更好的收益。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |