マルチエージェントシステムによる金融シグナル発見の自動化と最適化
NVIDIA は NeMo Agent Toolkit と Nemotron モデルを活用し、定量化研究の信号発見プロセスを自動化するマルチエージェントシステムの実装例を公開した。
キーポイント
従来の手作業プロセスの課題解消
従来、定量化研究者が手動で仮説を立ててコード化・バックテストを行う非効率なワークフローに対し、AI エージェントによる自動化で市場変動に即した高速な研究サイクルを実現する。
3 つの専門エージェントによる自律的ループ
信号発見(Signal agent)、コード生成(Code agent)、評価・改善(Evaluation agent)という 3 つの役割を持つエージェントが協調し、自己進化型の自律的な研究ループを構築する。
NVIDIA のオープンソース技術スタック
NVIDIA Nemotron ファミリーのオープンモデルと NeMo Agent Toolkit を組み合わせることで、複雑な研究タスクの計画実行や Python コードの実行・検証を可能にする。
NeMo Agent Toolkit の役割
複雑な研究タスクの計画、Python コードの実行ツール使用、バックテスト結果に基づく仮説の自己改善を可能にするオーケストレーション層を提供します。
3 つの専門エージェントによる継続サイクル
提案されたシステムは、作成・実行・改良という連続的なサイクルで相互作用する 3 つの専門エージェントから構成されています。
専門特化型マルチエージェントアーキテクチャ
NeMo Agent Toolkitを活用し、シグナル生成、コード実行、評価の3つの役割を持つ専用エージェントが継続的なループを形成して金融シグナルを発見・最適化する。
自律的な創造と改善サイクル
シグナルの作成、実行、そしてその結果に基づく改良というプロセスを自動化することで、人間の手を介さずに高品質な定量取引戦略を探索する。
重要な引用
Agentic AI is bridging the gap between human expertise and automated efficiency.
The system coordinates three specialized agents: Signal agent, Code agent, and Evaluation agent.
The NeMo Agent Toolkit provides the orchestration layer to build intelligent agents that plan complex research tasks, use tools to execute Python code, and reflect on backtesting results to refine their own hypotheses.
Our proposed system consists of three specialized agents that interact in a continuous cycle of creation, execution, and refinement.
Architecture of the quantitative signal discovery agent developer example, which uses the NeMo Agent Toolkit to orchestrate three specialized agents—Signal Agent, Code Agent, and Evaluation Agent—in a continuous loop of creation, execution, and refinement for financial signal discovery.
"You are a senior quantitative researcher at a top hedge fund. Generate {config.num_signals} unique stock selection signals based on the request"
影響分析・編集コメントを表示
影響分析
この記事は、AI エージェント技術が単なる実験段階から、高頻度取引や定量化研究といった実社会の複雑な意思決定プロセスへ本格的に導入されつつあることを示しています。特に、専門知識を持つ人間の役割を「手作業の実行」から「システム設計と監査」へとシフトさせるパラダイムシフトを加速させ、金融業界における AI 採用のスピードと精度を劇的に向上させる可能性があります。
編集コメント
金融分野における「AI エージェント」の実用化事例として、具体的なアーキテクチャと技術スタックが提示されており、業界への即応性を高める重要な一手です。
定量的金融において、研究者は資産、デリバティブ、およびその他の金融商品を取引するためのアルゴリズムを構築します。その作業の重要な部分はシグナル(信号)を見つけることです。これは、将来のリターンを予測する可能性のある、不揃いな市場データ内のパターンです。これらのシグナルは、価格や出来高データ、経済指標、ファンダメンタルズ、あるいはニュースセンチメントのような代替ソースから得られることがあります。
長年にわたり、クオンツ(定量的)企業は主に手作業でシグナルを発見し、テストしてきました。伝統的に、定量的研究者は数百の潜在的なシグナルについて、仮説を立て、コードを書き、バックテストを行い、改良するという作業を手動で行う必要があります。このワークフローは断片的であり、データサイエンティスト、開発者、アナリストの間を移動するため、ミリ秒単位で動く市場において大きな遅延を生み出しています。現在、AI はこのワークフローの一部を自動化し、研究サイクルを加速させることができます。NVIDIA による 定量的シグナル発見エージェント開発者の例 は、NVIDIA Nemotron オープンモデルファミリーと NVIDIA NeMo エージェントツールキット オープンソースライブラリを用いて構築されたエージェントアーキテクチャを使用して、シグナル発見を自動化する方法を示しています。
このブログ記事では、NeMo エージェントツールキットを使用して信号発見のためのエージェントシステムを構築する完全な例をご紹介します。
シグナル発見のためのエージェントシステム
エージェント型 AI は、人間の専門知識と自動化された効率性の間のギャップを埋めています。私たちは NeMo Agent Toolkit を用いてシグナル発見エージェントのシステムを設計し、手作業による地道な作業から、自己進化型の自律的なループへとシグナル発見を変革しました。その結果、エージェント型システムの設計、テスト、最適化が痛みなく行えるプロセスとなりました。
このシステムは、3 つの専門化されたエージェントを調整します:
- シグナルエージェント:市場データから潜在的なアルファシグナルを特定する。
- コードエージェント:シグナルの説明を実行可能な Python コードに変換する。
- 評価エージェント:バックテストを実行し、論理的評価を適用してシグナルの提案を反復的に洗練させる。
NeMo Agent Toolkit によるマルチエージェント型シグナル発見ループ
NeMo Agent Toolkit は、複雑な研究タスクを計画し、ツールを使用して Python コードを実行し、バックテスト結果を振り返って自身の仮説を洗練させるインテリジェントなエージェントを構築するためのオーケストレーション層を提供します。私たちが提案するシステムは、作成、実行、洗練の継続的なサイクルで相互作用する 3 つの専門化されたエージェントから構成されています。NeMo Agent Toolkit はこれらのエージェント間の「ハンドオフ」を管理し、シグナル定義やバックテスト結果などのコンテキストがワークフロー全体を通じて保持されるように保証します。
image*図 1. クオンティティブシグナル発見エージェント開発者の例のアーキテクチャ*
シグナルジェネレーター
このエージェントは創造的な脳として機能し、NVIDIA NIM を通じて nemotron-3-nano-30b-a3b を使用して新しいシグナル表現を仮説立てます。エージェントの中核となる目的を定義するために、以下のシステムプロンプトを設計しました:「あなたは一流のヘッジファンドに所属するシニア・クオンツ研究者です。リクエストに基づいて {config.num_signals} 個のユニークな株式選別シグナルを生成してください」。
論理的に妥当な結果を生み出し、数学的な「ハルシネーション(幻覚)」を防ぐために、構築ブロックとして構造化された数値計算ライブラリを提供しました。各計算機は、名前、署名、意味を含む辞書形式です。今回の例では、算術演算、数学関数(abs, clip, power)、ランク付け、時系列データ(ログ収益率、モメンタム、デルタ)などからなる 66 の異なる演算子が含まれています。例えば、「Rank_Add」は、価格やボリュームなどの2つの異なるデータセットを共通の 0 から 1 の百分位スケールに正規化し、それらを合計する処理を行います。解釈と Python コードを提供することで、エージェントがさまざまな市場シグナルを組み合わせて、単一のバランスの取れたスコアを作成できるようにしています。
{
"name": "Rank_Add",
"signature": "Rank_Add(x: pd.DataFrame, y: pd.DataFrame) -> pd.DataFrame",
"meanings": "DataFrame x の要素の量子化値と、DataFrame y の対応する要素の量子化値の合計を返します。"
}
翻訳全文
仮説が形成されると、コードエージェントは自然言語のアイデアを実行可能な Python コードに変換します。NeMo Agent Toolkit エコシステムにおいて、このエージェントはツール呼び出しとコード生成のために特別に調整されています。シグナルエージェントから受け取った設計図に基づき、歴史的な価格・出来高データに対してシグナルを計算する Python コードを生成します。ここで、calculator.json の演算子実装が自動的にインライン化されるため、結果として得られるモジュールは自己完結型でポータブルなものになります。
評価エージェント
このエージェントは、コードエージェントから受け取った生データを処理し、シグナルが価格変動をどの程度予測できるかを定量化する情報係数 (Information Coefficient) およびランク IC (Rank IC) メトリクスを計算します。定量研究において、ランク IC とは、シグナル値の順位と、その後の資産リターンの順位との間の相関関係です。
標準的なピアソン IC と異なり、ランク IC は外れ値に対してより頑健であり、資産の相対的な順序に焦点を当てます。これはランキングベースの取引戦略を構築する上で不可欠な機能です。
通常、「良好」な機関向けグレードのシグナルは、平均ランク IC が 0.02 から 0.05 の範囲にあります。0.05 を一貫して上回るものは非常に強力なシグナルとみなされ、高頻度取引やニッチなモメンタム戦略でよく見られます。
ユーザーは、評価エージェントが生成されたシグナルをいつ受け入れるかを判断するための許容閾値を設定できます。バックテストにおいてシグナルのパフォーマンスが最適でない場合、評価エージェントは最適化の提案を生成し、それを次のイテレーションにおけるシグナル生成エージェントにフィードバックします。これにより、各 subsequent なシグナル生成が前回のものよりも洗練される自己改善ループが形成されます。
なぜ信号発見の自動化に NeMo Agent Toolkit を使うのか?
この特定のユースケースにおいてツールキットを使用することは、複数の利点をもたらします:
設定駆動型ワークフロー
ツールキットは、プロジェクトを堅牢なスクリプトから柔軟な研究プラットフォームへと移行させるのを支援します。エージェント間の相互作用をハードコードするのではなく、システムロジック(ペルソナ、ツール、制約を含む)を YAML 設定ファイル内で完全に定義します。このモジュール性により、異なるタスクに対してモデルを簡単に交換することが可能になります。例えば、仮説生成には推論能力の高いモデルを割り当てつつ、コードエージェントにはより高速でコスト効率の良いモデルを使用しても、基盤となるソースコードを変更する必要はありません。
私たちの実装では、config.yml が信号発見実験全体の唯一の真実源として機能します。IC 閾値から最適化ループの深さに至るまで、すべての重要なパラメータを一元管理します。これにより、定量的研究者は YAML ファイルを編集するだけで、前方リターン期間の調整や IC 要件の厳格化など、高速で反復的な作業が可能になります。
llms:
signal_generator:
_type: nim
model_name: nvidia/nemotron-3-nano-30b-a3b
temperature: 0.8
max_tokens: 3000
code_generator:
_type: nim
model_name: nvidia/nemotron-3-nano-30b-a3b
temperature: 0.0
max_tokens: 2000
optimization_advisor:
_type: nim
model_name: nvidia/nemotron-3-nano-30b-a3b
temperature: 0.5
max_tokens: 1000
workflow:
_type: signal_optimizer
signal_generator_llm: signal_generator
code_generator_llm: code_generator
optimization_advisor_llm: optimization_advisor
ic_threshold: 0.02
p_value_threshold: 0.05
max_iterations: 3
num_signals: 2
forward_periods: 5
組み込みの観測機能 (observability)
Arize Phoenix のトレーシング機能は、長期実行される定量的ワークフローにおける NIM パワー型の信号発見エージェントに観測性を付与します。信号発見には高遅延ループが伴うため—複雑な価格・出来高数式の生成、ベクトル化されたバックテストの実行、フィットネス評価の実施などです—Phoenix により、LLM の推論トレースをリアルタイムで可視化することが可能になります。
image*図 2. NeMo Agent Toolkit のトレーシング機能は、信号発見ワークフロー全体にわたる LLM エージェントの推論を視覚的に追跡します*
ChatNVIDIA() の呼び出し全体を通じて推論のトレースとトークン使用量を追跡することで、ボトルネックがモデルのロジック生成にあるかどうかを特定し、各ステップにおけるエージェントの思考プロセスについてより深い洞察を得ることができます。この透明性は、エージェントが数学的には妥当だが経済的な意味を持たないシグナルを出力する「沈黙した失敗」をデバッグするために不可欠であり、プロンプト戦略と発見サイクルの計算コストの両方の最適化を可能にします。
例:モメンタムベースのシグナルのマイニング
モメンタムベースのシグナルは、取引において最も一般的に使用されるものの一つです。これは、直近で好調な資産が上昇軌道を継続する傾向があり、逆に低迷している資産は下落を続けるという経験則に基づいています。このプロンプトに対してワークフローを実行してみましょう。
nat run --config_file configs/config-optimization.yml --input "momentum signals"
nat run コマンドは、YAML 設定ファイルに基づいてワークフローを起動し、生成と最適化のループを実行します。
026-04-24 14:34:02 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:353 - === Iteration 1/3 ===
2026-04-24 14:34:02 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:355 - Generating signals...
2026-04-24 14:34:10 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:360 - Generating code...
2026-04-24 14:34:13 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:366 - IC(相関係数)の評価中...
2026-04-24 14:34:13 - INFO - signal_discovery_workflow.signal_evaluator:391 - シグナル関数 2 つを検出:['signal_volume_adjusted_momentum', 'signal_20_day_price_rank_momentum']
2026-04-24 14:34:15 - INFO - signal_discovery_workflow.signal_evaluator:457 - signal_volume_adjusted_momentum:|IC| = 0.0103
2026-04-24 14:34:18 - INFO - signal_discovery_workflow.signal_evaluator:457 - signal_20_day_price_rank_momentum:|IC| = 0.0138
2026-04-24 14:34:18 - INFO - signal_discovery_workflow.signal_evaluator:472 - 最良のシグナルを選択:signal_20_day_price_rank_momentum(|IC| = 0.0138)
2026-04-24 14:34:19 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:371 - 平均 IC:-0.0138、p 値:7.202971903375044e-07
2026-04-24 14:34:19 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:413 - 最適化フィードバックを生成中...
signal_discovery_workflow.signal_discovery_optimization_workflow:353 - === イテレーション 2/3 ===
...
signal_discovery_workflow.signal_discovery_optimization_workflow:353 - === イテレーション 3/3 ===
...
3 回の最適化イテレーション後、以下の生成されたシグナルが得られました:
シグナル 1:ExpVolume-調整済みモメンタム
数式:Div(TS_Return(Close, 10), Decay_Exp(Volume, 10))
意味:指数加重ボリュームでスケーリングされた10日間の価格リターン。取引活動が持続した際に増幅されるモメンタムを分離する。
カテゴリ:モメンタム
データフィールド:終値、出来高
演算子:除算 (Div)、時系列リターン (TS_Return)、指数減衰 (Decay_Exp)
検索期間:[10]
シグナル 2: ランク調整済みリターンモメンタム << SELECTED
数式:Rank_Mul(Rank(Close), Rank(TS_Return(Close, 10)))
意味:価格の相対的な立ち位置と直近のリターンの強さを組み合わせ、価格ランクが高くかつ強い上昇モメンタムを示す銘柄を強調する。
カテゴリ:モメンタム
データフィールド:終値
評価指標 (対象:signal_rank_adjusted_return_momentum):
平均 IC: -0.0134
IC 標準偏差:0.1483
IC IR: -0.0906
T 統計量:-5.3655
P 値:0.000000
期間数:3504
正の IC レシオ:46.38%
本デモンストレーションでは、シグナルエージェントが、私たちが提供した数学演算子の構造化ライブラリを用いて、2 つのモメンタムベースの銘柄選定シグナルを生成しました。
最初のシグナルである「ExpVolume-Adjusted Momentum」は、各銘柄の 10 日間価格リターンを計算し、それを同じ期間における出来高の指数加重移動平均で除算します:
分母は、スパンが 10 の再帰的な指数加重平均です:
直感的には、10 日間の価格リターンは、流動性が低い場合や取引量が少ない場合に発生した場合の方が、より大きな重みを持つと考えられます。同じ価格リターンを示す 2 つの株式がある場合、弱まっていく指数加重移動平均(EWMA)ボリュームを持つ方が、より大きなシグナル強度を受け取ります。
2 つ目の指標である「ランク調整済みリターンモメンタム」は、2 つのクロスセクションランクを組み合わせます。すなわち、各株式の価格ランクと、その 10 日間のリターンのランクを掛け合わせることで、両方が同時に高い場合にのみシグナルが大きくなるように設計されています。
日におけるクロスセクションランクとは、S&P 500 銘柄全体における当日の分位値(quantile)です。
これは、価格が非常に高く、かつ直近で強いモメンタムを示している株式を特定するものです。この積算手法は、どちらかの次元だけで中位に位置する銘柄を乗法的に減衰させるため、単独でランクを使用する場合よりもシグナルを鋭敏にします。
評価者は、両方のシグナルを S&P 500 の将来リターンに対してバックテストし、「Rank-Adjusted Return Momentum」がより強力な候補であると選択しました。その結果、平均 IC は -0.0134(IC の標準偏差は 0.1483、情報比率は -0.091)、t 統計量は -5.37、3,504 営業日間にわたって極めて微小な p 値(p-value)が得られました。
46.4% の正の IC レシオは、このシグナルが否定的であるケースの方が頻繁であることを裏付けています。一方、$|IC|$ は 0.02 という許容閾値をわずかに下回っているため(したがって 2 回の反復後の結果は「ベストエフォート」ですが)、非常に有意な負の符号は、このシグナルが一貫した予測情報を担っていることを意味します。高価格・高モメンタムの株式は体系的に先行してパフォーマンスが低下し、これは教科書的なショート・モメンタム/リバースルパターンです。
定量的シグナル発見エージェント開発者の例
私たちは、新しいアルファの源泉を発見するための非常にスケーラブルで柔軟性があり強力なエンジンを構築する方法の例をすべて解説しました。この定量的シグナル発見エージェントの開発者用例は容易に拡張可能です。
- 入力文字列を変更することで異なるカテゴリのシグナルを試すことができます。例えば「ボラティリティ・シグナル」、「平均回帰シグナル」、あるいは「ボリュームと価格の乖離シグナル」などです。
- エージェントごとにモデルサイズを組み合わせることができます。より高度な推論能力を持つモデル(nemotron-3-super-120b-a12b)をシグナルエージェントに割り当ててアイデア創出を豊かにしつつ、コードエージェントとアドバイザーには小規模な nemotron-3-nano-30b-a3b を使用します。これは YAML 内の 1 行の変更だけで実現可能です。
- template/calculator.json を編集することで独自の演算子を追加できます。貴社の独自技術指標や代替データ変換を投入するだけで、シグナルエージェントが次回の実行時に自動的にそれらを発見します。
- 独自のデータを組み込むことができます。含まれている S&P 500 の CSV ファイルを、ご自身の対象銘柄群(アジア株、暗号資産、ETF など)に置き換えたり、ファンダメンタルズやセンチメントなどの新しいデータフィールドを追加したりできます。
- ic_threshold、max_iterations、forward_periods といった最適化基準を、ご自身の投資スタイルに合わせて調整してください。
スタートガイド
build.nvidia.com を訪問し、NVIDIA Brev またはご自身のクラウドインフラストラクチャを使用して、GPU アクセラレーション環境でノートブックをデプロイしてください。GitHub の quantitative signal discovery agent notebook を利用することも可能です。
原文を表示
In quantitative finance, researchers build algorithms to trade assets, derivatives, and other financial instruments. A key part of that work is finding signals: patterns in messy market data that may help predict future returns. These signals can come from price and volume data, economic indicators, fundamentals, or alternative sources like news sentiment.
For years, quant firms have uncovered and tested signals largely by hand. Traditionally, quantitative researchers have to manually hypothesize, code, backtest, and refine hundreds of potential signals. The workflow is often fragmented, moving between data scientists, developers, and analysts, which creates significant lag in a market that moves in milliseconds. Now, AI can help automate parts of this workflow and speed up the research cycle. Thequantitative signal discovery agent developer example from NVIDIA shows how to automate signal discovery using agentic architecture built with the NVIDIA Nemotron family of open models and the NVIDIA NeMo Agent Toolkit open-source library.
In this blog post, we walk you through a complete example of building an agentic system for signal discovery using the NeMo Agent Toolkit.
Agentic systems for signal discovery
Agentic AI is bridging the gap between human expertise and automated efficiency. We designed a system of signal-discovery agents using NeMo Agent Toolkit to change signal discovery from a manual grind into a self-evolving, autonomous loop. The result is a painless process for designing, testing, and optimizing the agentic system.
The system coordinates three specialized agents:
- Signal agent: Identifies potential alpha signals from market data.
- Code agent: Translates signal descriptions into executable Python code.
- Evaluation agent: Runs backtests, applies logical evaluation, and iteratively refines signal suggestions.
NeMo Agent Toolkit multi-agent signal discovery loop
The NeMo Agent Toolkit provides the orchestration layer to build intelligent agents that plan complex research tasks, use tools to execute Python code, and reflect on backtesting results to refine their own hypotheses. Our proposed system consists of three specialized agents that interact in a continuous cycle of creation, execution, and refinement. The NeMo Agent Toolkit manages the “handoffs” between these agents, ensuring that context (such as signal definitions or backtest results) is preserved across the workflow.

