0

過去の財務データをプロットするために、次のスクリプトを作成しました。

open FSharp.Data
#load "C:\Users\Nick\Documents\Visual Studio 2013\Projects\TryFsharp\packages\FSharp.Charting.0.90.9\FSharp.Charting.fsx"
open FSharp.Charting
open System

let plotprice nasdaqcode =
    let url = "http://ichart.finance.yahoo.com/table.csv?s="+nasdaqcode
    let company = CsvFile.Load(url)
    let companyPrices = [ for r in company.Rows -> r.GetColumn "Date", r.GetColumn "Close" ]
    (companyPrices 
        |> List.sort 
        |> Chart.Line).WithTitle(nasdaqcode, InsideArea=false)

plotprice "MSFT"
plotprice "ORCL"
plotprice "GOOG"
plotprice "NTES"

これはうまくいきます。

質問:

  1. 一部のデータは 1986 年から始まり、一部は 2000 年から始まります。2000 年から 2015 年までのデータをプロットしたいと思います。この期間を選択するにはどうすればよいですか?

  2. マウスをチャートの上に置いたときに時間を表示することはできますか?

4

2 に答える 2

3

Yahoo データにアクセスしている場合は、F# データから使用するCsvProviderよりも、を使用することをお勧めします。タイプ プロバイダーのCsvFile詳細については、こちらを参照してください。残念ながら、標準の F# データ ライブラリと TryFSharp.org での命名は異なるため、少し混乱します。

CSV タイプ プロバイダーは、タイプを自動的に推測します。

open FSharp.Data
open FSharp.Charting
open System

// Generate type based on a sample
type Stocks = CsvProvider<"http://ichart.finance.yahoo.com/table.csv?s=FB">

let plotprice nasdaqcode =
    let url = "http://ichart.finance.yahoo.com/table.csv?s=" + nasdaqcode
    let company = Stocks.Load(url)
    // Now you can access the columns in a statically-typed way
    // and the types of the columns are inferred from the sample
    let companyPrices = [ for r in company.Rows -> r.Date, r.Close ]

    // If you want to do filtering, you can now use the `r.Date` property
    let companyPrices = 
      [ for r in company.Rows do
          if r.Date > DateTime(2010, 1, 1) && r.Date < DateTime(2011, 1, 1) then
            yield r.Date, r.Close ]

    // Charting as before
    companyPrices |> (...)

F# Charting ライブラリに、マウス ポインターの位置に基づいて価格を表示する方法があるかどうかはわかりません。標準の .NET Windows Forms チャート コントロールに基づいているため、基礎となるライブラリのドキュメントを参照してください。

于 2015-01-20T16:23:24.717 に答える
0

1) GetColumn は文字列を取得します。最初にそれを DateTime に変換し、単純に比較する必要があります。すなわち

let plotprice nasdaqcode =
    let url = "http://ichart.finance.yahoo.com/table.csv?s="+nasdaqcode
    let company = CsvFile.Load(url)
    let companyPrices = [ for r in company.Rows -> DateTime.Parse(r.GetColumn "Date"), r.GetColumn "Close" ]
    (companyPrices 
        |> List.filter (fun (date, _) -> date > DateTime(2000, 1, 1))
        |> List.sort 
        |> Chart.Line).WithTitle(nasdaqcode, InsideArea=false)

2)ラベルを追加してみることができます(ただし、ホバーで行う方法はわかりません...)

let plotprice nasdaqcode =
    let url = "http://ichart.finance.yahoo.com/table.csv?s="+nasdaqcode
    let company = CsvFile.Load(url)
    let companyPrices = [ for r in company.Rows -> DateTime.Parse(r.GetColumn "Date"), r.GetColumn "Close" ]
    (companyPrices 
        |> List.filter (fun (date, _) -> date > DateTime(2000, 1, 1))
        |> List.sort 
        |> fun data -> Chart.Line(data, Labels=(Seq.map (fst >> string) data))).WithTitle(nasdaqcode, InsideArea=false)
于 2015-01-20T14:05:37.000 に答える