Version 9.0.0

Release date: Jul 12, 2023

See the 8.9.0 to 9.0.0 upgrade notes for information about upgrading to this version.

New features

  • Dynamic Baseline chart — Baseline style charts can now be configured to display a dynamic, non-centered baseline. Previously, the baseline remained fixed at the center of the chart (or wherever a user manually placed it), and the height of the y-axis and chart adjusted accordingly. Now, developers can set the baseline to move according to the height of the y-axis, allowing the chart itself to fill the available space.

    A dynamic Baseline chart
    Figure. The y-axis of a dynamic baseline chart adjust to the height of the chart.

    • Update to the CIQ.Renderer.Lines constructor function adds a parameter config.params.centered. Set this boolean to true to center the chart around the baseline. If the baseline isn't set, centered is ignored.

    • Update to CIQ.Renderer.Lines.requestNew adds support for the new non-centered baseline feature.

  • Key File for easier upgrading — ChartIQ has implemented a key file that enables easier upgrades. ChartIQ is licensed on a time- and plugin-based entitlement system. Accordingly, it has an internal license validation methodology to ensure the license is within the specified time and feature parameters. In order to streamline the upgrade process, the locking mechanism has now been abstracted out from the core JavaScript files. Now, a build of ChartIQ can be reprovisioned with a single file as opposed to requiring the entire library to be rebundled and redeployed.

  • Histogram gap filling — The histogram chart now allows single bars to span across multiple lower time periods on the chart. Users can thus overlay data with different periodicities. For example, daily price data may be overlaid on quarterly fundamental data or monthly economic data.

    Histogram gap filling
    Figure. A comparison series (monthly) overlaying a histogram showing quarterly data.