The signal generator
This agent acts as the creative brain, using nemotron-3-nano-30b-a3b through NVIDIA NIM to hypothesize new signal expressions. We designed the following system prompt: “You are a senior quantitative researcher at a top hedge fund. Generate {config.num_signals} unique stock selection signals based on the request” to define the core objective of the agent.
To ensure it produced logically sound results rather than “hallucinating” math, we provided it with a structured library of mathematical calculators as building blocks. Each calculator is a dictionary containing a name, signature, and meaning. In our example, there are 66 different operators covering operations from arithmetic, math (abs, clip, power), rank, and time series (log return, momentum, delta). For example, Rank_Add, normalizes two different sets of data (like price and volume) into a shared 0-to-1 percentile scale and sums them together. We provide the interpretation and the Python code, enabling the agent to combine different market signals into a single, balanced score.
{
"name": "Rank_Add",
"signature": "Rank_Add(x: pd.DataFrame, y: pd.DataFrame) -> pd.DataFrame",
"meanings": "Return the sum of the quantiles of the elements in DataFrame x and the corresponding elements in DataFrame y.",
"code": "def Rank_Add(x, y):\n rank_x = x.T.rank() / (len(x.T) + 1)\n rank_y = y.T.rank() / (len(y.T) + 1)\n return (rank_x + rank_y).T\n"
}
By supplying these reference operators, the agent can reason through its “toolbox” to select the best combination of operators to measure market trends, ensuring the resulting signal is both high-quality and theoretically sound.
The signal generator outputs the “blueprint” as directed by the following prompt:
Return each signal as a JSON object with these fields:
- name: Signal name (descriptive)
- formula: Formula using ONLY the operators listed above
- meaning: Economic intuition (what alpha it captures)
- category: One of [momentum, volatility, volume, reversal, quality, other]
- data_fields_used: List of data fields used (Open, Close, High, Low, Volume)
- operators_used: List of operators used
- lookback_periods: List of lookback days used
By asking the agent to output all the details, we ensure the interpretability and reproducibility of the signals generated by the agent; also, tracking this information will also facilitate the evaluation step further down the loop.
The code agent
Once a hypothesis is formed, the code agent transforms natural language ideas into executable Python code. In the NeMo Agent Toolkit ecosystem, this agent is specifically tuned for tool-calling and code generation. It takes the blueprint from the signal agent and produces Python code that calculates the signal against historical price-volume data—with the operator implementations from calculator.json inlined automatically so the resulting module is self-contained and portable.
The evaluation agent
This agent processes the raw data from the code agent to calculate the Information Coefficient (IC) and Rank IC metrics that quantify how well the signal predicts price movement. In quantitative research, Rank IC is the correlation between the ranks of your signal values and the ranks of subsequent asset returns.
Unlike the standard Pearson IC, Rank IC is more robust against outliers and focuses on the relative ordering of assets—an essential feature for building ranking-based trading strategies.
Usually, a “good” institutional-grade signal maintains a mean Rank IC between 0.02 and 0.05. Anything consistently above 0.05 is considered a very strong signal, often found in high-frequency or niche momentum strategies.
The user can define an acceptance threshold for the evaluation agent to decide when to accept a generated signal. If a signal has suboptimal performance in backtesting, the evaluation agent generates optimization suggestions that are fed back into the Signal Agent’s next iteration. This creates a self-improving loop where each subsequent generation of signals is more refined than the last.
Why NeMo Agent Toolkit for automating signal discovery?
Using the toolkit for this specific use case provides multiple benefits:
Config-driven workflows
The toolkit helps shift the project from a rigid script to a flexible research platform. Instead of hard-coding the interactions between agents, you define the system’s logic—including personas, tools, and constraints—entirely within a YAML configuration. This modularity makes it trivial to swap models for different tasks. For example, you can assign a high-reasoning model to handle hypothesis generation while using a faster, more cost-effective model for the code agent without modifying the underlying source code.
In our implementation, the config.yml acts as the single source of truth for the entire signal discovery experiment. It centralizes every critical parameter, from the IC thresholds to the depth of the optimization loop. This enables quantitative researchers to iterate at high velocity—adjusting the forward-returns period or tightening the IC requirements—simply by editing a YAML file.
llms:
signal_generator:
_type: nim
model_name: nvidia/nemotron-3-nano-30b-a3b
temperature: 0.8
max_tokens: 3000
code_generator:
_type: nim
model_name: nvidia/nemotron-3-nano-30b-a3b
temperature: 0.0
max_tokens: 2000
optimization_advisor:
_type: nim
model_name: nvidia/nemotron-3-nano-30b-a3b
temperature: 0.5
max_tokens: 1000
workflow:
_type: signal_optimizer
signal_generator_llm: signal_generator
code_generator_llm: code_generator
optimization_advisor_llm: optimization_advisor
ic_threshold: 0.02
p_value_threshold: 0.05
max_iterations: 3
num_signals: 2
forward_periods: 5
Built-in observability
Arize Phoenix tracing adds observability to NIM-powered signal discovery agents in long-running quantitative workflows. Since signal discovery involves high-latency loops—generating complex price-volume formulas, running vectorized backtests, and performing fitness evaluations—Phoenix enables us to visualize the reasoning traces of the LLM in real time.

