#r "nuget: FSharp.Data, 5.0.2"
#r "nuget: FSharp.Stats, 0.5.0"
#r "nuget: Plotly.NET, 3.*"
#r "nuget: Plotly.NET.Interactive, 3.*"
open System
open FSharp.Data
open Plotly.NET
open FSharp.Stats
First, make sure that you're referencing the correct files.
Here I'm assuming that you have a class folder with this signal-exploration.ipynb
notebook and a data
folder inside of it. The folder hierarchy would look like below where you
have the below files and folders accessible:
/class
signal-portfolio.ipynb
id_and_return_data.csv
zero_trades_252d.csv
|
First, make sure that our working directory is the source file directory.
We will use the Portfolio module. Make sure that you load this code
#r "nuget: NovaSBE.Finance, 0.5.0"
open NovaSBE.Finance
open NovaSBE.Finance.Portfolio
We assume the id_and_return_data.csv
file and the signal csv file are in the same folder as the notebook. In this example the signal file is be_me.csv
. You should replace that file name with your signal file name.
let [<Literal>] IdAndReturnsFilePath = "id_and_return_data.csv"
let [<Literal>] MySignalFilePath = "be_me.csv"
let strategyName = "book to market"
If my paths are correct, then this code should read the first few lines of the files.
If it doesn't show the first few lines, fix the above file paths.
IO.File.ReadLines(IdAndReturnsFilePath) |> Seq.truncate 5
IO.File.ReadLines(MySignalFilePath) |> Seq.truncate 5
Assuming the paths are defined correctly and you saw the first 5 rows above,
we can now read the data using the CSV provider that parses the fields in the file.
First define the Csv types from the sample files:
type IdAndReturnsType =
CsvProvider<Sample=IdAndReturnsFilePath,
ResolutionFolder=ResolutionFolder>
type MySignalType =
CsvProvider<MySignalFilePath,
ResolutionFolder=ResolutionFolder>
Now read in the data.
let idAndReturnsCsv = IdAndReturnsType.GetSample()
let mySignalCsv = MySignalType.GetSample()
Columns in the idAndReturnsCsv
are:
idAndReturnsCsv.Headers
Columns in the mySignalCsv
are:
mySignalCsv.Headers
There are a lot of columns in the id and returns csv. You can look at the data documentation to figure out what they are.
Put the rows into a list (we're more familiar with lists).
let idAndReturnsRows = idAndReturnsCsv.Rows |> Seq.toList
let mySignalRows = mySignalCsv.Rows |> Seq.toList
We want to be able to look up idAndReturn data
and signal data using a security's ID and month.
To do that, we create a Map collection where the key
is a tuple of the security id and month.
-
In this dataset, we'll use
row.Id
as the identifier. We'll assign it to
the Other
SecurityId case, because it's a dataset specific one.
- In this dataset, the Eom variable defines the "end of month".
- The returns are for the month ending in EOM.
-
The signals are "known" as of EOM. So you can use them on/after EOM. We'll
form portfolios in the month ending EOM; that's the
FormationMonth
.
let msfBySecurityIdAndMonth =
idAndReturnsRows
|> List.map(fun row ->
let id = Other row.Id
let month = DateTime(row.Eom.Year,row.Eom.Month,1)
let key = id, month
key, row)
|> Map
let signalBySecurityIdAndMonth =
mySignalRows
|> List.choose(fun row ->
// we'll use choose to drop the security if the signal is None.
// The signal is None when it is missing.
match row.Signal with
| None -> None // choose will drop these None observations
| Some signal ->
let id = Other row.Id
let month = DateTime(row.Eom.Year,row.Eom.Month,1)
let key = id, month
// choose will convert Some(key,signal) into
// (key,signal) and keep that.
Some (key, signal))
|> Map
The securitiesByFormationMonth
that we'll use to define our investment universe.
let securitiesByFormationMonth =
idAndReturnsRows
|> List.groupBy(fun x -> DateTime(x.Eom.Year, x.Eom.Month,1))
|> List.map(fun (ym, obsThisMonth) ->
let idsThisMonth = [ for x in obsThisMonth do Other x.Id ]
ym, idsThisMonth)
|> Map
let getInvestmentUniverse formationMonth =
match Map.tryFind formationMonth securitiesByFormationMonth with
| Some securities ->
{ FormationMonth = formationMonth
Securities = securities }
| None -> failwith $"{formationMonth} is not in the date range"
Checking universe
let testUniverseObs = getInvestmentUniverse (DateTime(2015,4,1))
Formation month.
testUniverseObs.FormationMonth
First few securities
testUniverseObs.Securities[0..4]
Now I want to be able to get my signal.
We're going to assume here that a "high" signal
predicts high returns. If you have a signal where
a "high" signal predicts low returns, you can
multiply the signal by -1.0
below.
let getMySignal (securityId, formationMonth) =
match Map.tryFind (securityId, formationMonth) signalBySecurityIdAndMonth with
| None -> None
| Some signal ->
Some { SecurityId = securityId
// if a high signal means low returns,
// use `-signal` here instead of `signal`
Signal = signal }
Test it
[ for securityId in testUniverseObs.Securities[0..4] do
let testObs = (securityId, testUniverseObs.FormationMonth)
getMySignal testObs ]
A function to do it for the whole investment universe.
let getMySignals (investmentUniverse: InvestmentUniverse) =
let listOfSecuritySignals =
investmentUniverse.Securities
|> List.choose(fun security ->
getMySignal (security, investmentUniverse.FormationMonth))
{ FormationMonth = investmentUniverse.FormationMonth
Signals = listOfSecuritySignals }
And I should be able to get my market capitalization
msfBySecurityIdAndMonth
|> Map.toList
|> List.take 3
|> List.map (fun ((id, month), row) -> id, row.MarketEquity)
Now a function to do this.
let getMarketCap (security, formationMonth) =
match Map.tryFind (security, formationMonth) msfBySecurityIdAndMonth with
| None -> None
| Some row ->
match row.MarketEquity with
| None -> None
| Some me -> Some (security, me)
And I should be able to get my returns.
let getSecurityReturn (security, formationMonth) =
// If the security has a missing return, assume that we got 0.0.
// Note: If we were doing excess returns, we would need 0.0 - rf.
let missingReturn = 0.0
match Map.tryFind (security, formationMonth) msfBySecurityIdAndMonth with
| None -> security, missingReturn
| Some x ->
match x.Ret with
| None -> security, missingReturn
| Some r -> security, r
The data is already filtered to valid securities based on the data documentation
section 1.2, "How to use the data", from the paper the data came from.
Define sample months
let startSample =
idAndReturnsRows
|> List.map(fun row -> DateTime(row.Eom.Year,row.Eom.Month,1))
|> List.min
let endSample =
let lastMonthWithData =
idAndReturnsRows
|> Seq.map(fun row -> DateTime(row.Eom.Year,row.Eom.Month,1))
|> Seq.max
// The end of sample is the last month when we have returns.
// So the last month when we can form portfolios is one month
// before that.
lastMonthWithData.AddMonths(-1)
let sampleMonths = getSampleMonths (startSample, endSample)
Strategy function
let formStrategy ym =
ym
|> getInvestmentUniverse
|> getMySignals
|> assignSignalSort strategyName 3
|> Seq.toList
|> List.map (giveValueWeights getMarketCap)
|> List.map (getPortfolioReturn getSecurityReturn)
Your strategy portfolios
let doParallel = true
let portfolios =
if doParallel then
sampleMonths
|> List.toArray
|> Array.Parallel.map formStrategy
|> Array.toList
|> List.collect id
else
sampleMonths
|> List.collect formStrategy
A few of the portfolio return observations.
portfolios[..2]
These portfolios were value-weighted. Can you do a version that is equal-weighted?.
let giveEqualWeights (port: AssignedPortfolio): Portfolio =
let makePosition securityId weight : Position =
{ SecurityId = securityId; Weight = weight }
{ FormationMonth = failwith "unimplemented"
Name = failwith "unimplemented"
Index = failwith "unimplemented"
Positions = failwith "unimplemented" }
Now make the equal-weight strategy.
let formEqualWeightStrategy ym =
ym
|> getInvestmentUniverse
|> getMySignals
|> assignSignalSort strategyName 3
|> Seq.toList
|> List.map giveEqualWeights
|> List.map (getPortfolioReturn getSecurityReturn)
If you have defined giveEqualWeights
above then
you can calculate equal weight portfolios with
let portfoliosEW = sampleMonths |> List.collect formEqualWeightStrategy
Common.fsx has some easy to use code to get Fama-French factors.
We're going to use the French data to get monthly risk-free rates.
open NovaSBE.Finance.French
let ff3 = getFF3 Frequency.Monthly
let monthlyRiskFreeRate =
[ for obs in ff3 do
let key = DateTime(obs.Date.Year,obs.Date.Month,1)
key, obs.Rf ]
|> Map
Now I'll convert my portfolios into excess returns.
let portfolioExcessReturns =
portfolios
|> List.map(fun x ->
match Map.tryFind x.Month monthlyRiskFreeRate with
| None -> failwith $"Can't find risk-free rate for {x.Month}"
| Some rf -> { x with Return = x.Return - rf })
Let's plot the top portfolio, calling it long.
let long =
portfolioExcessReturns
|> List.filter(fun x -> x.Index = 3)
let cumulateSimpleReturn (xs: PortfolioReturn list) =
let xs = xs |> List.sortBy (fun x -> x.Month)
let mutable cr = 1.0
[ for x in xs do
cr <- cr * (1.0 + x.Return)
{ x with Return = cr - 1.0 } ]
let longCumulative = long |> cumulateSimpleReturn
let longCumulativeChart =
longCumulative
|> List.map(fun x -> x.Month, x.Return)
|> Chart.Line
|> Chart.withTitle "Growth of 1 Euro"
Could not find reference 'cell37'
|
And function to do the plot
let portfolioReturnPlot (xs:PortfolioReturn list) =
xs
|> List.map(fun x -> x.Month, x.Return)
|> Chart.Line
|> Chart.withTitle "Growth of 1 Euro"
Using the function:
let longWithFunctionsPlot =
long
|> cumulateSimpleReturn
|> portfolioReturnPlot
Could not find reference 'cell41'
|
Now let's use the functions to do a bunch of portfolios at once.
First, let's add a version of value-weighted market portfolio that
has the same time range and same F# type as our portfolios.
let vwMktRf =
let portfolioMonths =
portfolioExcessReturns
|> List.map(fun x -> x.Month)
let minYm = portfolioMonths |> List.min
let maxYm = portfolioMonths |> List.max
[ for x in ff3 do
if x.Date >= minYm && x.Date <= maxYm then
{ Name = "Mkt-Rf"
Index = 1
Month = x.Date
Return = x.MktRf } ]
Let's also create a long-short portfolio.
let short =
portfolioExcessReturns
|> List.filter(fun x ->
x.Name = strategyName && x.Index = 1)
let longShort =
// We'll loop through the long portfolio observations,
// looking for the short portfolio observation for that month.
// For efficiently looking up the short portfolio by month,
// put it in a Map collection indexed by month.
let shortByYearMonthMap =
short
|> List.map(fun row -> row.Month, row)
|> Map
[ for longObs in long do
match Map.tryFind longObs.Month shortByYearMonthMap with
| None -> failwith "probably your date variables are not aligned for a weird reason"
| Some shortObs ->
{ Name = "Long-Short"
Index = 1
Month = longObs.Month
Return = longObs.Return - shortObs.Return } ]
let combinedChart =
List.concat [long; longShort; vwMktRf]
|> List.groupBy(fun x -> x.Name, x.Index)
|> List.map(fun ((name, index), xs) ->
xs
|> cumulateSimpleReturn
|> portfolioReturnPlot
|> Chart.withTraceInfo (Name=($"{name}: {index}")))
|> Chart.combine
Could not find reference 'cell45'
|
You might also want to save your results to a csv file.
let [<Literal>] OutputSchema =
"Name(string),Index(int),Month(date),Ret(float)"
type PortfolioReturnCsv = CsvProvider<OutputSchema>
let makePortfolioReturnCsvRow (row:PortfolioReturn) =
PortfolioReturnCsv
.Row(name=row.Name,
index = row.Index,
month=row.Month,
ret = row.Return)
let csvRows =
portfolioExcessReturns
|> List.map makePortfolioReturnCsvRow
let csv = new PortfolioReturnCsv(csvRows)
csv.Save("myExcessReturnPortfolios.csv")
namespace System
Multiple items
namespace FSharp
--------------------
namespace Microsoft.FSharp
Multiple items
namespace FSharp.Data
--------------------
namespace Microsoft.FSharp.Data
namespace Plotly
namespace Plotly.NET
namespace FSharp.Stats
namespace NovaSBE
namespace NovaSBE.Finance
module Portfolio
from NovaSBE.Finance
Multiple items
type LiteralAttribute =
inherit Attribute
new: unit -> LiteralAttribute
--------------------
new: unit -> LiteralAttribute
[<Literal>]
val IdAndReturnsFilePath: string = "id_and_return_data.csv"
[<Literal>]
val MySignalFilePath: string = "be_me.csv"
val strategyName: string
namespace System.IO
type File =
static member AppendAllLines: path: string * contents: IEnumerable<string> -> unit + 1 overload
static member AppendAllLinesAsync: path: string * contents: IEnumerable<string> * encoding: Encoding * ?cancellationToken: CancellationToken -> Task + 1 overload
static member AppendAllText: path: string * contents: string -> unit + 1 overload
static member AppendAllTextAsync: path: string * contents: string * encoding: Encoding * ?cancellationToken: CancellationToken -> Task + 1 overload
static member AppendText: path: string -> StreamWriter
static member Copy: sourceFileName: string * destFileName: string -> unit + 1 overload
static member Create: path: string -> FileStream + 2 overloads
static member CreateSymbolicLink: path: string * pathToTarget: string -> FileSystemInfo
static member CreateText: path: string -> StreamWriter
static member Decrypt: path: string -> unit
...
<summary>Provides static methods for the creation, copying, deletion, moving, and opening of a single file, and aids in the creation of <see cref="T:System.IO.FileStream" /> objects.</summary>
IO.File.ReadLines(path: string) : Collections.Generic.IEnumerable<string>
IO.File.ReadLines(path: string, encoding: Text.Encoding) : Collections.Generic.IEnumerable<string>
Multiple items
module Seq
from FSharp.Stats
<summary>
Module to compute common statistical measure
</summary>
--------------------
module Seq
from Microsoft.FSharp.Collections
--------------------
type Seq =
new: unit -> Seq
static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float seq
static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float seq
--------------------
new: unit -> Seq
val truncate: count: int -> source: 'T seq -> 'T seq
type IdAndReturnsType = obj
type CsvProvider
<summary>Typed representation of a CSV file.</summary>
<param name='Sample'>Location of a CSV sample file or a string containing a sample CSV document.</param>
<param name='Separators'>Column delimiter(s). Defaults to <c>,</c>.</param>
<param name='InferRows'>Number of rows to use for inference. Defaults to <c>1000</c>. If this is zero, all rows are used.</param>
<param name='Schema'>Optional column types, in a comma separated list. Valid types are <c>int</c>, <c>int64</c>, <c>bool</c>, <c>float</c>, <c>decimal</c>, <c>date</c>, <c>datetimeoffset</c>, <c>timespan</c>, <c>guid</c>, <c>string</c>, <c>int?</c>, <c>int64?</c>, <c>bool?</c>, <c>float?</c>, <c>decimal?</c>, <c>date?</c>, <c>datetimeoffset?</c>, <c>timespan?</c>, <c>guid?</c>, <c>int option</c>, <c>int64 option</c>, <c>bool option</c>, <c>float option</c>, <c>decimal option</c>, <c>date option</c>, <c>datetimeoffset option</c>, <c>timespan option</c>, <c>guid option</c> and <c>string option</c>.
You can also specify a unit and the name of the column like this: <c>Name (type<unit>)</c>, or you can override only the name. If you don't want to specify all the columns, you can reference the columns by name like this: <c>ColumnName=type</c>.</param>
<param name='HasHeaders'>Whether the sample contains the names of the columns as its first line.</param>
<param name='IgnoreErrors'>Whether to ignore rows that have the wrong number of columns or which can't be parsed using the inferred or specified schema. Otherwise an exception is thrown when these rows are encountered.</param>
<param name='SkipRows'>Skips the first n rows of the CSV file.</param>
<param name='AssumeMissingValues'>When set to true, the type provider will assume all columns can have missing values, even if in the provided sample all values are present. Defaults to false.</param>
<param name='PreferOptionals'>When set to true, inference will prefer to use the option type instead of nullable types, <c>double.NaN</c> or <c>""</c> for missing values. Defaults to false.</param>
<param name='Quote'>The quotation mark (for surrounding values containing the delimiter). Defaults to <c>"</c>.</param>
<param name='MissingValues'>The set of strings recognized as missing values specified as a comma-separated string (e.g., "NA,N/A"). Defaults to <c>NaN,NA,N/A,#N/A,:,-,TBA,TBD</c>.</param>
<param name='CacheRows'>Whether the rows should be caches so they can be iterated multiple times. Defaults to true. Disable for large datasets.</param>
<param name='Culture'>The culture used for parsing numbers and dates. Defaults to the invariant culture.</param>
<param name='Encoding'>The encoding used to read the sample. You can specify either the character set name or the codepage number. Defaults to UTF8 for files, and to ISO-8859-1 the for HTTP requests, unless <c>charset</c> is specified in the <c>Content-Type</c> response header.</param>
<param name='ResolutionFolder'>A directory that is used when resolving relative file references (at design time and in hosted execution).</param>
<param name='EmbeddedResource'>When specified, the type provider first attempts to load the sample from the specified resource
(e.g. 'MyCompany.MyAssembly, resource_name.csv'). This is useful when exposing types generated by the type provider.</param>
type MySignalType = obj
val idAndReturnsCsv: HttpResponseWithStream
val mySignalCsv: HttpResponseWithStream
HttpResponseWithStream.Headers: Map<string,string>
<summary>
If the same header is present multiple times, the values will be concatenated with comma as the separator
</summary>
val idAndReturnsRows: obj list
val toList: source: 'T seq -> 'T list
val mySignalRows: Signal list
val msfBySecurityIdAndMonth: Map<(SecurityId * DateTime),obj>
Multiple items
module List
from FSharp.Stats
<summary>
Module to compute common statistical measure on list
</summary>
--------------------
module List
from Microsoft.FSharp.Collections
--------------------
type List =
new: unit -> List
static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float list
static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float list
--------------------
type List<'T> =
| op_Nil
| op_ColonColon of Head: 'T * Tail: 'T list
interface IReadOnlyList<'T>
interface IReadOnlyCollection<'T>
interface IEnumerable
interface IEnumerable<'T>
member GetReverseIndex: rank: int * offset: int -> int
member GetSlice: startIndex: int option * endIndex: int option -> 'T list
static member Cons: head: 'T * tail: 'T list -> 'T list
member Head: 'T
member IsEmpty: bool
member Item: index: int -> 'T with get
...
--------------------
new: unit -> List
val map: mapping: ('T -> 'U) -> list: 'T list -> 'U list
val row: obj
val id: SecurityId
union case SecurityId.Other: string -> SecurityId
val month: DateTime
Multiple items
[<Struct>]
type DateTime =
new: year: int * month: int * day: int -> unit + 16 overloads
member Add: value: TimeSpan -> DateTime
member AddDays: value: float -> DateTime
member AddHours: value: float -> DateTime
member AddMicroseconds: value: float -> DateTime
member AddMilliseconds: value: float -> DateTime
member AddMinutes: value: float -> DateTime
member AddMonths: months: int -> DateTime
member AddSeconds: value: float -> DateTime
member AddTicks: value: int64 -> DateTime
...
<summary>Represents an instant in time, typically expressed as a date and time of day.</summary>
--------------------
DateTime ()
(+0 other overloads)
DateTime(ticks: int64) : DateTime
(+0 other overloads)
DateTime(ticks: int64, kind: DateTimeKind) : DateTime
(+0 other overloads)
DateTime(date: DateOnly, time: TimeOnly) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int) : DateTime
(+0 other overloads)
DateTime(date: DateOnly, time: TimeOnly, kind: DateTimeKind) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, calendar: Globalization.Calendar) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, kind: DateTimeKind) : DateTime
(+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, calendar: Globalization.Calendar) : DateTime
(+0 other overloads)
val key: SecurityId * DateTime
Multiple items
module Map
from FSharp.Stats
<summary>
Module to strore specialised computations on maps
</summary>
--------------------
module Map
from Microsoft.FSharp.Collections
--------------------
type Map<'Key,'Value (requires comparison)> =
interface IReadOnlyDictionary<'Key,'Value>
interface IReadOnlyCollection<KeyValuePair<'Key,'Value>>
interface IEnumerable
interface IStructuralEquatable
interface IComparable
interface IEnumerable<KeyValuePair<'Key,'Value>>
interface ICollection<KeyValuePair<'Key,'Value>>
interface IDictionary<'Key,'Value>
new: elements: ('Key * 'Value) seq -> Map<'Key,'Value>
member Add: key: 'Key * value: 'Value -> Map<'Key,'Value>
...
--------------------
new: elements: ('Key * 'Value) seq -> Map<'Key,'Value>
val signalBySecurityIdAndMonth: Map<(SecurityId * DateTime),float>
val choose: chooser: ('T -> 'U option) -> list: 'T list -> 'U list
val row: Signal
Signal.Signal: float
union case Option.None: Option<'T>
union case Option.Some: Value: 'T -> Option<'T>
val id: x: 'T -> 'T
val securitiesByFormationMonth: Map<DateTime,SecurityId list>
val groupBy: projection: ('T -> 'Key) -> list: 'T list -> ('Key * 'T list) list (requires equality)
val x: obj
val ym: DateTime
val obsThisMonth: obj list
val idsThisMonth: SecurityId list
val getInvestmentUniverse: formationMonth: DateTime -> InvestmentUniverse
val formationMonth: DateTime
val tryFind: key: 'Key -> table: Map<'Key,'T> -> 'T option (requires comparison)
val securities: SecurityId list
val failwith: message: string -> 'T
val testUniverseObs: InvestmentUniverse
InvestmentUniverse.FormationMonth: DateTime
InvestmentUniverse.Securities: SecurityId list
val getMySignal: securityId: SecurityId * formationMonth: DateTime -> SecuritySignal option
val securityId: SecurityId
val signal: float
type SecurityId =
| Ticker of string
| Cusip of string
| Bloomberg of string
| Permno of int
| Other of string
Multiple items
namespace FSharp.Stats.Signal
--------------------
type Signal =
{
SecurityId: SecurityId
FormationDate: DateTime
Signal: float
}
val testObs: SecurityId * DateTime
val getMySignals: investmentUniverse: InvestmentUniverse -> SecuritiesWithSignals
val investmentUniverse: InvestmentUniverse
type InvestmentUniverse =
{
FormationMonth: DateTime
Securities: SecurityId list
}
val listOfSecuritySignals: SecuritySignal list
val security: SecurityId
val toList: table: Map<'Key,'T> -> ('Key * 'T) list (requires comparison)
val take: count: int -> list: 'T list -> 'T list
val getMarketCap: security: SecurityId * formationMonth: DateTime -> (SecurityId * 'a) option
val me: 'a
val getSecurityReturn: security: SecurityId * formationMonth: DateTime -> SecurityId * float
val missingReturn: float
val r: float
val startSample: DateTime
val min: list: 'T list -> 'T (requires comparison)
val endSample: DateTime
val lastMonthWithData: DateTime
val map: mapping: ('T -> 'U) -> source: 'T seq -> 'U seq
val max: source: 'T seq -> 'T (requires comparison)
DateTime.AddMonths(months: int) : DateTime
val sampleMonths: DateTime list
val getSampleMonths: sampleStart: DateTime * sampleEnd: DateTime -> DateTime list
<summary>
This function takes a sample start and sample end
and returns a list with all months from start to end.
Don't worry about understanding what this function does.
The details are beyond the scope of the class, but if you're
curious it's a recursive function:
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/functions/recursive-functions-the-rec-keyword
</summary>
val formStrategy: ym: DateTime -> PortfolioReturn list
val assignSignalSort: name: string -> n: int -> xs: SecuritiesWithSignals -> AssignedPortfolio seq
val giveValueWeights: marketCapGetter: GetsMarketCaps -> x: AssignedPortfolio -> Portfolio
<summary>
Defining this type alias makes it easier to read the type of the function that I want for
marketCapGetter in the function that I have below. Otherwise it might look something like
let giveValueWeights (marketCapGetter: (SecurityId * YearMonth -> (SecurityId * float) Option) ...
which is the same thing but not as clear what we're trying to do.
</summary>
val getPortfolioReturn: returnGetter: GetsReturn -> x: Portfolio -> PortfolioReturn
val doParallel: bool
val portfolios: PortfolioReturn list
val toArray: list: 'T list -> 'T array
Multiple items
type Array =
new: unit -> Array
static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float array
static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float array
--------------------
new: unit -> Array
module Parallel
from Microsoft.FSharp.Collections.ArrayModule
val map: mapping: ('T -> 'U) -> array: 'T array -> 'U array
val toList: array: 'T array -> 'T list
val collect: mapping: ('T -> 'U list) -> list: 'T list -> 'U list
val giveEqualWeights: port: AssignedPortfolio -> Portfolio
val port: AssignedPortfolio
type AssignedPortfolio =
{
Name: string
Index: int
FormationMonth: DateTime
Signals: SecuritySignal list
}
Multiple items
module Portfolio
from NovaSBE.Finance
--------------------
type Portfolio =
{
Name: string
Index: int
FormationMonth: DateTime
Positions: Position list
}
val makePosition: securityId: SecurityId -> weight: float -> Position
val weight: float
type Position =
{
SecurityId: SecurityId
Weight: float
}
Multiple items
[<Struct>]
type Index =
new: value: int * ?fromEnd: bool -> unit
member Equals: other: Index -> bool + 1 overload
member GetHashCode: unit -> int
member GetOffset: length: int -> int
member ToString: unit -> string
static member FromEnd: value: int -> Index
static member FromStart: value: int -> Index
static member op_Implicit: value: int -> Index
member IsFromEnd: bool
member Value: int
...
<summary>Represents a type that can be used to index a collection either from the beginning or the end.</summary>
--------------------
Index ()
Index(value: int, ?fromEnd: bool) : Index
type Positions =
{
FormationMonth: DateTime
Positions: Position list
}
val formEqualWeightStrategy: ym: DateTime -> PortfolioReturn list
Multiple items
module List
from Microsoft.FSharp.Collections
--------------------
type List<'T> =
| op_Nil
| op_ColonColon of Head: 'T * Tail: 'T list
interface IReadOnlyList<'T>
interface IReadOnlyCollection<'T>
interface IEnumerable
interface IEnumerable<'T>
member GetReverseIndex: rank: int * offset: int -> int
member GetSlice: startIndex: int option * endIndex: int option -> 'T list
static member Cons: head: 'T * tail: 'T list -> 'T list
member Head: 'T
member IsEmpty: bool
member Item: index: int -> 'T with get
...
val portfoliosEW: PortfolioReturn list
val printfn: format: Printf.TextWriterFormat<'T> -> 'T
module French
from NovaSBE.Finance
val ff3: FF3Obs array
val getFF3: frequency: Frequency -> FF3Obs array
type Frequency =
| Daily
| Monthly
union case Frequency.Monthly: Frequency
val monthlyRiskFreeRate: Map<DateTime,float>
val obs: FF3Obs
val key: DateTime
FF3Obs.Date: DateTime
property DateTime.Year: int with get
<summary>Gets the year component of the date represented by this instance.</summary>
<returns>The year, between 1 and 9999.</returns>
property DateTime.Month: int with get
<summary>Gets the month component of the date represented by this instance.</summary>
<returns>The month component, expressed as a value between 1 and 12.</returns>
FF3Obs.Rf: float
val portfolioExcessReturns: PortfolioReturn list
val x: PortfolioReturn
PortfolioReturn.Month: DateTime
val rf: float
PortfolioReturn.Return: float
val long: PortfolioReturn list
val filter: predicate: ('T -> bool) -> list: 'T list -> 'T list
PortfolioReturn.Index: int
val cumulateSimpleReturn: xs: PortfolioReturn list -> PortfolioReturn list
val xs: PortfolioReturn list
type PortfolioReturn =
{
Name: string
Index: int
Month: DateTime
Return: float
}
type 'T list = List<'T>
val sortBy: projection: ('T -> 'Key) -> list: 'T list -> 'T list (requires comparison)
val mutable cr: float
val longCumulative: PortfolioReturn list
val longCumulativeChart: GenericChart.GenericChart
type Chart =
static member AnnotatedHeatmap: zData: #('a1 seq) seq * annotationText: #(string seq) seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?X: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?XGap: int * [<Optional; DefaultParameterValue ((null :> obj))>] ?Y: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?YGap: int * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a5 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a5 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?ColorBar: ColorBar * [<Optional; DefaultParameterValue ((null :> obj))>] ?ColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowScale: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ReverseScale: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ZSmooth: SmoothAlg * [<Optional; DefaultParameterValue ((null :> obj))>] ?Transpose: bool * [<Optional; DefaultParameterValue ((false :> obj))>] ?UseWebGL: bool * [<Optional; DefaultParameterValue ((false :> obj))>] ?ReverseYAxis: bool * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a5 :> IConvertible) + 1 overload
static member Area: x: #IConvertible seq * y: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowMarkers: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiOpacity: float seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?TextPosition: TextPosition * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: TextPosition seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerSymbol: MarkerSymbol * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiMarkerSymbol: MarkerSymbol seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Marker: Marker * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineWidth: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineDash: DrawingStyle * [<Optional; DefaultParameterValue ((null :> obj))>] ?Line: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?StackGroup: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?Orientation: Orientation * [<Optional; DefaultParameterValue ((null :> obj))>] ?GroupNorm: GroupNorm * [<Optional; DefaultParameterValue ((null :> obj))>] ?FillColor: Color * [<Optional; DefaultParameterValue ((false :> obj))>] ?UseWebGL: bool * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload
static member Bar: values: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Keys: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiOpacity: float seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerPatternShape: PatternShape * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiMarkerPatternShape: PatternShape seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerPattern: Pattern * [<Optional; DefaultParameterValue ((null :> obj))>] ?Marker: Marker * [<Optional; DefaultParameterValue ((null :> obj))>] ?Base: #IConvertible * [<Optional; DefaultParameterValue ((null :> obj))>] ?Width: 'a4 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiWidth: 'a4 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?TextPosition: TextPosition * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: TextPosition seq * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload
static member BoxPlot: [<Optional; DefaultParameterValue ((null :> obj))>] ?X: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Y: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?FillColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?Marker: Marker * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?WhiskerWidth: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?BoxPoints: BoxPoints * [<Optional; DefaultParameterValue ((null :> obj))>] ?BoxMean: BoxMean * [<Optional; DefaultParameterValue ((null :> obj))>] ?Jitter: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?PointPos: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?Orientation: Orientation * [<Optional; DefaultParameterValue ((null :> obj))>] ?OutlineColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?OutlineWidth: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?Outline: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?AlignmentGroup: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?OffsetGroup: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?Notched: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?NotchWidth: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?QuartileMethod: QuartileMethod * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 2 overloads
static member Bubble: x: #IConvertible seq * y: #IConvertible seq * sizes: int seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiOpacity: float seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?TextPosition: TextPosition * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: TextPosition seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerSymbol: MarkerSymbol * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiMarkerSymbol: MarkerSymbol seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Marker: Marker * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineWidth: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?LineDash: DrawingStyle * [<Optional; DefaultParameterValue ((null :> obj))>] ?Line: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?StackGroup: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?Orientation: Orientation * [<Optional; DefaultParameterValue ((null :> obj))>] ?GroupNorm: GroupNorm * [<Optional; DefaultParameterValue ((false :> obj))>] ?UseWebGL: bool * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload
static member Candlestick: ``open`` : #IConvertible seq * high: #IConvertible seq * low: #IConvertible seq * close: #IConvertible seq * x: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a5 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a5 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Line: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?IncreasingColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?Increasing: FinanceMarker * [<Optional; DefaultParameterValue ((null :> obj))>] ?DecreasingColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?Decreasing: FinanceMarker * [<Optional; DefaultParameterValue ((null :> obj))>] ?WhiskerWidth: float * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a5 :> IConvertible) + 1 overload
static member Column: values: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Keys: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiOpacity: float seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerPatternShape: PatternShape * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiMarkerPatternShape: PatternShape seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerPattern: Pattern * [<Optional; DefaultParameterValue ((null :> obj))>] ?Marker: Marker * [<Optional; DefaultParameterValue ((null :> obj))>] ?Base: #IConvertible * [<Optional; DefaultParameterValue ((null :> obj))>] ?Width: 'a4 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiWidth: 'a4 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?TextPosition: TextPosition * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: TextPosition seq * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload
static member Contour: zData: #('a1 seq) seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?X: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Y: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a4 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a4 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?ColorBar: ColorBar * [<Optional; DefaultParameterValue ((null :> obj))>] ?ColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowScale: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ReverseScale: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Transpose: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContourLineColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContourLineDash: DrawingStyle * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContourLineSmoothing: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContourLine: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContoursColoring: ContourColoring * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContoursOperation: ConstraintOperation * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContoursType: ContourType * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowContourLabels: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ContourLabelFont: Font * [<Optional; DefaultParameterValue ((null :> obj))>] ?Contours: Contours * [<Optional; DefaultParameterValue ((null :> obj))>] ?FillColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?NContours: int * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a4 :> IConvertible)
static member Funnel: x: #IConvertible seq * y: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?Width: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?Offset: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?TextPosition: TextPosition * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: TextPosition seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Orientation: Orientation * [<Optional; DefaultParameterValue ((null :> obj))>] ?AlignmentGroup: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?OffsetGroup: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?Marker: Marker * [<Optional; DefaultParameterValue ((null :> obj))>] ?TextInfo: TextInfo * [<Optional; DefaultParameterValue ((null :> obj))>] ?ConnectorLineColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?ConnectorLineStyle: DrawingStyle * [<Optional; DefaultParameterValue ((null :> obj))>] ?ConnectorFillColor: Color * [<Optional; DefaultParameterValue ((null :> obj))>] ?ConnectorLine: Line * [<Optional; DefaultParameterValue ((null :> obj))>] ?Connector: FunnelConnector * [<Optional; DefaultParameterValue ((null :> obj))>] ?InsideTextFont: Font * [<Optional; DefaultParameterValue ((null :> obj))>] ?OutsideTextFont: Font * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible)
static member Heatmap: zData: #('a1 seq) seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?Name: string * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Optional; DefaultParameterValue ((null :> obj))>] ?X: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?XGap: int * [<Optional; DefaultParameterValue ((null :> obj))>] ?Y: #IConvertible seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?YGap: int * [<Optional; DefaultParameterValue ((null :> obj))>] ?Text: 'a4 * [<Optional; DefaultParameterValue ((null :> obj))>] ?MultiText: 'a4 seq * [<Optional; DefaultParameterValue ((null :> obj))>] ?ColorBar: ColorBar * [<Optional; DefaultParameterValue ((null :> obj))>] ?ColorScale: Colorscale * [<Optional; DefaultParameterValue ((null :> obj))>] ?ShowScale: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ReverseScale: bool * [<Optional; DefaultParameterValue ((null :> obj))>] ?ZSmooth: SmoothAlg * [<Optional; DefaultParameterValue ((null :> obj))>] ?Transpose: bool * [<Optional; DefaultParameterValue ((false :> obj))>] ?UseWebGL: bool * [<Optional; DefaultParameterValue ((false :> obj))>] ?ReverseYAxis: bool * [<Optional; DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a4 :> IConvertible) + 1 overload
...
static member Chart.Line: xy: (#IConvertible * #IConvertible) seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?ShowMarkers: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Name: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiOpacity: float seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?TextPosition: StyleParam.TextPosition * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: StyleParam.TextPosition seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerColorScale: StyleParam.Colorscale * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerSymbol: StyleParam.MarkerSymbol * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiMarkerSymbol: StyleParam.MarkerSymbol seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Marker: TraceObjects.Marker * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineColor: Color * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineColorScale: StyleParam.Colorscale * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineWidth: float * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineDash: StyleParam.DrawingStyle * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Line: Line * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?StackGroup: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Orientation: StyleParam.Orientation * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?GroupNorm: StyleParam.GroupNorm * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Fill: StyleParam.Fill * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?FillColor: Color * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((false :> obj))>] ?UseWebGL: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> IConvertible)
static member Chart.Line: x: #IConvertible seq * y: #IConvertible seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?ShowMarkers: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Name: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Opacity: float * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiOpacity: float seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Text: 'a2 * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiText: 'a2 seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?TextPosition: StyleParam.TextPosition * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiTextPosition: StyleParam.TextPosition seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerColor: Color * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerColorScale: StyleParam.Colorscale * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerOutline: Line * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MarkerSymbol: StyleParam.MarkerSymbol * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?MultiMarkerSymbol: StyleParam.MarkerSymbol seq * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Marker: TraceObjects.Marker * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineColor: Color * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineColorScale: StyleParam.Colorscale * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineWidth: float * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LineDash: StyleParam.DrawingStyle * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Line: Line * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?StackGroup: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Orientation: StyleParam.Orientation * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?GroupNorm: StyleParam.GroupNorm * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Fill: StyleParam.Fill * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?FillColor: Color * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((false :> obj))>] ?UseWebGL: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((true :> obj))>] ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> IConvertible)
static member Chart.withTitle: title: Title -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withTitle: title: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?TitleFont: Font -> (GenericChart.GenericChart -> GenericChart.GenericChart)
module HTML
from Plotly.NET
<summary>
HTML template for Plotly.js
</summary>
val portfolioReturnPlot: xs: PortfolioReturn list -> GenericChart.GenericChart
val longWithFunctionsPlot: GenericChart.GenericChart
val vwMktRf: PortfolioReturn list
val portfolioMonths: DateTime list
val minYm: DateTime
val maxYm: DateTime
val max: list: 'T list -> 'T (requires comparison)
val x: FF3Obs
FF3Obs.MktRf: float
val short: PortfolioReturn list
PortfolioReturn.Name: string
val longShort: PortfolioReturn list
val shortByYearMonthMap: Map<DateTime,PortfolioReturn>
val row: PortfolioReturn
val longObs: PortfolioReturn
val shortObs: PortfolioReturn
val combinedChart: GenericChart.GenericChart
val concat: lists: 'T list seq -> 'T list
val name: string
val index: int
static member Chart.withTraceInfo: [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Name: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?Visible: StyleParam.Visible * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?ShowLegend: bool * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LegendRank: int * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LegendGroup: string * [<Runtime.InteropServices.Optional; Runtime.InteropServices.DefaultParameterValue ((null :> obj))>] ?LegendGroupTitle: Title -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.combine: gCharts: GenericChart.GenericChart seq -> GenericChart.GenericChart
[<Literal>]
val OutputSchema: string = "Name(string),Index(int),Month(date),Ret(float)"
type PortfolioReturnCsv = CsvProvider<...>
val makePortfolioReturnCsvRow: row: PortfolioReturn -> CsvProvider<...>.Row
val csvRows: CsvProvider<...>.Row list
val csv: PortfolioReturnCsv
member Runtime.CsvFile.Save: path: string * [<Runtime.InteropServices.Optional>] ?separator: char * [<Runtime.InteropServices.Optional>] ?quote: char -> unit
member Runtime.CsvFile.Save: stream: IO.Stream * [<Runtime.InteropServices.Optional>] ?separator: char * [<Runtime.InteropServices.Optional>] ?quote: char -> unit
member Runtime.CsvFile.Save: writer: IO.TextWriter * [<Runtime.InteropServices.Optional>] ?separator: char * [<Runtime.InteropServices.Optional>] ?quote: char -> unit