finos / FDC3

An open standard for the financial desktop.
https://fdc3.finos.org
Other
199 stars 132 forks source link

Improve the definition of the Position context type #656

Open kriswest opened 2 years ago

kriswest commented 2 years ago

Enhancement Request

FDC3 already defines a Position context type, however, it is more simplistic than necessary. Enhance the existing type to better represent a Position.

Use Case:

Provide a more accurate represent a financial position relating to a specified instrument, which may be used to visualize or otherwise analyze that position. May also be used to compose a type representing a Portfolio.

Contexts

Position

Represents a financial position (a holding in a particular instrument).

The Position type goes hand-in-hand with the Portfolio type, which represents multiple holdings in a combination of instruments.

The position schema does not explicitly include identifiers in the id section, as there is not a common standard for such identifiers. Applications can, however, populate this part of the contract with custom identifiers if so desired.

Details
Property Type Required Example Value
type string Yes 'fdc3.position'
id object No { positionId: '6475' }
name string No 'My Apple shares'
instrument Instrument Yes { type: 'fdc3.instrument', ... }
holding number Yes 2000000
trades TradeList * No [{ type: 'fdc3.trade, ... }, ... ]
basis Valuation ** No { type: 'fdc3.valuation', ... }
current Valuation ** No { type: 'fdc3.valuation', ... }
gain number No 8000000
restricted number No 4000

* See issue #655 ** See issue #652

Example
const position = {
    type: "fdc3.position",
    instrument: {
      type: "fdc3.instrument",
      id: {
        ticker: "AAPL"
      }
    },
    holding: 2000000,
    trades: [{
        type: "fdc3.trade",
        instrument: {
          type: "fdc3.instrument",
          id: {
            ticker: "AAPL"
          }
        },
        tradeTimeRange: {
          type: "fdc3.timeRange",
          starttime: "2020-09-01T08:00:00.000Z"
        },
        settleTimeRange: {
          type: "fdc3.timeRange",
          starttime: "2020-09-02T08:00:00.000Z"
        },
        quantity: {
          units: 1000000
        },
        open: {
          type: 'fdc3.valuation',
          value: 20000000.0,
          price: 20.0,
          CURRENCY_ISOCODE: 'USD'
        },
        location: "XYZ",
        account: "cash"
      },
      {
        type: "fdc3.trade",
        instrument: {
          type: "fdc3.instrument",
          id: {
            ticker: "AAPL"
          }
        },
        tradeTimeRange: {
          type: "fdc3.timeRange",
          starttime: "2020-09-08T08:00:00.000Z"
        },
        settleTimeRange: {
          type: "fdc3.timeRange",
          starttime: "2020-09-09T08:00:00.000Z"
        },
        quantity: {
          units: 1000000
        },
        open: {
          type: 'fdc3.valuation',
          value: 22000000.0,
          price: 22.0,
          CURRENCY_ISOCODE: 'USD'
        },
        location: "XYZ",
        account: "cash"
      }
    ],
    basis: {
      type: "fdc3.valuation",
      price: 21.00,
      value: 42000000,
      CURRENCY_ISOCODE: 'USD'
    },
    current: {
      type: "fdc3.valuation",
      price: 25.00,
      value: 50000000,
      CURRENCY_ISOCODE: 'USD'
      code: "USD"
    }
  },
  gain: 8000000,
  restricted: 0
};

fdc3.raiseIntent("ViewChart", position);

Additional Information

... please add any other information that can provide additional detail for this enhancement request

dominicgifford commented 2 years ago

One of the key classifiers for many buy-sides when visualising a position is strategy. Less common, but still used in some buy-side sectors, are positions broken down by tax lots. I appreciate applications could use custom elements to identify these but I would be interested to know what other contributors think about making these optional elements?

nemery-flextrade commented 2 years ago

How would one indicate a short position? Do we need an indicator field or should we keep it simple and rely on a negative quantity?

kriswest commented 2 years ago

@dominicgifford happy to add optional elements where they make sense for shared context. What would you suggest for adding:

@nemery-flextrade Negative holding amount?