forked from tslab-hub/handlers
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLastTradeStatisticsHandler.cs
More file actions
61 lines (55 loc) · 3.59 KB
/
LastTradeStatisticsHandler.cs
File metadata and controls
61 lines (55 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.ComponentModel;
using TSLab.DataSource;
using TSLab.Script.Handlers.Options;
namespace TSLab.Script.Handlers
{
// TODO: английское описание
[HandlerCategory(HandlerCategories.ClusterAnalysis)]
[HelperName("Last Trade Statistics", Language = Constants.En)]
[HelperName("Последняя торговая статистика", Language = Constants.Ru)]
[InputsCount(1)]
[Input(0, TemplateTypes.SECURITY, Name = Constants.SecuritySource)]
[OutputsCount(1)]
[OutputType(TemplateTypes.TRADE_STATISTICS)]
[Description("Блок 'Последняя торговая статистика' создает гистограмму за указанный временной интервал.")]
[HelperDescription("", Constants.En)]
public sealed class LastTradeStatisticsHandler : BaseTradeStatisticsHandler<ITradeStatisticsWithKind>, ITradeStatisticsHandler
{
[HandlerParameter(true, nameof(TimeFrameKind.FromMidnightToNow))]
public TimeFrameKind TimeFrameKind { get; set; }
/// <summary>
/// \~english Timeframe (integer value in units of parameter 'Timeframe units')
/// \~russian Интервал (целое число в единицах параметра 'База интервала')
/// </summary>
[HelperName("Timeframe", Constants.En)]
[HelperName("Интервал", Constants.Ru)]
[Description("Интервал (целое число в единицах параметра 'База интервала')")]
[HelperDescription("Timeframe (integer value in units of parameter 'Timeframe units')", Constants.En)]
[HandlerParameter(true, "1", Min = "1", Max = "365", Step = "1", EditorMin = "1")]
public int TimeFrame { get; set; }
/// <summary>
/// \~english Timeframe units (second, minute, hour, day)
/// \~russian База интервала (секунды, минуты, часы, дни)
/// </summary>
[HelperName("Timeframe units", Constants.En)]
[HelperName("База интервала", Constants.Ru)]
[Description("База интервала (секунды, минуты, часы, дни)")]
[HelperDescription("Timeframe units (second, minute, hour, day)", Constants.En)]
[HandlerParameter(true, nameof(TimeFrameUnit.Hour))]
public TimeFrameUnit TimeFrameUnit { get; set; }
[HandlerParameter(true, "0", Min = "0", Max = "365", Step = "1", EditorMin = "0")]
public int TimeFrameShift { get; set; }
[HandlerParameter(true, nameof(TimeFrameUnit.Hour))]
public TimeFrameUnit TimeFrameShiftUnit { get; set; }
public override ITradeStatisticsWithKind Execute(ISecurity security)
{
var timeFrame = TimeFrameFactory.Create(TimeFrame, TimeFrameUnit);
var timeFrameShift = TimeFrameFactory.Create(TimeFrameShift, TimeFrameShiftUnit);
var runTime = Context.Runtime;
var id = runTime != null ? string.Join(".", runTime.TradeName, runTime.IsAgentMode, VariableId) : VariableId;
var stateId = string.Join(".", security.Symbol, security.Interval, security.IsAligned, CombinePricesCount, TimeFrameKind, TimeFrame, TimeFrameUnit, TimeFrameShift, TimeFrameShiftUnit);
var tradeStatistics = Context.GetTradeStatistics(stateId, () => new LastTradeStatistics(id, stateId, GetTradeHistogramsCache(security), TimeFrameKind, timeFrame, TimeFrameUnit, timeFrameShift, TimeFrameShiftUnit));
return new TradeStatisticsWithKind(tradeStatistics, Kind, WidthPercent);
}
}
}