By tracking reasoning traces and token usage across the ChatNVIDIA() calls, we can pinpoint whether a bottleneck lies in the model’s logic generation and gain deeper insights into the agent’s thinking process at each step. This transparency is essential for debugging “silent failures” where an agent might produce a mathematically valid but economically meaningless signal, enabling optimization for both the prompt strategy and the computational costs of the discovery cycle.
End-to-end example: Mining momentum-based signals
Momentum-based signals are one of the most commonly used in trading. They are based on the empirical observation that assets that have performed well recently tend to continue their upward trajectory, while those performing poorly often continue to decline. Let’s run the workflow against this prompt:
nat run --config_file configs/config-optimization.yml --input "momentum signals"
The nat run command spins up the workflow based on the YAML config to perform the generation and optimization loop:
026-04-24 14:34:02 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:353 - === Iteration 1/3 ===
2026-04-24 14:34:02 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:355 - Generating signals...
2026-04-24 14:34:10 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:360 - Generating code...
2026-04-24 14:34:13 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:366 - Evaluating IC...
2026-04-24 14:34:13 - INFO - signal_discovery_workflow.signal_evaluator:391 - Found 2 signal function(s): ['signal_volume_adjusted_momentum', 'signal_20_day_price_rank_momentum']
2026-04-24 14:34:15 - INFO - signal_discovery_workflow.signal_evaluator:457 - signal_volume_adjusted_momentum: |IC| = 0.0103
2026-04-24 14:34:18 - INFO - signal_discovery_workflow.signal_evaluator:457 - signal_20_day_price_rank_momentum: |IC| = 0.0138
2026-04-24 14:34:18 - INFO - signal_discovery_workflow.signal_evaluator:472 - Selected best signal: signal_20_day_price_rank_momentum with |IC| = 0.0138
2026-04-24 14:34:19 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:371 - Mean IC: -0.0138, p-value: 7.202971903375044e-07
2026-04-24 14:34:19 - INFO - signal_discovery_workflow.signal_discovery_optimization_workflow:413 - Generating optimization feedback...
signal_discovery_workflow.signal_discovery_optimization_workflow:353 - === Iteration 2/3 ===
...
signal_discovery_workflow.signal_discovery_optimization_workflow:353 - === Iteration 3/3 ===
...
After three optimization iterations, we get the following generated signals:
Signal 1: ExpVolume-Adjusted Momentum
Formula: Div(TS_Return(Close, 10), Decay_Exp(Volume, 10))
Meaning: 10‑day price return scaled by exponentially weighted volume, isolating momentum that is amplified when trading activity is sustained
Category: momentum
Data fields: Close, Volume
Operators: Div, TS_Return, Decay_Exp
Lookback: [10]
Signal 2: Rank-Adjusted Return Momentum << SELECTED
Formula: Rank_Mul(Rank(Close), Rank(TS_Return(Close, 10)))
Meaning: Combines the relative standing of price with the relative strength of recent returns, highlighting stocks that are both highly ranked in price and showing strong upward momentum
Category: momentum
Data fields: Close
Evaluation Metrics (on: signal_rank_adjusted_return_momentum):
----------------------------------------
Mean IC: -0.0134
IC Std: 0.1483
IC IR: -0.0906
T-stat: -5.3655
P-value: 0.000000
Num Periods: 3504
Positive IC Ratio: 46.38%
In this demonstration, the signal agent generated two momentum-based stock-selection signals using the structured library of mathematical operators we provided.
The first, *ExpVolume-Adjusted Momentum*, computes each stock’s 10-day price return and divides it by an exponentially weighted moving average of trading volume over the same span:
The denominator is the recursive exponentially-weighted average with span 10:
The intuition is that a 10-day price return carries more weight when it occurs on low liquidity or thin trading activity. Given two stocks with identical price returns, the one with weaker, fading EWMA volume will receive a larger signal magnitude.
The second, *Rank-Adjusted Return Momentum*, composes two cross-sectional ranks: each stock’s price rank and the rank of its 10-day return, multiplied together so the signal is large only when both are high simultaneously:
The cross-sectional rank on day is the within-day quantile across the S&P 500 names:
This isolates stocks that are simultaneously highly priced and showing strong recent momentum—the product sharpens the signal versus either rank in isolation, since middle-of-the-pack names on either dimension are damped multiplicatively.
The evaluator backtested both signals against S&P 500 forward returns and selected Rank-Adjusted Return Momentum as the stronger candidate, achieving a mean IC of -0.0134 (IC standard deviation 0.1483, information ratio -0.091) with a -statistic of -5.37, a vanishingly small -value () over 3,504 trading days.
The positive-IC ratio of 46.4% confirms the signal leans negative more often than not. While $|IC|$ sits just below the 0.02 acceptance threshold (hence the “best-effort” outcome after two iterations), the highly significant negative sign means the signal carries consistent predictive information—high-priced, high-momentum stocks systematically underperform forward, the textbook short-momentum / reversal pattern.
Quantitative signal discovery agent developer example
We finish walking through an example of how to build a highly scalable, flexible, and powerful engine for uncovering new sources of alpha. The quantitative signal discovery agent developer example is easily extensible:
- Try different signal categories by changing the –input string, such as “volatility signals”, “mean reversion signals”, or “volume-price divergence signals”.
- Mix model sizes per agent. Assign a higher-capability reasoning model like nemotron-3-super-120b-a12b to the signal agent for richer ideation while keeping the smaller nemotron-3-nano-30b-a3b for the code agent and advisor, only a one-line change in YAML.
- Add your own operators by editing template/calculator.json. Drop in your firm’s proprietary technical indicators or alternative-data transforms; the signal agent will discover them automatically on the next run.
- Plug in your own data. Replace the included S&P 500 CSVs with your own universe (Asian equities, crypto, ETFs) or add new data fields like fundamentals or sentiment.
- Tune the optimization criteria—such as ic_threshold, max_iterations, and forward_periods—to match your investment style.
Get started
Visit build.nvidia.com to deploy the notebook in a GPU-accelerated environment with either NVIDIA Brev or your own cloud infrastructure using the quantitative signal discovery agent notebook on GitHub.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み