OpenClaw、Exa、milvusで月20ドルの株式監視エージェントを構築した
私は副業として米国株の取引をしている。同僚は、私の戦略は「興奮で高く買い、恐怖で安く売る。
この繰り返しが私を苦しめる。相場とにらめっこするたびに、予定外の取引をしてしまう。原油が急騰すればパニック売り。あるハイテク株が4%急騰し、私はそれを追いかける。一週間後、自分の取引履歴を見て、前四半期も同じようなことをやっていたな、と思う。
そこで私は、私の代わりに市場を監視し、同じ間違いを犯さないようにするエージェントをオープンクローで構築した。セキュリティ・リスクが高すぎるからだ。その代わり、マーケットウォッチングに費やす時間を節約し、同じ間違いを犯さないようにしてくれる。
このエージェントは3つの部分で構成されており、月々約20ドルかかる:
- OpenClawはすべてを自動操縦で実行する。OpenClawは30分のハートビートでエージェントを動かし、実際に何か重要なことがあったときだけピングを鳴らしてくれる。以前は、価格を見れば見るほど、衝動的に反応していた。
- 正確でリアルタイムな検索を可能にするエクサ。エクサは、厳選された情報源をスケジュール通りに閲覧・要約してくれるので、毎朝すっきりとしたブリーフィングを受けることができる。以前は、信頼できるニュースを見つけるために、SEOスパムや憶測をふるいにかけて1日1時間費やしていた。金融サイトはスクレイパーと戦うために毎日更新されるため、自動化できなかったのだ。
- Milvusで個人の履歴と嗜好を管理。Milvusは私の取引履歴を保存し、私が決断を下す前にエージェントがそれを検索する。以前は、過去の取引を見直すのは面倒だったので、同じ間違いを別のティッカーで繰り返していました。Zilliz CloudはMilvusのフルマネージド・バージョンです。手間をかけずに利用したいのであれば、Zilliz Cloudは素晴らしい選択肢です(無料ティアもあります)。
私がどのようにセットアップしたかを順を追って説明しよう。
ステップ1:Exaでリアルタイムのマーケット・インテリジェンスを得る
以前は、金融アプリを見たり、スクレイパーを書いたり、プロのデータ端末を調べたりしていた。私の経験?アプリはシグナルをノイズに埋もれさせ、スクレイパーは常に壊れ、専門的なAPIは法外に高価だった。ExaはAIエージェントのために作られた検索APIで、上記の問題を解決する。
Exaは、AIエージェントのために構造化されたAI対応データを返すウェブ検索APIだ。MilvusのフルマネージドサービスであるZilliz Cloudを利用している。Perplexityが人間が使う検索エンジンなら、ExaはAIが使う。エージェントがクエリを送信すると、Exaは記事テキスト、キーセンテンス、要約をJSONとして返す。
Exaはまた、フード下でセマンティック検索を使用しているため、エージェントは自然言語でクエリーを行うことができる。なぜNVIDIAの株価は2026年第4四半期の業績が好調だったにもかかわらず下落したのか」というようなクエリは、SEOクリックベイトのページではなく、ロイターやブルームバーグからのアナリストの内訳を返します。
Exaには、月1,000回の検索が可能な無料版がある。SDKをインストールし、自分のAPIキーと交換する:
pip install exa-py
これがコア・コールだ:
from exa_py import Exa
exa = Exa(api_key=“your-api-key”)
# Semantic search — describe what you want in plain language
result = exa.search(
“Why did NVIDIA stock drop despite strong Q4 2026 earnings”,
type=“neural”, # semantic search, not keyword
num_results=10,
start_published_date=“2026-02-25”, # only search for latest information
contents={
“text”: {“max_characters”: 3000}, # get full article text
“highlights”: {“num_sentences”: 3}, # key sentences
“summary”: {“query”: “What caused the stock drop?”} # AI summary
}
)
for r in result.results:
print(f"[{r.published_date}] {r.title}")
print(f" Summary: {r.summary}")
print(f" URL: {r.url}\n")
contentsパラメータは、記事の全文を取得し、重要な文章を抽出し、あなたが提供した質問に基づいた要約を生成します。1回のAPI呼び出しで、20分のタブホッピングを置き換えることができる。
この基本的なパターンは多くのことをカバーしているが、私は定期的に遭遇するさまざまな状況を処理するために4つのバリエーションを構築することにした:
- ソースの信頼性によるフィルタリング。収益分析では、ロイター、ブルームバーグ、ウォールストリート・ジャーナルだけが欲しい。
# Only financial reports from trusted sources
earnings = exa.search(
"NVIDIA Q4 2026 earnings analysis",
category="financial report",
num_results=5,
include_domains=["reuters.com", "bloomberg.com", "wsj.com"],
contents={"highlights": True}
)
- 類似分析を見つける。良い記事を1つ読んだら、手作業で探すことなく、同じトピックについてより多くの視点が欲しい。
# "Show me more analysis like this one"
similar = exa.find_similar(
url="https://fortune.com/2026/02/25/nvidia-nvda-earnings-q4-results",
num_results=10,
start_published_date="2026-02-20",
contents={"text": {"max_characters": 2000}}
)
- 複雑な質問に対するディープサーチ。例えば、中東の緊張が半導体のサプライチェーンにどのような影響を与えるか、など。ディープサーチは複数のソースを統合し、構造化された要約を返します。
# Complex question — needs multi-source synthesis
deep_result = exa.search(
"How will Middle East tensions affect global tech supply chain and semiconductor stocks",
type="deep",
num_results=8,
contents={
"summary": {
"query": "Extract: 1) supply chain risk 2) stock impact 3) timeline"
}
}
)
- リアルタイムのニュース・モニタリング。市場の時間帯には、その日だけのニュース速報が必要だ。
# Breaking news only — today' iss date 2026-03-05
breaking = exa.search(
"US stock market breaking news today",
category="news",
num_results=20,
start_published_date="2026-03-05",
contents={"highlights": {"num_sentences": 2}}
)
これらのパターンを使って、FRBの政策、ハイテク企業の業績、原油価格、マクロ指標をカバーするテンプレートを12個ほど作成した。これらは毎朝自動的に実行され、私の携帯電話に結果がプッシュされる。以前は1時間かかっていたブラウジングも、今ではコーヒーを飲みながら5分でサマリーを読むことができる。
ステップ2:取引履歴をmilvusに保存し、より賢い決断を下す
エクサは私の情報の問題を解決してくれた。しかし、私はまだ同じ取引を繰り返していた。数日で回復する下落局面でパニック売りをしたり、すでに割高だった銘柄に勢いを追ったり。感情で行動しては後悔し、同じような状況が訪れる頃には教訓を忘れていた。
過去のトレードやその理由、失敗談を保存しておけるものが必要だったのだ。私が手作業で見直さなければならないようなものではなく(試したことはあるが、それを続けたことはない)、同じような状況が訪れるたびにエージェントが自分で検索できるようなものだ。もし私がミスを繰り返しそうになったら、ボタンを押す前にエージェントに教えてもらいたい。現在の状況 "と "過去の経験 "のマッチングは、ベクトル・データベースが解決する類似検索の問題である。
Milvus Liteを使った。Milvusの軽量版で、ローカルで動作する。サーバーの設定がないので、プロトタイピングや実験に最適だ。データを3つのコレクションに分割した。埋め込み次元は、OpenAIのtext-embedding-3-smallモデルに合わせて1536とした:
from pymilvus import MilvusClient, DataType
from openai import OpenAI
milvus = MilvusClient(“./my_investment_brain.db”)
llm = OpenAI()
def embed(text: str) -> list[float]:
return llm.embeddings.create(
input=text, model=“text-embedding-3-small”
).data[0].embedding
# Collection 1: past decisions and lessons
# Every trade I make, I write a short review afterward
milvus.create_collection(
“decisions”,
dimension=1536,
auto_id=True
)
# Collection 2: my preferences and biases
# Things like “I tend to hold tech stocks too long”
milvus.create_collection(
“preferences”,
dimension=1536,
auto_id=True
)
# Collection 3: market patterns I’ve observed
# “When VIX > 30 and Fed is dovish, buy the dip usually works”
milvus.create_collection(
“patterns”,
dimension=1536,
auto_id=True
)
3つのコレクションは3種類の個人データに対応し、それぞれ異なる検索戦略を持つ:
| タイプ | 何を保存するか | エージェントがそれをどのように使うか |
|---|---|---|
| 嗜好 | バイアス、リスク許容度、投資哲学(「私はハイテク株を長期保有する傾向がある」)。 | 毎回エージェントのコンテキストにロードされる |
| 意思決定とパターン | 過去の特定の取引、学んだ教訓、市場観察 | 関連する状況が出てきたときのみ、類似検索で取得 |
| 外部知識 | 調査レポート、SEC提出書類、公開データ | Milvusには保存されていない - Exaを通じて検索可能 |
3つの異なるコレクションを構築したのは、これらを1つのコレクションに混ぜると、無関係な取引履歴ですべてのプロンプトを肥大化させるか、現在のクエリと十分に一致しない場合にコアバイアスを失うことになるからだ。
一旦コレクションが存在すると、それらを自動的に入力する方法が必要でした。エージェントとの会話のたびに情報をコピーペーストしたくなかったので、各チャットセッションの最後に実行されるメモリエクストラクタを作りました。
エクストラクタは2つのことをする:抽出と重複排除だ。エクストラクタはLLMに、会話から構造化された洞察(決定、好み、パターン、教訓)を引き出すように依頼し、それぞれを適切なコレクションにルーティングする。何かを保存する前に、すでにあるものとの類似性をチェックする。新しい洞察が既存のエントリーと92%以上類似している場合、それはスキップされる。
import json
def extract_and_store_memories(conversation: list[dict]) -> int:
“"”
After each chat session, extract personal insights
and store them in Milvus automatically.
“"”
# Ask LLM to extract structured memories from conversation
extraction_prompt = “"”
Analyze this conversation and extract any personal investment insights.
Look for:
1. DECISIONS: specific buy/sell actions and reasoning
2. PREFERENCES: risk tolerance, sector biases, holding patterns
3. PATTERNS: market observations, correlations the user noticed
4. LESSONS: things the user learned or mistakes they reflected on
Return a JSON array. Each item has:
- "type": one of "decision", "preference", "pattern", "lesson"
- "content": the insight in 2-3 sentences
- "confidence": how explicitly the user stated this (high/medium/low)
Only extract what the user clearly expressed. Do not infer or guess.
If nothing relevant, return an empty array.
"""</span>
response = llm.chat.completions.create(
model=<span class="hljs-string">"gpt-4o"</span>,
messages=[
{<span class="hljs-string">"role"</span>: <span class="hljs-string">"system"</span>, <span class="hljs-string">"content"</span>: extraction_prompt},
*conversation
],
response_format={<span class="hljs-string">"type"</span>: <span class="hljs-string">"json_object"</span>}
)
memories = json.loads(response.choices[<span class="hljs-number">0</span>].message.content)
stored = <span class="hljs-number">0</span>
<span class="hljs-keyword">for</span> mem <span class="hljs-keyword">in</span> memories.get(<span class="hljs-string">"items"</span>, []):
<span class="hljs-keyword">if</span> mem[<span class="hljs-string">"confidence"</span>] == <span class="hljs-string">"low"</span>:
<span class="hljs-keyword">continue</span> <span class="hljs-comment"># skip uncertain inferences</span>
collection = {
<span class="hljs-string">"decision"</span>: <span class="hljs-string">"decisions"</span>,
<span class="hljs-string">"lesson"</span>: <span class="hljs-string">"decisions"</span>,
<span class="hljs-string">"preference"</span>: <span class="hljs-string">"preferences"</span>,
<span class="hljs-string">"pattern"</span>: <span class="hljs-string">"patterns"</span>
}.get(mem[<span class="hljs-string">"type"</span>], <span class="hljs-string">"decisions"</span>)
<span class="hljs-comment"># Check for duplicates — don't store the same insight twice</span>
existing = milvus.search(
collection,
data=[embed(mem[<span class="hljs-string">"content"</span>])],
limit=<span class="hljs-number">1</span>,
output_fields=[<span class="hljs-string">"text"</span>]
)
<span class="hljs-keyword">if</span> existing[<span class="hljs-number">0</span>] <span class="hljs-keyword">and</span> existing[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"distance"</span>] > <span class="hljs-number">0.92</span>:
<span class="hljs-keyword">continue</span> <span class="hljs-comment"># too similar to existing memory, skip</span>
milvus.insert(collection, [{
<span class="hljs-string">"vector"</span>: embed(mem[<span class="hljs-string">"content"</span>]),
<span class="hljs-string">"text"</span>: mem[<span class="hljs-string">"content"</span>],
<span class="hljs-string">"type"</span>: mem[<span class="hljs-string">"type"</span>],
<span class="hljs-string">"source"</span>: <span class="hljs-string">"chat_extraction"</span>,
<span class="hljs-string">"date"</span>: <span class="hljs-string">"2026-03-05"</span>
}])
stored += <span class="hljs-number">1</span>
<span class="hljs-keyword">return</span> stored
私が新しい市場状況に直面し、トレードの衝動に駆られると、エージェントはリコール機能を実行する。私が何が起きているかを説明すると、エージェントは3つのコレクションすべてから関連する履歴を検索する:
def recall_my_experience(situation: str) -> dict:
"""
Given a current market situation, retrieve my relevant
past experiences, preferences, and observed patterns.
"""
query_vec = embed(situation)
<span class="hljs-comment"># Search all three collections in parallel</span>
past_decisions = milvus.search(
<span class="hljs-string">"decisions"</span>, data=[query_vec], limit=<span class="hljs-number">3</span>,
output_fields=[<span class="hljs-string">"text"</span>, <span class="hljs-string">"date"</span>, <span class="hljs-string">"tag"</span>]
)
my_preferences = milvus.search(
<span class="hljs-string">"preferences"</span>, data=[query_vec], limit=<span class="hljs-number">2</span>,
output_fields=[<span class="hljs-string">"text"</span>, <span class="hljs-string">"type"</span>]
)
my_patterns = milvus.search(
<span class="hljs-string">"patterns"</span>, data=[query_vec], limit=<span class="hljs-number">2</span>,
output_fields=[<span class="hljs-string">"text"</span>]
)
<span class="hljs-keyword">return</span> {
<span class="hljs-string">"past_decisions"</span>: [h[<span class="hljs-string">"entity"</span>] <span class="hljs-keyword">for</span> h <span class="hljs-keyword">in</span> past_decisions[<span class="hljs-number">0</span>]],
<span class="hljs-string">"preferences"</span>: [h[<span class="hljs-string">"entity"</span>] <span class="hljs-keyword">for</span> h <span class="hljs-keyword">in</span> my_preferences[<span class="hljs-number">0</span>]],
<span class="hljs-string">"patterns"</span>: [h[<span class="hljs-string">"entity"</span>] <span class="hljs-keyword">for</span> h <span class="hljs-keyword">in</span> my_patterns[<span class="hljs-number">0</span>]]
}
# When Agent analyzes current tech selloff:
context = recall_my_experience(
“tech stocks dropping 3-4% due to Middle East tensions, March 2026”
)
# context now contains:
# - My 2024-10 lesson about not panic-selling during ME crisis
# - My preference: “I tend to overweight geopolitical risk”
# - My pattern: “tech selloffs from geopolitics recover in 1-3 weeks”
例えば、3月上旬に中東の緊張でハイテク株が3~4%下落したとき、エージェントは3つのことを検索した:2024年10月の地政学的ディップ時にパニック売りをしないことについての教訓、私が地政学的リスクをオーバーウェイトする傾向があるという嗜好メモ、そして私が記録したパターン(地政学に起因するハイテク株下落は通常1~3週間で回復する)。
同僚の意見:もしトレーニングデータが負け記録なら、AIはいったい何を学んでいるのだろう?しかし、そこが重要なのだ。エージェントは私のトレードをコピーしているのではなく、次のトレードから私を説得できるように、トレードを記憶しているのだ。
ステップ 3: エージェントにOpenClawスキルで分析を教える
この時点で、エージェントは信頼できる情報(Exa)と個人的な記憶(milvus)を持っている。しかし、その両方をLLMに渡して「これを分析しろ」と言うと、一般的な、ヘッジの効いた回答が返ってくる。ありとあらゆる角度から言及し、最後に「投資家はリスクを天秤にかけるべきだ」と締めくくる。何も書いていないのと同じだ。
解決策は、自分で分析フレームワークを書き、それをエージェントに明確な指示として渡すことだ。どの指標を重視するのか、どの状況を危険と考えるのか、いつ保守的になるのか積極的になるのか、などを伝えなければならない。これらのルールは投資家ごとに異なるため、自分で定義する必要があります。
OpenClawはこれをスキル(skills/ディレクトリ内のマークダウン・ファイル)を使って行います。エージェントが関連する状況に遭遇すると、マッチするスキルがロードされ、自由奔放に動くのではなく、あなたのフレームワークに従います。
これは、決算報告後の銘柄評価用に書いたものです:
---
name: post-earnings-eval
description: >
Evaluate whether to buy, hold, or sell after an earnings report.
Trigger when discussing any stock's post-earnings price action,
or when a watchlist stock reports earnings.
---
Post-Earnings Evaluation Framework
When analyzing a stock after earnings release:
Step 1: Get the facts
Use Exa to search for:
- Actual vs expected: revenue, EPS, forward guidance
- Analyst reactions from top-tier sources
- Options market implied move vs actual move
Step 2: Check my history
Use Milvus recall to find:
- Have I traded this stock after earnings before?
- What did I get right or wrong last time?
- Do I have a known bias about this sector?
Step 3: Apply my rules
- If revenue beat > 5% AND guidance raised → lean BUY
- If stock drops > 5% on a beat → likely sentiment/macro driven
- Check: is the drop about THIS company or the whole market?
- Check my history: did I overreact to similar drops before?
- If P/E > 2x sector average after beat → caution, priced for perfection
Step 4: Output format
Signal: BUY / HOLD / SELL / WAIT
Confidence: High / Medium / Low
Reasoning: 3 bullets max
Past mistake reminder: what I got wrong in similar situations
IMPORTANT: Always surface my past mistakes. I have a tendency to
let fear override data. If my Milvus history shows I regretted
selling after a dip, say so explicitly.
最後の一行が最も重要だ。私は恐怖心がデータに優先する傾向がある。Milvusの履歴で、急落後に売ったことを後悔しているのであれば、はっきりとそう言ってください"。これは、私がどこで間違ったかをエージェントに正確に伝えることで、エージェントが背中を押すタイミングを知るためだ。自分で作る場合は、この部分を自分のバイアスに基づいてカスタマイズすることになる。
センチメント分析、マクロ指標、セクター・ローテーション・シグナルについても同様のスキルを書いた。また、バフェットのバリューフレームワークやブリッジウォーターのマクロアプローチなど、私が尊敬する投資家が同じ状況をどのように評価するかをシミュレートするスキルも書いた。これらは意思決定者ではなく、追加の視点なのだ。
警告:LLMにRSIやMACDのようなテクニカル指標を計算させてはいけない。彼らは自信満々に数字を幻視する。自分で計算するか、専用のAPIを呼び出し、その結果を入力としてSkillに送り込んでください。
ステップ 4: OpenClaw Heartbeat でエージェントを起動する
上記の全てはまだ手動でトリガーする必要があります。更新が必要なたびにターミナルを開かなければならないのであれば、会議中にブローカーアプリをドゥームスクロールするようなものです。
OpenClaw の Heartbeat メカニズムはこれを解決します。ゲートウェイはエージェントに30分ごとにpingを送り(設定可能)、エージェントはHEARTBEAT.mdファイルをチェックして、その瞬間に何をすべきかを決定します。HEARTBEAT.mdは、時間ベースのルールが記述されたマークダウンファイルです:
# HEARTBEAT.md — runs every 30 minutes automatically
## Morning brief (6:30-7:30 AM only)
- Use Exa to search overnight US market news, Asian markets, oil prices
- Search Milvus for my current positions and relevant past experiences
- Generate a personalized morning brief (under 500 words)
- Flag anything related to my past mistakes or current holdings
- End with 1-3 action items
- Send the brief to my phone
Price alerts (during US market hours 9:30 AM - 4:00 PM ET)
- Check price changes for: NVDA, TSM, MSFT, AAPL, GOOGL
- If any stock moved more than 3% since last check:
- Search Milvus for: why I hold this stock, my exit criteria
- Generate alert with context and recommendation
- Send alert to my phone
End of day summary (after 4:30 PM ET on weekdays)
- Summarize today’s market action for my watchlist
- Compare actual moves with my morning expectations
- Note any new patterns worth remembering
結果画面使用時間を減らし、衝動的な取引を減らす
以下は、このシステムが日々実際に生成するものである:
- 朝のブリーフ(午前7時)。エージェントは一晩中エクサを実行し、私のポジションと関連する履歴をmilvusから取得し、パーソナライズされたサマリーを私の携帯電話にプッシュする。一晩の出来事、私の持ち株との関連、そして1つから3つのアクション・アイテム。歯を磨きながら読んでいる。
- 日中アラート(9:30 AM-4:00 PM ET)。30分ごとにエージェントが私のウォッチリストをチェックする。3%以上動いた銘柄があれば、その銘柄を買った理由、ストップロスの位置、以前にも同じような状況に陥ったことがあるかどうかなど、状況とともに通知が届く。
- 週次レビュー(週末)。市場の動き、朝の予想との比較、覚えておく価値のあるパターンなど。私は土曜日に30分かけてそれを読む。それ以外の週は、意図的に画面から離れる。
最後の点が最大の変化だ。エージェントは時間を節約するだけでなく、市場を見ることから私を解放してくれる。価格を見ていなければ、パニック売りはできない。
このシステムを導入する前は、情報収集、市場監視、取引検討に週10~15時間を費やしており、会議、通勤時間、深夜のスクロールなどに分散していた。今は、毎日朝のブリーフに5分、週末のレビューに30分の合計2時間程度だ。
情報の質も向上した。ツイッターで話題になったものではなく、ロイターやブルームバーグのサマリーを読んでいる。そして、行動を起こしたくなるたびにエージェントが過去の失敗を引き出してくれるので、衝動的な取引を大幅に減らすことができた。これが私をより良い投資家にしたと証明することはまだできないが、無謀な投資家は減った。
総費用:OpenClawに月10ドル、Exaに月10ドル、milvus Liteを稼働させるための電気代が少し。
結論
私が同じような衝動的な取引を繰り返していたのは、自分の情報が悪く、自分の履歴をめったに見直さず、一日中マーケットとにらめっこしていたからだ。そこで私は、3つのことをすることでこれらの問題を解決するAIエージェントを作った:
- SEOスパムや有料サイトを1時間スクロールする代わりに、Exaで信頼できるマーケットニュースを収集する。
- Milvusを使って過去のトレードを記憶し、すでに後悔しているミスを繰り返そうとしているときに警告してくれる。
- OpenClawで自動操縦し、実際に重要なことがあったときだけpingを送る。
総費用は月20ドル。エージェントは私のお金を売買したり、触ったりしない。
最大の変化はデータでもアラートでもない。マーケットを見なくなったことだ。先週の水曜日、私はこのことをすっかり忘れていた。今でも時々損をすることはあるが、その頻度はずっと減り、週末を再び楽しむことができるようになった。同僚はまだジョークを更新していないけど、時間をおいてね。
このエージェントもたった2回の週末で構築できた。年前だったら、同じセットアップでスケジューラ、通知パイプライン、メモリ管理をゼロから書いていただろう。OpenClawの場合、その時間のほとんどは、インフラを書くことではなく、私自身の取引ルールを明確にすることに費やされた。
また、一度一つのユースケース用に構築してしまえば、アーキテクチャは移植可能だ。Exaの検索テンプレートとOpenClawのスキルを入れ替えれば、研究論文を監視したり、競合他社を追跡したり、規制の変更を監視したり、サプライチェーンの混乱を追跡したりするエージェントができる。
試してみたい方は
- Milvusクイックスタート- 5分以内にローカルでベクターデータベースを稼動させることができます。
- OpenClaw docs- スキルとハートビートで最初のエージェントをセットアップする。
- Exa API- 月額1,000件の検索を無料でご利用いただけます。
質問がある、デバッグを手伝って欲しい、または作ったものを自慢したいですか?MilvusのSlackチャンネルに参加してください。コミュニティとチームの両方から助けを得る最速の方法です。コミュニティとチームの両方から助けを得る最速の方法です。また、あなたのセットアップについて一対一で話したい場合は、20分のMilvusオフィスアワーを予約してください。
続きを読む
- Post-Earnings Evaluation Framework
- Price <span class="hljs-title">alerts</span> (<span class="hljs-params">during US market hours <span class="hljs-number">9</span>:<span class="hljs-number">30</span> AM - <span class="hljs-number">4</span>:<span class="hljs-number">00</span> PM ET</span>)
- End of day <span class="hljs-title">summary</span> (<span class="hljs-params">after <span class="hljs-number">4</span>:<span class="hljs-number">30</span> PM ET <span class="hljs-keyword">on</span> weekdays</span>)
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



