Я пишу программу, чтобы попытаться извлечь выгоду из набора временных серий идей биржевой торговли.Они находятся в массиве объектов quotedTrade ниже (с помощью JSONSerializer для извлечения данных с диска), отсортированных по полю даты startOn:
[<DataContract>]
type trade = {
[<field: DataMember(Name="tradeId") >]
tradeId : int ;
[<field: DataMember(Name="analystId") >]
analystId: int
[<field: DataMember(Name="startOn") >]
startOn : System.DateTime ;
[<field: DataMember(Name="endOn") >]
endOn : System.DateTime option ;
[<field: DataMember(Name="tradeType") >]
tradeType : string ;
[<field: DataMember(Name="securityId") >]
securityId : int ;
[<field: DataMember(Name="ricCode") >]
ricCode : string ;
[<field: DataMember(Name="yahooSymbol") >]
yahooSymbol : string ;
[<field: DataMember(Name="initialPrice") >]
initialPrice : float ;
}
[<DataContract>]
type quotedTrade = {
[<field: DataMember(Name="trade") >]
trade : trade ;
[<field: DataMember(Name="q7") >]
q7: float
[<field: DataMember(Name="q14") >]
q14: float
[<field: DataMember(Name="q21") >]
q21: float
}
Я бы хотел
, возможно, представив записи:
type byAnalyst = {
analystId: int
trades: quotedTrade array
}
type byTicker = {
symbol: string
trades: quotedTrade array
}
и затем отфильтруйте их как-нибудь (sliceByAnalyst, sliceByTicker, которые будут предоставлены позже - хотя sugegstionsна чистом решении будет признателен, я рассматриваю использование функций Array.Map, Array.Filter)
let quotedTrades : quotedTrade array = getTradesFromDisk()
let tradesByAnalyst : byAnalyst array = sliceByAnalyst quotedTrades
let tradesByTicker : byTicker array = sliceByTicker quotedTrades
Основной вопрос вокруг применения скользящего окна:
// iterate over each analyst
for tradeByAnalyst in tradesByAnalyst do
// look at trades on a per analyst basis
let mySeries : quotedTrade array= tradeByAnalyst.trades
// each window is an array of trades that occured in a seven day period
let sevenDayWindowsByAnalyst : quotedTrade array = sliceByDays 7 mySeries
// I want to evaluate the seven day window, per this analsyt independently
for sevenDayWindowByAnalyst in sevenDayWindowsByAnalyst do
let someResult = doSomethingWithTradesInWindow sevenDayWindowByAnalyst
Суть в том, что у меня есть набор данных на аналитика, где одна сделка в день 0 представлена как: T0, а одна сделка в день 1: T1;Мой оригинальный набор содержит 3 сделки в день 0 и отдельные сделки на 1, 3, 5, 8, 10 периордах после:
[ T0 T0 T0 T1 T3 T5 T8 T10 ]
возвращает
[
[ T0 T0 T0 T1 T3 T5 ] // incudes T0 -> T6
[ T1 T3 T5 ] // incudes T1 -> T7
[ T3 T5 T8 ] // incudes T2 -> T8
[ T3 T5 T8 ] // incudes T3 -> T9
[ T5 T8 T10 ] // incudes T4 -> T10
[ T5 T8 T10 ] // incudes T5 -> T11
[ T8 T10 ] // incudes T6 -> T12
[ T8 T10 ] // incudes T7 -> T13
[ T8 T10 ] // incudes T8 -> T14
[ T10 ] // incudes T9 -> T15
[ T10 ] // incudes T10 -> T16
]
Любые идеи поЛучший способ достичь этого был бы очень признателен.