日内成交量
Intraday Volume 脚本用于分析单个交易时段内交易品种成交量的逐小时分布。该脚本面向使用 StockSharp 平台的交易者和量化分析人员,可帮助他们深入研究市场行为并优化交易策略。

功能描述
脚本收集所选时间段内的交易数据,并以图表形式显示,使用户能够直观看到每小时成交量的变化,由此判断一天中哪些时段的交易活动较强或较弱。
实际意义
- 交易方面:了解高峰和低谷时段有助于确定市场最活跃的时间,从而为入场和出场决策提供依据。
- 量化分析方面:量化分析人员可以利用日内成交量数据建立数学模型和算法,根据成交量指标预测市场行为。
每小时分布
逐小时成交量分布可以揭示市场动态,并突出主要交易活动集中的时间区间。这些信息可能反映趋势变化、支撑位和阻力位,以及流动性可能增加或不足的时点。
数据应用
Intraday Volume 脚本可以集成到更完整的市场分析系统中,提供可用于以下方面的数据:
- 策略调整:根据市场活跃程度调整交易算法的参数。
- 风险评估:根据一天中的不同时间计算价格大幅波动的概率。
在 StockSharp 交易平台中使用 Intraday Volume 脚本,交易者和分析人员可以依据具体的市场活跃度数据作出决策,并调整策略,使其更好地适应当前交易环境。
C# 脚本代码
namespace StockSharp.Algo.Analytics
{
/// <summary>
/// 按小时计算最大成交量分布的分析脚本。
/// </summary>
public class TimeVolumeScript : IAnalyticsScript
{
Task IAnalyticsScript.Run(ILogReceiver logs, IAnalyticsPanel panel, SecurityId[] securities, DateTime from, DateTime to, IStorageRegistry storage, IMarketDataDrive drive, StorageFormats format, DataType dataType, CancellationToken cancellationToken)
{
if (securities.Length == 0)
{
logs.LogWarning("No instruments.");
return Task.CompletedTask;
}
// 脚本只能处理 1 个工具
var security = securities.First();
// 获取 K线存储
var candleStorage = storage.GetCandleMessageStorage(security, dataType, drive, format);
// 获取指定期间内的可用日期
var dates = candleStorage.GetDates(from, to).ToArray();
if (dates.Length == 0)
{
logs.LogWarning("no data");
return Task.CompletedTask;
}
// 按开盘时间对 K线分组(仅时间部分,截断到 1 小时)
var rows = candleStorage.Load(from, to)
.GroupBy(c => c.OpenTime.TimeOfDay.Truncate(TimeSpan.FromHours(1)))
.ToDictionary(g => g.Key, g => g.Sum(c => c.TotalVolume));
// 将计算结果放入表格
var grid = panel.CreateGrid("Time", "Volume");
foreach (var row in rows)
grid.SetRow(row.Key, row.Value);
// 按成交量列降序排序
grid.SetSort("Volume", false);
return Task.CompletedTask;
}
}
}
Python 脚本代码
import clr
# 添加 .NET 引用
clr.AddReference("StockSharp.Algo.Analytics")
clr.AddReference("StockSharp.Messages")
clr.AddReference("Ecng.Drawing")
from Ecng.Drawing import DrawStyles
from System import TimeSpan
from System.Threading.Tasks import Task
from StockSharp.Algo.Analytics import IAnalyticsScript
from storage_extensions import *
from candle_extensions import *
from chart_extensions import *
from indicator_extensions import *
# 按小时计算最大成交量分布的分析脚本。
class time_volume_script(IAnalyticsScript):
def Run(
self,
logs,
panel,
securities,
from_date,
to_date,
storage,
drive,
format,
data_type,
cancellation_token
):
# 检查是否 没有交易品种
if not securities:
logs.LogWarning("No instruments.")
return Task.CompletedTask
# 脚本只能处理 1 个工具
security = securities[0]
if data_type is None:
logs.LogWarning(f"不支持的数据类型 {data_type}。")
return Task.CompletedTask
message_type = data_type.MessageType
# 获取K线存储
candle_storage = get_candle_storage(storage, security, data_type, drive, format)
# 获取指定期间内的可用日期
dates = get_dates(candle_storage, from_date, to_date)
if len(dates) == 0:
logs.LogWarning("no data")
return Task.CompletedTask
# 按开盘时间对 K线分组(按小时截断)并汇总成交量
candles = load_range(candle_storage, message_type, from_date, to_date)
rows = {}
for candle in candles:
time_of_day = candle.OpenTime.TimeOfDay
truncated = TimeSpan.FromHours(int(time_of_day.TotalHours))
rows[truncated] = rows.get(truncated, 0) + candle.TotalVolume
# 将计算结果放入表格
grid = panel.CreateGrid("Time", "Volume")
for key, value in rows.items():
grid.SetRow(key, value)
# 按 Volume 列降序排序
grid.SetSort("Volume", False)
return Task.CompletedTask