基于YOLO的蜡烛图买卖决策
在这篇文章中,我将指导你如何使用YOLO目标识别算法在Binance蜡烛图上实现一个交易模型,从而进行买卖决策

一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | AVAX | FTM | OK
金融预测一直是投资者和AI研究人员都非常感兴趣的研究领域。利用深度学习技术来分析图表提供了一种新的视角,使自主决策购买和出售金融资产成为可能。
在这篇文章中,我将指导你如何使用YOLO目标识别算法在Binance蜡烛图上实现一个交易模型,从而进行买卖决策。我们将从获取蜡烛图数据到预处理、训练模型,再到最终使用C#做出决策,整个过程都会详细讲解。
让我们开始吧!
1、概述
在这个项目中,我们将实现一个基于YOLO(You Only Look Once)目标识别算法的交易决策模型,该模型可以检测蜡烛图上的“买入”和“卖出”模式。这个模型可以通过视觉蜡烛图自主建议何时买入或卖出资产,而不是依赖时间序列分析。
以下是涉及的关键步骤:
- 从Binance获取蜡烛图数据。
- 将数据可视化为图表形式。
- 预处理数据以供YOLO模型推理。
- 在数据上运行YOLO推理。
- 分析结果以做出“买入”或“卖出”的决定。
2、获取Binance蜡烛图数据
我们首先从Binance获取历史数据。下面是改进后的原始代码版本,它包括输入验证、适当的错误处理和数据解析。
获取Binance数据的代码
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class BinanceDataFetcher
{
private static readonly HttpClient client = new HttpClient();
public static async Task<JArray> GetKlines(string symbol, string interval, int limit)
{
if (string.IsNullOrEmpty(symbol) || string.IsNullOrEmpty(interval) || limit <= 0)
{
throw new ArgumentException("提供的参数无效,请检查符号、间隔和限制值。");
}
string url = $"https://api.binance.com/api/v3/klines?symbol={symbol.ToUpper()}&interval={interval}&limit={limit}";
try
{
var response = await client.GetStringAsync(url);
return JArray.Parse(response);
}
catch (HttpRequestException e)
{
Console.WriteLine($"从Binance获取数据时出错:{e.Message}");
throw;
}
}
}
解释:这段代码从Binance获取蜡烛图数据,并将其作为JSON数组返回。它还包括适当的输入验证、错误处理(使用try-catch
),并在必要时抛出异常,使代码更加健壮。
3、使用ScottPlot生成蜡烛图
我们使用ScottPlot将Binance蜡烛图数据可视化为图表。这种可视化有助于我们更清楚地理解模式。
生成蜡烛图的代码
using ScottPlot;
using System.Linq;
using Newtonsoft.Json.Linq;
// 获取数据
var klines = await BinanceDataFetcher.GetKlines("BTCUSDT", "1d", 100);
// 提取OHLC数据(索引:1=开盘价,2=最高价,3=最低价,4=收盘价)
double[] opens = klines.Select(k => k[1].Value<double>()).ToArray();
double[] highs = klines.Select(k => k[2].Value<double>()).ToArray();
double[] lows = klines.Select(k => k[3].Value<double>()).ToArray();
double[] closes = klines.Select(k => k[4].Value<double>()).ToArray();
double[] xs = DataGen.Consecutive(opens.Length);
// 创建新图表
var plt = new Plot(800, 600);
// 添加蜡烛图
plt.AddCandlesticks(xs, opens, highs, lows, closes);
// 将图表保存为图像
plt.SaveFig("btc_usdt_candlestick.png");
解释:我们从Binance数据中提取开盘价、最高价、最低价和收盘价(OHLC),并使用ScottPlot生成蜡烛图。提取的数据被绘制并保存为图像,以便进一步处理。
4、为YOLO预处理图像
下一步是预处理蜡烛图图像,使其能够被YOLO模型用于推理。
图像预处理代码
Tensor<float> PreprocessImage(Image<Rgb24> image)
{
const int targetWidth = 640;
const int targetHeight = 640;
// 调整图像大小
image.Mutate(x => x.Resize(new ResizeOptions
{
Size = new Size(targetWidth, targetHeight),
Mode = ResizeMode.Stretch
}));
var input = new DenseTensor<float>(new[] { 1, 3, targetHeight, targetWidth });
var mean = new[] { 0.485f, 0.456f, 0.406f };
var std = new[] { 0.229f, 0.224f, 0.225f };
image.ProcessPixelRows(accessor =>
{
for (int y = 0; y < targetHeight; y++)
{
var pixelSpan = accessor.GetRowSpan(y);
for (int x = 0; x < targetWidth; x++)
{
input[0, 0, y, x] = (pixelSpan[x].R / 255f - mean[0]) / std[0];
input[0, 1, y, x] = (pixelSpan[x].G / 255f - mean[1]) / std[1];
input[0, 2, y, x] = (pixelSpan[x].B / 255f - mean[2]) / std[2];
}
}
});
return input;
}
解释:图像被调整为所需的尺寸,并用均值和标准差进行归一化处理。这种预处理确保了数据符合YOLO的输入要求。
5、使用ONNX Runtime进行YOLO推理
我们使用ONNX Runtime在预处理的蜡烛图图像上运行YOLO推理。
YOLO推理代码
using System;
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
// 初始化推理会话
using var session = new InferenceSession("best.onnx");
// 运行推理
var inputTensor = PreprocessImage(image);
var inputs = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("input", inputTensor) };
using IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results = session.Run(inputs);
解释:推理会话使用YOLO模型(best.onnx
)初始化。我们使用预处理的图像运行推理并收集结果。using
语句确保资源的正确释放。
6、解析YOLO输出
最后一步是从YOLO模型的输出中解析“买入”或“卖出”信号。
后处理代码
List<Detection> PostprocessOutput(IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results)
{
if (results == null || !results.Any())
{
throw new ArgumentException("来自模型推理的结果无效。");
}
try
{
// 提取输出张量
var output = results.First().AsEnumerable<float>().ToArray();
// 解析检测结果
var detections = ParseDetections(output);
// 应用非极大值抑制(NMS)
var finalDetections = ApplyNms(detections, 0.5f, 0.45f);
return finalDetections;
}
finally
{
// 释放结果
foreach (var result in results)
{
result.Dispose();
}
}
}
解释:此代码解析YOLO模型的输出,提取潜在的“买入”和“卖出”信号,并应用非极大值抑制(NMS)以去除冗余检测。适当的资源释放确保没有内存泄漏。
7、结束语
我们已经成功实现了一个模型,该模型利用YOLO算法根据蜡烛图分析预测“买入”和“卖出”信号。我们使用Binance获取数据,使用ScottPlot进行可视化,并使用ONNX Runtime运行YOLO模型的推理。
这个模型可以扩展和优化,以支持更全面的交易策略,例如结合其他技术指标或将实时分析集成。通过深度学习技术,我们可以创建更直观、视觉化和有效的交易决策工具。
原文链接:Implementing YOLO-Based Buy-Sell Decision Model on Binance Candlestick Charts with C#
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。