Провайдеры типа F#
Я хочу создать последовательность "свечей" (простая структура) для тестирования финансовых данных. Я скачал некоторые финансовые данные от брокера, и они в формате CSV.
У меня есть следующий код, используя тип провайдеров:
type DukasCandles = CsvProvider<"C:\Users\**\Documents\Visual Studio 2017\Projects\FI\FI\Data\schema.csv" >
let row2Candle (myTicker: string ) (mySide: Side) (aRow:DukasCandles.Row) : Candle =
{Open = aRow.Open ;
Close = aRow.Close;
Low = aRow.Low
High = aRow.High
StartTime = aRow.LocalTime
Volume = aRow.Volume
Ticker = myTicker
Side = mySide }
let sortedCandles aTicker aParsedFile =
aParsedFile
|> Seq.map ( row2Candle aTicker Side.Bid )
|> Seq.sortBy ( fun candle -> candle.StartTime)
let fileContent = inputFile |> DukasCandles.Load
let rows = fileContent.Rows
let dataContent = rows|> (sortedCandles "EUR_USD")
Это просто игрушечный пример для проверки моего понимания поставщиков типов. У меня это есть в скрипте FSX после необходимого шаблона для объявления имени файла и открытия необходимых модулей.
Теперь вопрос: если я выделю это как есть и попробую выполнить в F# интерактив, то наберу
dataContent;;
Я получаю следующее сообщение
val it : seq<Candle> =
Error: Couldn't parse row 1057 according to schema: Expecting DateTime in LocalTime, got 13.01.2016 00:00:00.000
Странно следующее: предположим, я набираю следующий код в F# интерактив:
fileContent;;
получить ответ и затем обратиться к нему через ключевое слово it, как в:
it.Rows |> sortedCandles "EUR_USD";;
Затем код выполняется без проблем.
Почему у нас такое противоречивое поведение? Любая идея? Любая помощь высоко ценится. Спасибо.