Skip to main content

FlashAlpha options-flow and dealer-positioning data as QuantConnect LEAN custom-data bars. GEX, DEX, VEX, vol surface, 0DTE, VRP, max-pain.

Project description

flashalpha-quantconnect

FlashAlpha options-flow and dealer-positioning data as native QuantConnect LEAN custom-data bars — C# (NuGet) and Python (PyPI).

Subscribe to GEX (gamma exposure), DEX, VEX, CHEX, the full exposure summary, a smoothed implied-vol surface, 0DTE pin-risk + dealer hedging flows, max-pain, VRP (variance risk premium), advanced volatility (SVI, variance swaps), narrative summaries, stock + option quote books, a coverage universe — seventeen endpoint families — and read them from OnData exactly like any other LEAN bar. Backtest dealer-flow strategies on QuantConnect Cloud or self-hosted LEAN with one AddData<…> line per data type.

NuGet PyPI CI License: MIT


What it does

flashalpha-quantconnect is the official QuantConnect LEAN bridge for the FlashAlpha historical API. It plumbs FlashAlpha's options-flow and dealer-positioning analytics into LEAN as first-class custom-data bars so a backtest just calls AddData<FlashAlphaGexBar>("SPY") (or algorithm.AddData(GexBar, "SPY") in Python) and the bars stream into OnData with full per-strike detail — gamma flips, pin probabilities, IV grids, 0DTE Greeks, VRP scores — all timestamped, all replayable, all version-pinned to the underlying SDK so schema drift dies at compile time.

Family Endpoint slug C# bar class Python bar class
GEX exposure/gex FlashAlphaGexBar GexBar
DEX exposure/dex FlashAlphaDexBar DexBar
VEX exposure/vex FlashAlphaVexBar VexBar
CHEX exposure/chex FlashAlphaChexBar ChexBar
Exposure summary exposure/summary FlashAlphaExposureSummaryBar ExposureSummaryBar
Exposure levels exposure/levels FlashAlphaExposureLevelsBar ExposureLevelsBar
Vol surface surface FlashAlphaSurfaceBar SurfaceBar
Zero-DTE exposure/zero-dte FlashAlphaZeroDteBar ZeroDteBar
Max pain max-pain FlashAlphaMaxPainBar MaxPainBar
Volatility volatility FlashAlphaVolatilityBar VolatilityBar
Advanced vol adv-volatility FlashAlphaAdvVolatilityBar AdvVolatilityBar
VRP vrp FlashAlphaVrpBar VrpBar
Narrative narrative FlashAlphaNarrativeBar NarrativeBar
Stock summary stock/summary FlashAlphaStockSummaryBar StockSummaryBar
Stock quote stock/quote FlashAlphaStockQuoteBar StockQuoteBar
Option quote option/quote FlashAlphaOptionQuoteBar OptionQuoteBar
Tickers (coverage) tickers FlashAlphaTickersBar + universe TickersBar + universe

Full reference: docs/data-types.md.


Install