Enhancements

  • Interactive help for chart types — An interactive help dialog describing each chart type and drawing tool is now available. Users can long-press an item in the chart-type dropdown menu or on the drawing palette to open this dialog, which includes information about that feature or tool and a button to select it.

    Interactive help for chart types and drawing tools
    Figure. Users can long-press chart types and drawing tools to open an information popup.

  • Sharing directly to Twitter and Teams — Users can now share directly to Twitter and Microsoft Teams from the sharing dialog. They can share to other social media as well by copying and a pasting a URL. See Enabling Direct Sharing Buttons in the Chart Sharing tutorial for information on configuring this feature.

    Share directly to Twitter and Teams
    Figure. Users can share directly to Twitter and Teams.

  • Sharing live charts — ChartIQ now provides the groundwork to facilitate sharing live charts that a user has configured. Previously, users could only share static images of a chart. To enable live chart sharing, clients will have to host the shared chart on their own servers and store the chart configuration object in a database. For instructions on how to implement this feature, see Sharing Live Charts in the Chart Sharing tutorial.

    Share a live chart
    Figure. Sharing a live, user-configured chart from local storage. Clients will have to host the chart on their own servers to share to social media.

  • Add studies to a secondary series — Users can now add select studies to a comparison series shown on the chart. Studies with this new ability include the Volume Chart study, as well as any study that takes an inputs.Field parameter, such as a Moving Average or a Stochastics indicator. In the study's dialog, the user can select a comparison from the Field dropdown. Previously, users could only add a study to the primary series or to another study.

    Add studies to a comparison series
    Figure. Comparison series are now an option for any study that takes an input field.

    • New CIQ.Studies.getQuoteFieldValue function provides a unified way of accessing numeric quote data using field keys from objects in a quote feed. By default, it returns the Close value of a quote. Previously, the CIQ.Studies.addStudy function limited what series a study could be added to because it can only take a numeric value as its inputs.Field parameter, not an object.

    • Update to CIQ.ChartEngine#addSeries adds properties to the parameters object:

      • responseHandler, an optional function to override the processing of data
      • noStorage, a boolean that, if set to true, disables the export of the series when saving a layout
      • retoggle, a boolean indicating whether the series should be reloaded when loading a new chart
      • processResults, an optional function called within responseHandler to perform on the returned result set
      • takedownResults, an optional function to perform when removing series
    • Update to CIQ.ChartEngine#attachQuoteFeed changes the function's behavior when attaching an unfiltered feed if another unfiltered feed is already attached. Now, only the existing unfiltered feed is removed. Previously, all existing feeds would be removed.

  • Multi-Chart: Trading Central and Estimize plugins — The new multi-chart grid template now supports the plug-ins for Trading Central and Estimize.

    Multi-chart supports Trading Central and Estimize plugins
    Figure. Trading Central and Estimize plugins supported in a multi-chart grid.

  • Fetch event data for markers directly from a quote feedQuotefeeds now include a built-in ability to make fetch requests for event data to display on a chart as markers.

    • New CIQ.ChartEngine#addEvent function adds an event series to the chart. Events are managed just like series, but adding using addEvent instead of addSeries will cause them to be managed properly.

    • New CIQ.ChartEngine#processEventResults function is the default handler for event data results processing. Override this function to change the default behavior, which is to draw Simple markers.

    • New CIQ.ChartEngine#takedownEventResults function is the default handler for event removal. Override this function to change the default behavior, which is to remove markers.

    • New CIQ.ChartEngine#removeEvent function removes an event series from the chart.

    • New CIQ.ChartEngine#removeAllEvents function removes all event series from the chart.

    • Update to CIQ.ChartEngine#getSymbols adds the parameter params.exclude-nostore. Set this boolean to true to exclude any series whose noStorage property is set to true.

    See the Markers tutorial, especially the section called "Fetching marker data from a different quoteFeed" for instructions.

  • Center of Gravity study — The Center of Gravity study is now accompanied by a signal line displaying a simple moving average. This way, users can more easily say when the CoG is making a significant change in direction. When the CoG line crosses above the signal line, it indicates a market upturn. Below, a downturn.

    Center of Gravity study signal line
    Figure. The Center of Gravity line (white) with its signal line (red).

  • Faster load time for templates — The initial load times of ChartIQ templates have been reduced by implementing a dynamic loading process for plugins.

  • Reconstructing and serializing drawings — The hidden and permanent properties of each drawing type are now preserved when a drawing is restored from local storage.

  • Mixing delayed and real-time data — Version 9.0.0 provides enhanced support for charts with multiple series that mix real-time and delayed data.

    • New CIQ.ChartEngine#drawWithRange function calls CIQ.ChartEngine#draw while also adjusting the chart for any existing span or range selection. This adjustment is useful when adding or removing a series or study whose data points don't align with the main plot (if, for example, the main plot is delayed, but the series is real time).

    • Updated CIQ.ChartEngine#setRange and CIQ.ChartEngine#setSpan functions to add a useExistingData parameter to each. Set this boolean to true to indicate that existing data is sufficient.

  • New CIQ.Studies.useTranslationDelimiter property, a boolean, sets whether to use a delimiting character when generating study IDs. Previously, study and panel names included a ZWNJ character to aid translation. Now, clients can set this boolean to false to configure their study names not to include this character.

  • New CIQ.UI.UIManager.getColorPicker function return the color picker and, if necessary, creates one for the scope of the given element.

  • New CIQ.UI.UIManager.closeOpenColorPicker function closes an open color picker.

  • New CIQ.biSquareMult convenience function calculates a**b (or a raised to the power of b), where a and b are BigInts.

  • Updated CIQ.TableView#open adds the parameter processCloseEvent to the params object. This optional callback function receives the event that closes a table, allowing developers to inspect the event target and stop event propagation. If the function is not provided, event propagation is stopped by default.

UI Enhancements

  • Enhanced user control of the crosshairs — Users now control whether the crosshairs display in most contexts, regardless of whether a drawing tool is active. Previously, selecting a drawing tool displayed the crosshairs, and selecting "no tool" hid them. Now, the crosshairs will display when a user manually enables them and undisplay when a user disables them.

    User-controlled crosshairs
    Figure. The user, not the drawing tool, selects when crosshairs display.

    In order to indicate that a drawing tool is active, the cursor itself will change to a crosshair cursor.

    If a user is on a mobile device, the crosshairs will continue to display whenever a drawing tool is active.

    • New CIQ.ChartEngine.preferences.displayCrosshairsWithDrawingTool preference, a boolean, can be set in the default chart configuration object. If set to true, then crosshairs always display when user selects a drawing tool and undisplay when user selects "no tool" (unless the user has enabled them manually).