User:Bpeller: Difference between revisions

    From KDE TechBase
    Line 14: Line 14:


    [http://techbase.kde.org/User:Bpeller# [Jump to Top]]
    [http://techbase.kde.org/User:Bpeller# [Jump to Top]]


    == Components ==
    == Components ==

    Revision as of 07:45, 23 May 2010

    Central Stock Price Information

    A proposal for Season of KDE 2010 by Brian Cappello
    Mentors: Cristian Onet and Alvaro Soliverez

    Use Cases

    • A plasmoid wants to display a watchlist of stock quotes.
    • Santosh Kumar wants to provide notification support for changes in stock prices.
    • An investor wants to chart an investment's yearly performance starting from their first purchase thirty-five years ago.
    • An investor wants to do some fundamental research on a stock they're considering trading.
    • A day trader wants to chart today's 5-minute price action since the open.
    • A swing trader wants to chart two months worth of hourly data.
    • Another swing trader wants to chart 200 bars of daily data.
    • A student of the markets wants to "replay" the crash of '87 starting from 3 months prior and advancing one day at a time.
    • A mechanical systems trader writes a scripted trading algorithm, and they want to back-test its performance on various sets of historical data.

    [Jump to Top]


    Components

    • Always-On/On-Demand Backend: A member of Alkimia
    The backend handles all quote retrieval/storage, and provides a public interface for client applications to query over DBus for whatever information they need. The backend also serves as a centralized place for consolidating various stock-price-manipulation maths common to financial applications' needs.
    • A "Master" Backend UI: Some form/combination of plasmoid/application/kpart/kcm...
    Cumulative functionality should support something along the lines of:
    • Managing which symbols and watchlists the backend permanently stores data for.
    • Configuring the backend's default historical and intra-day data sources. (And maybe resource/performance settings.)
    YahooCSV: Download quotes from Yahoo! (Default for Intra-Day & Historical)
    Directory: Import/monitor quotes from a directory containing CSV files. (For users with paid-data services.)
    Time Permitting: YahooWEB: Parse real-time data from the finance.yahoo.com website. (Intra-Day only)
    • Exporting user specified data/information/statistics to CSV.

    [Jump to Top]


    Backend Functionality

    Internals

    • Maintain/store a master list of all watchlists.
    • Maintain/store a master list of all symbols to be watched. Filters out watchlist-duplicates and includes symbols which aren't a member of any watchlist.
    • Maintain a local/offline store of downloaded data:
    1. Company info and statistics. (Used for offline mode/throughout the day. Company stats change frequently enough and are reasonably cheap (fast) to download so we update this once daily, if possible.)
    2. Accumulate sampled Intra-Day data as Minutely data.
    3. Store and keep up-to-date "primary" data: Minutely, Daily, Weekly, and Monthly Time Periods

    [Jump to Top]


    Public DBus Interfaces

    Management of stored symbols and watchlists

    These are primary functions.

    Symbol Management
    • Add/Remove Symbols
    Inputs:
    • Symbol
    • Action: Add or Remove
    Output:
    • Bool Success
    • Modify a watchlist's symbols
    Inputs:
    • Symbol
    • Watchlist
    • Action: Add or Remove
    Output:
    • Bool Success
    Watchlist Management
    • Merge Watchlists
    Inputs:
    • First Watchlist
    • Second Watchlist
    • Action: Merge or New
    Merge: First into second, delete first. [Mirroring 'mv' command.]
    New: Create a new watchlist, preserve originals.
    • Optional: New Watchlist's Name
    Output:
    • Bool Success
    • Add/Remove Watchlists
    Inputs:
    • Watchlist
    • Action: Add or Delete
    Output:
    • Bool Success

    [Jump to Top]


    Intra-Day/Most-Recent-Close Quote

    This is a primary function.
    Inputs:
    • Symbol
    • Optional: Prices or Percents
    Prices: the real prices (Default)
    Percents: Percent changes from previous close
    Output:
    • struct: Contains a KDateTime, the Open, High, Low, Close, Volume, and, if applicable, Open Interest (eg for futures). Optional: and Beta.

    Previous Day's Close Quote

    This is a convenience function.
    Inputs:
    • Symbol
    • Optional: Prices or Percents
    Prices: the real prices (Default)
    Percents: Percent changes from previous close (eg two closes ago)
    Output:
    • struct: Contains a KDateTime, the Open, High, Low, Close, Volume, and, if applicable, Open Interest (eg for futures). Optional: and Beta.

    Company Information, Key Statistics and Fundamentals

    This is a primary function.
    Inputs:
    • Symbol
    • Parameters (keys)
    Initially most (all applicable) parameters easily downloadable from Yahoo will be supported. Time permitting, more information sources can be added (such as parsing parameter values from Yahoo's Key Statistics webpage).
    Time Permitting: There should probably be a way to query at runtime what keys are available, as well as key-lookup by human-readable names.
    Output: Must be able to accommodate both strings and numbers.
    • A container object holding the requested parameters' key-value pairs.

    [Jump to Top]


    Historical Quotes

    This is a primary function.
    Inputs:
    • Symbol
    • Amount/duration of historical data:
    Optional: Specify an end date. (Defaults to the most recent close.)
    Specify a duration (relative to the end date) by providing one of the following:
    • A start date.
    • An elapsed quantity and unit of time, independent of the (optionally) requested time period.
    • Or directly as a number of bars.
    • Optional: Time Period: Specify by providing:
    Optional: A major time unit. (Minutely, Daily (Default), Weekly, or Monthly)
    Optional: A multiplier. Default = 1
    • Optional: Adjusted or Absolute Prices
    Adjusted: (Default) Prices adjusted for splits and dividends.
    Absolute: Raw price data. (Provided by default if the requested symbol has no splits or dividends.)
    • Optional: A maximum lookback. Default = 0
    The number of "hidden" bars (older than the start date) to return. Used by technical analysis indicators so their results will be complete for the requested length of "shown" price data.
    Output:
    • A container object holding the input parameters used to produce the data, as well as the data itself (containing the same information as Intra-Day structs). Need to look into what would be the most convenient storage method for MVC-based clients such as KDChart as used by KMyMoney, but that's still flexible enough to be non-MVC-friendly.

    [Jump to Top]


    Future Backend Possibilities

    Time Permitting / Low Priority:

    1. Support for calculating relative price/performance between multiple data sets.
    2. Support for calculating "custom Market Indexes" from watchlists.
    3. Support for storing/browsing/querying sectors and industries, as well as tracking their performance using (1) and (2).
    4. Improved support for options, futures, and FOREX.
    5. [Maybe] Technical Analysis Indicator Calculation Support: Essentially this would be providing a Qt-like API wrapped around TA-Lib's Abstract runtime interface. TA-Lib requires data to be stored in STD c++ arrays, as well as requiring the frequent reuse of non-cheaply-calculated data, so from a convenience/performance standpoint it probably makes the most sense to try to centralize indicator support inside Alkimia. However, TA-Lib isn't exactly packaged for most (all?) distributions, let alone included by default, so that's possibly a big reason to avoid said integration. [On the other hand, distros haven't had much incentive to package it and/or it may (?) be possible to distribute TA-Lib (BSD license) inside the Alkimia tarball with compilation instructions for users who desire such functionality?]
    6. [Depends on TA-Lib] Manual calculation of Beta with controllable inputs for the time period and the "volatility base market." This ability is probably most applicable for large private investors, portfolio analysts, and institutions/banks, and is particularly relevant for those invested in international/emerging markets who do not want to base their volatility calculations off of American markets, as Yahoo's provided Beta is assumed to do.

    [Jump to Top]