MCPcopy
hub / github.com/cuemacro/finmarketpy

github.com/cuemacro/finmarketpy @v0.11.19 sqlite

repository ↗ · DeepWiki ↗ · release v0.11.19 ↗
400 symbols 1,293 edges 58 files 101 documented · 25%
README

finmarketpy (formerly pythalesians)

Downloads

finmarketpy is a Python based library that enables you to analyze market data and also to backtest trading strategies using a simple to use API, which has prebuilt templates for you to define backtest. Included in the library

  • Prebuilt templates for backtesting trading strategies
  • Display historical returns for trading strategies
  • Investigate seasonality of trading strategies
  • Conduct market event studies around data events
  • In built calculator for risk weighting using volatility targeting
  • Written in object oriented way to make code more reusable

Contributors for the project are very much welcome, see below!

Merging with pythalesians

I had previously written the open source PyThalesians financial library (which has been merged with this - so can focus on maintaining one set of libraries). This new finmarketpy library has * Similar functionality to the trading part of pythalesians * Rewritten the API to make it much cleaner and easier to use, as well as having many new features. * finmarketpy requires the libraries, which I've written chartpy (for charts) and findatapy (for loading market data) to function * By splitting up into smaller more specialised libraries, it should make it easier for contributors * Using findatapy, you can download market data easily from Bloomberg, Quandl, Yahoo etc * Using chartpy, you can choose to have results displayed in matplotlib, plotly or bokeh by changing single keyword!

Points to note: * Please bear in mind at present finmarketpy is under continual development. The API is heavily documented, but we are looking to add more general documentation. * Uses Apache 2.0 licence

Gallery

Calculate the cumulative returns of a trading strategy historically (see finmarketpy_examples/tradingmodelfxtrend_example.py)

Plot the leverage of the strategy over time

Plot the individual trade returns

Calculate seasonality of any asset: here we show gold and FX volatility seasonality (see examples/seasonality_examples.py)

Calculate event study around events for asset (see examples/events_examples.py)

Requirements