QuantConnect Cloud (C# or Python)

Both packages are pre-installed in QC Cloud — no pip install or NuGet ceremony. Add your API key to Project → Parameters with the key flashalpha-api-key and paste the value (get one at flashalpha.com). The bridge resolves it via GetParameter on the first request.

Self-hosted LEAN — C# (NuGet)

dotnet add package FlashAlpha.QuantConnect

Or in .csproj:

<PackageReference Include="FlashAlpha.QuantConnect" Version="0.1.0" />

Set the key as an env var so LEAN picks it up:

export FLASHALPHA_API_KEY="fa_live_..."

Self-hosted LEAN — Python (PyPI)

pip install flashalpha-quantconnect

Same env var:

export FLASHALPHA_API_KEY="fa_live_..."

Full auth setup — including CI secrets and key resolution order — lives in docs/auth.md.


QuantConnect GEX — first algorithm

Long when the dealer gamma regime is positive, flat otherwise. Sixty seconds, both languages.

C#

using FlashAlpha.QuantConnect;
using FlashAlpha.QuantConnect.Data;
using QuantConnect;
using QuantConnect.Algorithm;
using QuantConnect.Data;

public class GexRegimeAlgorithm : QCAlgorithm
{
    private Symbol _spy;
    private Symbol _gex;

    public override void Initialize()
    {
        SetStartDate(2024, 1, 1);
        SetEndDate(2024, 12, 31);
        SetCash(100_000);

        _spy = AddEquity("SPY", Resolution.Daily).Symbol;
        _gex = this.AddFlashAlphaGex("SPY").Symbol;
    }

    public override void OnData(Slice slice)
    {
        if (!slice.ContainsKey(_gex)) return;
        var bar = slice.Get<FlashAlphaGexBar>(_gex);
        if (bar == null) return;

        var longRegime = bar.NetGexLabel == "positive";
        SetHoldings(_spy, longRegime ? 1.0m : 0m);
    }
}

Python

from AlgorithmImports import *
from flashalpha_quantconnect import GexBar, add_flashalpha_gex


class GexRegimeAlgorithm(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2024, 1, 1)
        self.SetEndDate(2024, 12, 31)
        self.SetCash(100_000)

        self.spy = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.gex = add_flashalpha_gex(self, "SPY").Symbol

    def OnData(self, slice):
        if self.gex not in slice:
            return
        bar = slice[self.gex]
        long_regime = bar.NetGexLabel == "positive"
        self.SetHoldings(self.spy, 1.0 if long_regime else 0.0)

Five more end-to-end recipes — pair-by-ticker with equity bars, 0DTE pin-risk gating, vol-surface snapshots, universe selection by GEX regime — are in docs/recipes/.


Data catalog

Every bar lives at https://historical.flashalpha.com/docs/<endpoint>. Full field tables and side-by-side OnData samples are in docs/data-types.md.

Family Endpoint C# class Python class
GEX exposure/gex FlashAlphaGexBar GexBar
DEX exposure/dex FlashAlphaDexBar DexBar
VEX exposure/vex FlashAlphaVexBar VexBar
CHEX exposure/chex FlashAlphaChexBar ChexBar
Exposure summary exposure/summary FlashAlphaExposureSummaryBar ExposureSummaryBar
Exposure levels exposure/levels FlashAlphaExposureLevelsBar ExposureLevelsBar
Vol surface surface FlashAlphaSurfaceBar SurfaceBar
Zero-DTE exposure/zero-dte FlashAlphaZeroDteBar ZeroDteBar
Max pain max-pain FlashAlphaMaxPainBar MaxPainBar
Volatility volatility FlashAlphaVolatilityBar VolatilityBar
Advanced vol adv-volatility FlashAlphaAdvVolatilityBar AdvVolatilityBar
VRP vrp FlashAlphaVrpBar VrpBar
Narrative narrative FlashAlphaNarrativeBar NarrativeBar
Stock summary stock/summary FlashAlphaStockSummaryBar StockSummaryBar
Stock quote stock/quote FlashAlphaStockQuoteBar StockQuoteBar
Option quote option/quote FlashAlphaOptionQuoteBar OptionQuoteBar
Tickers (coverage) tickers FlashAlphaTickersBar TickersBar

Sugar extensions: every bar has a one-liner — algo.AddFlashAlphaGex("SPY") in C#, add_flashalpha_gex(self, "SPY") in Python — that's equivalent to AddData<FlashAlphaGexBar>("SPY", Resolution.Daily) / self.AddData(GexBar, "SPY", Resolution.Daily) with the daily default already baked in.


Auth

Get an API key at flashalpha.com. The bridge resolves the key in this order:

  1. Explicit overrideFlashAlphaConfig.ApiKey = "fa_live_…" in C#, config.api_key = "fa_live_…" in Python.
  2. QC Cloud parameter — set flashalpha-api-key under Project → Parameters.
  3. Environment variableFLASHALPHA_API_KEY for self-hosted LEAN.

If all three miss the bridge throws FlashAlphaAuthMissingException (error code FA-AUTH-001). Full setup — including CI, dotenv, and secrets hygiene — in docs/auth.md.


Resolution → API cost

LEAN resolution drives how often the bridge calls the FlashAlpha API. Pick the lowest resolution that satisfies your strategy.

LEAN resolution FlashAlpha calls per ticker per trading day Notes
Resolution.Daily 1 Default. One end-of-day snapshot. Cheapest.
Resolution.Hour ~7 RTH hourly bars (09:30, 10:30, … 15:30).
Resolution.Minute ~390 Heavy. Use for research minute-of-the-day studies.
Resolution.Tick not supported The historical API isn't tick-granular.

A 252-day daily backtest of GEX on SPY is 252 API calls. The same backtest at minute resolution is ~98k calls — same data, just more snapshots per session.


QuantConnect 0DTE — recipes

Five end-to-end recipes, each a copy-paste template:


FAQ

Why does FlashAlpha use a separate custom-data Symbol from AddEquity?

QC's custom-data subscription system mints a fresh Symbol for each AddData<T>(ticker, …) call — distinct from the equity Symbol returned by AddEquity(ticker, …). The two are not interchangeable in Slice lookups. Typical algos hold both symbols as fields and pair them by ticker string in OnData. There's a worked example in docs/recipes/combine-flashalpha-with-equity-data.md and a deeper dive at docs/troubleshooting.md#why-two-symbols.

What's the API cost per backtest day?

One FlashAlpha API call per ticker per bar. At Resolution.Daily (the default) that's one call per ticker per trading day — a 252-day SPY-only GEX backtest is 252 calls. At Resolution.Minute it's ~390 calls per ticker per day. The bridge has an in-process cache so duplicate subscriptions on the same (endpoint, ticker, date) reuse the response.

Does this work in QC Cloud?

Yes. Both the NuGet and PyPI packages are available in the QC Cloud project environment. Add your API key under Project → Parameters with the key flashalpha-api-key and the bridge picks it up via GetParameter. No env-var setup needed.

How is this different from polygon/CBOE feeds?

Polygon and CBOE ship the raw chain — quotes, OI, Greeks. FlashAlpha ships the positioning analytics derived from that chain: net dealer GEX/DEX/VEX/CHEX, the gamma flip strike, call/put walls, 0DTE pin probability, dealer hedging-flow estimates, the smoothed IV surface and SVI parameters, VRP and harvest scores, plain-English narrative summaries. You can feed FlashAlpha and raw option data into the same algorithm — see docs/recipes/combine-flashalpha-with-equity-data.md.

Can I use this for live trading?

The current bar set targets the historical endpoint family — meant for backtests and research, not live signals. The same bars will work live in LEAN when the FlashAlpha realtime endpoints land; the subscription surface won't change. Track github.com/FlashAlpha-lab/flashalpha-quantconnect/issues for live-mode milestones.

What's the relationship to the flashalpha-historical SDK?

flashalpha-historical is the raw cross-language SDK for the FlashAlpha historical API — available for Python, .NET, Node, Go, and Java. flashalpha-quantconnect is the LEAN adapter on top of it. The bridge's C# bars depend on FlashAlpha.Historical's typed response models so any schema drift in the SDK breaks the build, never silently corrupts a bar. You generally don't import the SDK directly — AddData<…> is the user-facing surface.


Related


License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flashalpha_quantconnect-0.1.2.tar.gz (35.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flashalpha_quantconnect-0.1.2-py3-none-any.whl (32.3 kB view details)

Uploaded Python 3

File details

Details for the file flashalpha_quantconnect-0.1.2.tar.gz.

File metadata

  • Download URL: flashalpha_quantconnect-0.1.2.tar.gz
  • Upload date:
  • Size: 35.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for flashalpha_quantconnect-0.1.2.tar.gz
Algorithm Hash digest
SHA256 20524f43ecb7aaaba921b06c944d1b82d3ea81c933e2856821a25cdd62ad17d1
MD5 c126337d8fd72c2708188dbe1b6e2a65
BLAKE2b-256 aac757752e3a19cfdd0f68589ee03c9e6cc6986b8c03469834f13e5dc5fc49d2

See more details on using hashes here.

File details

Details for the file flashalpha_quantconnect-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for flashalpha_quantconnect-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8e52b3e8df902ca3e8ee78252c0c7c14baffdc76155200decb11a6088d126bea
MD5 95350f1736a271546ca06d495ab47f89
BLAKE2b-256 6125e67739aeb124b6174dc020029f83c6f9e2f0ec63db1c447b67df402cb843

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page