Signal Exports

Numerai

Introduction

Numerai is a platform where you can earn rewards by uploading unique live trading signals for a universe of US Equities. The regular Numerai Tournament is built around a free dataset they provide, but with Numerai Signals, you can now use any dataset to generate your trading signals. Through our Numerai integration, you can use our rich library of alternative datasets or your own custom datasets to create and automate your Numerai Signal submissions.

Add Providers

To export signals to Numerai from your algorithm, during initialization, add a Numerai signal export provider.

SignalExport.AddSignalExportProviders(new NumeraiSignalExport(publicId, secretId, modelId, fileName));
self.signal_export.add_signal_export_providers(NumeraiSignalExport(publicId, secretId, modelId, fileName))

The NumeraiSignalExport constructor accepts the following arguments:

Argument: publicId

Your Numerai API key. To create and view your API keys, see the Automation section of your Account page on the Numerai website.

Data Type: stringstr | Default Value: None

Argument: secretId

Your Numerai API secret. You get your API secret when you create a new API key.

Data Type: stringstr | Default Value: None

Argument: modelId

The Id of the Numerai model. Follow these steps to get the model Id:

  1. Open the Models page on the Numerai website.
  2. In the Models section, click the three dots next to a model.
  3. Click Copy Model ID.

Data Type: stringstr | Default Value: ""

Argument: fileName

The name for the signal file. If you use a file name that already exists, the new file overwrites the old one.

Data Type: stringstr | Default Value: "predictions.csv"

You can add multiple signal export providers to a single algorithm.

Asset Classes

Our Numerai integration supports signals for US Equities.

Universe Selection

The Numerai Signals stock market universe covers roughly the top 5,000 largest stocks in the world. The universe available on QuantConnect that's the closest match to the Numerai Signals universe is the CRSP US Total Market Index, which represents approximately 100% of the investable US Equity market regularly traded on the New York Stock Exchange and Nasdaq. This Index doesn't contain all of the stocks in the Numerai Signals universe, but you don't need to submit signals for all the stocks in the Numerai Signals universe.

To get the constituents of the CRSP US Total Market Index, add an ETF constituents universe for the Vanguard Total Stock Market ETF, VTI.

UniverseSettings.Asynchronous = true;
_etfSymbol = AddEquity("VTI").Symbol;
AddUniverse(Universe.ETF(_etfSymbol));
self.universe_settings.asynchronous = True
self.etf_symbol = self.add_equity("VTI").symbol 
self.add_universe(self.universe.etf(self.etf_symbol))

Schedule Submissions

Every Tuesday, Wednesday, Thursday, Friday, and Saturday of the week, a new round is open for you to submit signals. Saturday rounds open at 18:00 UTC, and the submission window is open until Monday 14:30 UTC. Weekday rounds open at 13:00 UTC, and the submission window is open for 1 hour. For more information about the competition rounds, see Rounds in the Numerai documentation.

To schedule your submissions, you can set a Scheduled Event during initialization.

Schedule.On(
    DateRules.EveryDay(_etfSymbol),
    TimeRules.At(13, 0, TimeZones.Utc), 
    SubmitSignals);
self.schedule.on(
    self.date_rules.every_day(self.etf_symbol),
    self.time_rules.at(13, 0, TimeZones.UTC), 
    self.submit_signals)

Send Portfolio Targets

To send targets, pass a list of PortfolioTarget objects to the SetTargetPortfolio method. The method returns a boolean that represents if the targets were successfully sent to Numerai Signals. In this situation, the number you pass to the PortfolioTarget constructor represents the portfolio weight. Don't use the PortfolioTarget.Percent method.

var success = SignalExport.SetTargetPortfolio(targets);
success = self.signal_export.set_target_portfolio(targets)

Signal Requirements

When you submit signals to Numerai, abide by the following rules:

  • All signals must have a quantity between 0 and 1 (exclusive)
  • You must submit at least 10 different signals per submission
  • At least one of the weights in every batch of signals must be unique

You can also see our Videos. You can also get in touch with us via Discord.

Did you find this page helpful?

Contribute to the documentation: