我想制作一系列蜡烛' (一种简单的结构)用于对财务数据进行测试。我从经纪商处下载了一些财务数据,它们采用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#interactive中执行,则输入
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#interactive中输入以下代码:
fileContent;;
得到答案,然后通过&#39; it&#39;来引用它。关键字,如:
it.Rows |> sortedCandles "EUR_USD";;
然后执行代码没有问题。
为什么我们会出现这种不一致的行为?任何的想法? 任何帮助高度赞赏。谢谢。