将逐笔成交和价差压缩为K线

简介

API 提供了将逐笔成交数据和价差(最佳买价/卖价)压缩为K线的强大工具。此功能尤其适合分析历史数据和构建自定义指标。

数据压缩的主要扩展方法位于 CandleHelper 类中。该类的完整源代码可在 GitHub 查看

建议阅读此文件,以全面了解所有可用方法及其参数。

压缩方法

将逐笔成交压缩为K线

// ToCandles 用于 tick 的示例
var tickStorage = storageRegistry.GetTickMessageStorage(securityId, Drive, StorageFormat);
var trades = tickStorage.LoadAsync(from, to);
var candles = trades.ToCandles(mdMsg, candleBuilderProvider: candleBuilderProvider);

// 此代码从存储加载 tick 数据并将其转换为 K线。
// mdMsg - 包含待创建K线参数(类型、时间周期等)的消息。
// candleBuilderProvider — 提供具体 K线构建器实现的提供者。

将价差数据压缩为K线

// ToCandles 用于价差数据的示例
var depthStorage = storageRegistry.GetQuoteMessageStorage(securityId, Drive, StorageFormat);
var depths = depthStorage.LoadAsync(from, to);
var candles = depths.ToCandles(mdMsg, Level1Fields.SpreadMiddle, candleBuilderProvider: candleBuilderProvider);

// 这里加载价差数据并将其转换为 K线。
// Level1Fields.SpreadMiddle 表示使用价差中间价构建 K线。
// 也可以分别使用 Level1Fields.BestBid 或 Level1Fields.BestAsk 表示最佳 bid 或 ask 价格。

压缩参数

压缩数据时可以指定以下参数:

  • series:定义所创建K线类型和参数的K线序列。
  • type:用于形成K线的数据类型,例如最佳买价、最佳卖价或价差中间价。
  • candleBuilderProvider:K线构建器提供程序(可选参数)。

使用示例

private IEnumerable<CandleMessage> InternalGetCandles(SecurityId securityId, DateTime? from, DateTime? to)
{
	// ... (initialization code)

	switch (type)
	{
		case BuildTypes.Ticks:
			return StorageRegistry
					.GetTickMessageStorage(securityId, Drive, StorageFormat)
					.LoadAsync(from, to)
					.ToCandles(mdMsg, candleBuilderProvider: candleBuilderProvider);

		case BuildTypes.OrderLog:
			// ...(从订单日志构建 K 线的代码)

		case BuildTypes.Depths:
			return StorageRegistry
					.GetQuoteMessageStorage(securityId, Drive, StorageFormat)
					.LoadAsync(from, to)
					.ToCandles(mdMsg, Convert(extraType), candleBuilderProvider: candleBuilderProvider);

		// ... (other cases)
	}
}

// 此方法演示根据源数据类型构建 K线的不同方式。
// 支持从 tick、订单日志、价差和其他来源构建。

其他功能

使用不同数据源构建K线

API 不仅可以使用逐笔成交和价差构建K线,还支持其他数据源:

// 从不同来源构建 K线的示例
switch (type)
{
	case BuildTypes.Ticks:
		// ... (code for ticks)

	case BuildTypes.OrderLog:
		// ... (code for order log)

	case BuildTypes.Depths:
		// ... (code for spreads)

	case BuildTypes.Level1:
		// ... (code for Level1)

	case BuildTypes.SmallerTimeFrame:
		return candleBuilderProvider
				.GetCandleMessageBuildableStorage(StorageRegistry, securityId, mdMsg.GetTimeFrame(), Drive, StorageFormat)
				.LoadAsync(from, to);

	// ... (other cases)
}

// 此代码展示如何从不同数据源构建 K线:tick、订单日志、价差、Level1 数据,甚至更小周期的 K线。

结论

API 中的数据压缩方法为处理市场数据提供了灵活工具,可以高效地将逐笔成交和价差数据转换为不同类型、不同时间周期的K线。这对市场分析和交易策略开发尤其有用。