Major requirements * Required: Python 3.10 * Required: pandas, numpy etc. * Required: findatapy for downloading market data (https://github.com/cuemacro/findatapy) * Required: chartpy for funky interactive plots (https://github.com/cuemacro/chartpy)

Installation

For detailed installation instructions for finmarketpy and its associated Python libraries go to https://github.com/cuemacro/finmarketpy/blob/master/INSTALL.md (which includes details on how to setup your entire Python environment).

Also take a look at https://github.com/cuemacro/teaching/blob/master/pythoncourse/installation/installing_anaconda_and_pycharm.ipynb from my Python for finance workshop course, where I keep notes specifically about setting up your Anaconda environment for data science (including for findatapy/chartpy/finmarketpy) etc.

You can install the library using the below (better to get the newest version from repo, as opposed to releases).

After installation: * Make sure you edit the marketconstants.py file (or you can create a marketcred.py file to overwrite the settings)

pip install git+https://github.com/cuemacro/finmarketpy.git

But beforehand please make sure you have already installed both chartpy, findatapy and any other dependencies. In chartpy you will need to change the chartconstants.py file (to add Plotly API key) and for findatapy, you will also need to change the dataconstants.py file to add the Quandl API (and possibly change other configuration settings there or add a datacred.py file in the util folder, alternatively you will be prompted on your first run to input the API key which will be installed). If you do pip with git you'll get the very latest commit.

pip install git+https://github.com/cuemacro/chartpy.git
pip install git+https://github.com/cuemacro/findatapy.git

However you can also pip install to get from PyPI (might be a slighter older version from that on GitHub)

pip install chartpy
pip install findatapy

FinancePy is an optional dependency for finmarketpy for option pricing. It is recommended to install it separately from PyPI after installing finmarketpy, and without dependencies otherwise it can cause clashes with other libraries (because of its strict version dependencies on libraries like llvmlite, which in practice can be relaxed). The API changes a lot so it recommended to install the specific version listed below.

pip install numba numpy scipy llvmlite ipython pandas prettytable
pip install financepy==0.370 --no-deps

Binder and Jupyter - Run finmarketpy in your browser

You can run some of the Jupyter notebooks in Binder interactively in your browser to play around with finmarketpy. It might take a few minutes for the Binder instance to start. We are currently working on having more notebooks in Binder, so stay tuned!

Note that you will need to get a Quandl API key to download market data to use some of these, and you can sign up for a free account at https://www.quandl.com.

Synchronizing your fork of finmarketpy with master

I found this article useful for explaining how to update your fork to match the master changes.

Contributors

Contributors are always welcome for finmarketpy, findatapy and chartpy. If you'd like to contribute, have a look at Planned Features for areas we're looking for help on. Or if you have any ideas for improvements to the libriares please let us know too!

Sponsorship, workshops and support for Cuemacro libraries

We have spent many years writing finmarketpy and other open source libraries at Cuemacro, and we are keen to do so for many years into the future.

If you using our libraries and are interested in sponsoring Cuemacro's open source libraries, you can do so through the GitHub sponsorship page at https://github.com/sponsors/cuemacro

We also offer commercial services for our Cuemacro libraries, which include:

  • a 2 day Python for finance workshop, which can be taught at your firm, to teach you how to use Cuemacro's libraries
  • extensive commercial technical support for our libraries

If you are interested in our commercial services please contact saeed@cuemacro.com

All these sources of funding, whether it is sponsorship or our commercial services, help us to maintain Cuemacro's libraries, so we can improve our open source libraries for the community.

Problems with Numba and doing options pricing in finmarketpy/financepy

Underneath finmarketpy uses financepy to do option pricing. It uses Numba to speed up the computation.

You may sometimes experience Numba errors like such as Failed in nopython mode pipeline (step: nopython frontend)

One possible way to fix this is to delete the __pycache__ folders underneath wherever financepy is installed:

Eg. if you are using the py310class environment, if you've installed Anaconda in C:\Anaconda3, you might find the financepy folder at the below location

C:\Anaconda3\envs\py310class\Lib\site-packages\financepy

To upgrade only finmarketpy and other Cuemacro packages (and no dependencies)

pip install -U --no-deps finmarketpy findatapy chartpy

finmarketpy examples

In finmarketpy/examples you will find several examples, including some simple trading models

Release Notes

  • 0.11.19 - finmarketpy (09 Mar 2025)
  • 0.11.16 - finmarketpy (08 Mar 2025)
  • 0.11.15 - finmarketpy (08 Mar 2025)
  • 0.11.14 - finmarketpy (19 May 2024)
  • 0.11.13 - finmarketpy (01 Jan 2024)
  • 0.11.12 - finmarketpy (26 Apr 2023)
  • 0.11.11 - finmarketpy (07 Oct 2021)
  • 0.11.10 - finmarketpy (06 Oct 2021)
  • 0.11.9 - finmarketpy (01 Jun 2021)
  • 0.11.8 - finmarketpy (25 Jan 2021)
  • 0.11.7 - finmarketpy (20 Oct 2020)
  • 0.11.6 - finmarketpy (02 Oct 2020)
  • 0.11.5 - finmarketpy (24 Aug 2020)
  • 0.11.4 - finmarketpy (06 May 2020)
  • 0.11.3 - finmarketpy (04 Dec 2019)
  • 0.11.1 - finmarketpy (23 Oct 2019)
  • 0.11 - finmarketpy
  • First prerelease version

Coding log

finmarketpy log

  • 09 Mar 2025
  • Removed FinancePy from pyproject.toml
  • 08 Mar 2025
  • Make FinancePy an optional dependency
  • Fixed various deprecation messages related Pandas
  • Made Plotly charts look nicer (autoscale with latest ChartPy)
  • 07 Mar 2025
  • Merge changes for pyproject.toml etc.
  • Formatting towards PEP8
  • 09 Nov 2024
  • Changed trend following example to use FRED
  • 19 May 2024
  • Fixed run in parallel bug on
  • 01 Apr 2024
  • Added Jupyter notebook for new ArcticDB support from findatapy
  • 01 Jan 2024
  • Helper code to reduce boiler plate code for TradingModel
  • Upgraded to FinancePy 0.310 and refactored FXVolSurface
  • 26 Apr 2023
  • Changed sklearn to scikit-learn dependency
  • 05 Apr 2022
  • Set FinancePy version required to 0.220 and refactored FXVolSurface for this
  • 07 Oct 2021
  • Set FinancePy version required to 0.193
  • 23 Sep 2021
  • Fixed bug in YoY plot
  • 23 Jul 2021
  • Added roll costs in backtest
  • 30 May 2021
  • Added S3 Jupyter notebook for use with findatapy
  • 21 May 2021
  • Fix bug with plotting vol target charts when vol targeting is off
  • 12 May 2021
  • Fixed bug when calculating benchmark return statistics in TradingModel with different start/finish date
  • 04 May 2021
  • Revamped Jupyter notebook for downloading market data with findatapy
  • 28 Apr 2021
  • Added signal multiplier parameter for charts
  • 21 Apr 2021
  • Format changes to TradingModel charts
  • 15 Apr 2021
  • Constant overrides now persist
  • 13 Apr 2021
  • Replaced loc with iloc in TechIndicator to remove Pandas deprecated functionality
  • 08 Apr 2021
  • Fixed EventStudy issue when start window is before time series
  • 21 Mar 2021
  • Fixed issue with EventStudy
  • Refactored TradingModel when constructing weights
  • 22 Feb 2021
  • Fix bug when plotting IR of strategies
  • 16 Feb 2021
  • Added total returns in example for options indices construction
  • 11 Feb 2021
  • Refactored to use join from Calculations instead of pandas_outer_join
  • Allowed backtesting by fields other than close
  • Customize strike range for extracting FX vol surface
  • 22 Jan 2021
  • FX spot total returns now supports intraday data and added example
  • Fixed problem with Numba implementation of FX spot total returns
  • 17 Jan 2021
  • Fix vol surface examples to work with new FXVolSurface
  • 16 Jan 2021
  • Additional work on FXOptionPricer and total returns (FXOptionCurve)
    • Speed up and deal with non-convergence of solver
    • Allow options entry on user specified dates
  • Added more option examples
  • 11 Jan 2021
  • Fixed issue with OTM strikes in FXOptionPricer
  • 10 Jan 2021
  • Fixed incorrect pushing of 10d quotes on FX vol surface
  • Added extra parameters for FXOptionsCurve, freezing FX implied, calendar etc.
  • 09 Jan 2021
  • Fixed dom/for rate in FX vol surface
  • Fixed additive index
  • Still sorting issues with total return indices for FX options
  • 08 Jan 2021
  • Added total returns for straddle (with example)
  • Fixed positioning flip and expiring on day without market data on FXOptionsCurve
  • 08 Jan 2021
  • Changed FXVolSurface to fit better with newest FinancePy
  • Added missing FXOptionsCurve class
  • 07 Jan 2021
  • Added FX vanilla option pricing (via FinancePy)
  • Calculate total return indices for FX vanilla options
  • 26 Dec 2020
    • Refactored classes to take into account new Calendar object from findatapy
  • 24 Dec 2020
    • Added FX forwards pricer with examples
    • Interpolation of odd dates
    • Implied depo calculations
    • Added FX forwards total return calculator with examples
    • Rewrote FX spot indices construction to use Numba
  • 20 Dec 2020
  • Changed typo in licence at top of scripts
  • 19 Dec 2020
  • Added VolStats and examples to calculate realized vol, vol risk premium and implied vol addons
  • Added FX total return calculations for FX spot positions
  • Begun to add FX total return calculations for FX forwards (incomplete)
  • Adapted FX vol code to latest version of FinancePy (note, may need to download via GitHub instead of PyPI)
  • Also calculated implied PDF for FX vol surface using FinancePy underneath
  • 04 Dec 2020
    • Fix imports in FX vol interpolation
  • 02 Dec 2020
    • Added FX vol surface interpolation (using FinancePy library underneath) + animated example
  • 12 Nov 2020
    • Added Binder, so can run notebooks interactively
    • Edited backtest_example Jupyter notebook with more description
  • 11 Nov 2020
    • Added cumulative additive index flag for backtests
  • 20 Oct 2020
    • Fixed missing GBP depo tickers
    • Fixed startup on newer MacOS
  • 02 Oct 2020
    • Fixed vol surface calculation
  • 24 Aug 2020
    • Replaced .ix to work with later versions of pandas

Core symbols most depended-on inside this repo

create_tech_ind
called by 32
finmarketpy/economics/techindicator.py
get_signal
called by 30
finmarketpy/economics/techindicator.py
get_techind
called by 29
finmarketpy/economics/techindicator.py
price_instrument
called by 14
finmarketpy/curve/abstractpricer.py
fillna
called by 12
finmarketpy/economics/techindicator.py
build_vol_surface
called by 8
finmarketpy/curve/volatility/fxvolsurface.py
run_strategy_returns_stats
called by 7
finmarketpy/backtest/tradeanalysis.py
construct_total_return_index
called by 7
finmarketpy/curve/fxspotcurve.py

Shape

Method 347
Class 30
Function 17
Route 6

Languages

Python100%

Modules by API surface

finmarketpy/backtest/backtestengine.py132 symbols
finmarketpy/backtest/backtestrequest.py52 symbols
finmarketpy/curve/volatility/fxvolsurface.py35 symbols
finmarketpy/economics/eventstudy.py29 symbols
finmarketpy/economics/techindicator.py17 symbols
finmarketpy/curve/rates/fxforwardspricer.py15 symbols
finmarketpy/curve/fxspotcurve.py11 symbols
finmarketpy/backtest/tradeanalysis.py11 symbols
finmarketpy/curve/fxoptionscurve.py10 symbols
finmarketpy/economics/seasonality.py9 symbols
finmarketpy/curve/fxforwardscurve.py9 symbols
finmarketpy/curve/volatility/abstractvolsurface.py8 symbols

Dependencies from manifests, versioned

blosc
chartpy
findatapy
numba
pandas1.5.3 · 1×
seasonal

For agents

$ claude mcp add finmarketpy \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact