Kebelakangan ini, AI benar-benar sangat hangat.
Dalam dua tahun ini, tema utama yang paling kuat di pasaran, walau ke mana-mana pun, pada dasarnya tidak dapat mengelak daripada AI. Nvidia, AMD, Broadcom, TSMC, Micron, Microsoft, Google, Meta, CoreWeave, Supermicro... Dari semasa ke semasa, pasti ada syarikat yang tiba-tiba melonjak naik disebabkan kata kunci seperti laporan kewangan, pesanan, perbelanjaan modal, HBM, GPU, pengkomputeran awan, pusat data dan sebagainya.
Yang lebih menarik, ia selalunya tidak naik secara berasingan.
Kadangkala Nvidia bergerak dahulu, kemudian pasaran mula menggali ASIC, modul optik, pelayan, penyejukan cecair, tenaga elektrik; kadangkala laporan kewangan Micron melebihi jangkaan, lalu dana beralih pula kepada HBM, storan, peralatan semikonduktor, pembungkusan termaju; kadangkala vendor awan menaikkan perbelanjaan modal, dan keseluruhan rantaian infrastruktur AI akan dinilai semula.
Ini lebih seperti perputaran aset dalaman dalam tema AI. Pasaran tidak sekadar membeli satu saham, tetapi di bawah satu naratif besar, sentiasa mencari cabang baharu, tafsiran baharu, dan sasaran kenaikan susulan baharu.
Masalahnya timbul: jika semua hubungan ini disusun secara manual, ia amat memenatkan.
Seseorang boleh tahu Nvidia, AMD, Micron, Microsoft, Google, tetapi sukar untuk sentiasa mengikuti perubahan perniagaan, berita, penggolongan sektor, dan pergerakan harga berpuluh-puluh atau ratusan kontrak saham TradFi. Lebih menyusahkan, banyak syarikat bukan bersifat tunggal. Google adalah AI awan, Gemini, dan platform iklan; Microsoft adalah awan, Copilot, dan perisian perusahaan; Broadcom mempunyai ASIC, cip rangkaian, dan juga berkaitan dengan pusat data AI.
Jadi saya mula mencuba: bolehkah model besar membantu kita membina peta saham AI?
Bukan menyuruh model besar terus memberikan kita apa yang perlu dibeli, tetapi biarkan ia melakukan perkara yang lebih cekap: memahami perniagaan syarikat, mengelompokkan subsektor AI, menyusun berita, menerangkan peristiwa, dan menilai pergerakan luar biasa sesebuah syarikat yang mungkin mempengaruhi saham bertema sama yang lain. Keputusan dagangan sebenar tetap diserahkan kepada harga, statistik dan pengurusan risiko.
Letak saham ke dalam basket yang betul dahulu
Langkah pertama strategi bukanlah dagangan, tetapi membina peta.
Bursa kini mempunyai banyak kontrak saham TradFi, yang boleh terus mendapatkan sekumpulan kontrak saham seperti NVDA, AMD, MU, MSFT, GOOGL, SMCI. Sistem terlebih dahulu menapis kontrak jenis saham, hanya mengekalkan sasaran EQUITY yang sebenar.
Ada satu butiran penting di sini: ETF, indeks, ETF leveraj tidak boleh dicampurkan. Contohnya QQQ, SOXL, EWT dan seumpamanya, walaupun mungkin muncul dalam senarai kontrak, ia bukan saham syarikat. Jika dimasukkan ke dalam basket saham AI, hubungan statistik selepas itu akan tercemar.
Logik penapisan utama adalah seperti ini:
python
def refresh_equity_universe(store, force_reanalyze):
ms = exchange.GetMarkets()
symbols = []
for key, market in ms.items():
info = market.get("Info", {}) or {}
sub_type = info.get("underlyingSubType", []) or []
underlying_type = info.get("underlyingType", "")
if ".swap" not in key:
continue
if "TradFi" not in sub_type:
continue
if underlying_type != "EQUITY":
continue
symbol = normalize_symbol(key)
store["markets"][symbol] = {
"symbol": symbol,
"contract": key,
"underlyingType": underlying_type,
"amountPrecision": market.get("AmountPrecision", 0),
"pricePrecision": market.get("PricePrecision", 2),
"ctVal": market.get("CtVal", 1) or 1,
"minQty": market.get("MinQty", 0) or 0,
}
symbols.append(symbol)
Selepas mendapat kumpulan saham, sistem akan membiarkan model besar membuat profil bagi setiap saham.
Profil bukan sekadar menulis "ini saham teknologi", tetapi perlu menilai ia tergolong dalam subsektor AI yang mana. Contohnya, sesebuah saham boleh dimiliki oleh pelbagai basket pada masa yang sama. Google boleh tergolong dalam AI awan, aplikasi model AI, iklan platform AI; Microsoft boleh tergolong dalam AI awan dan aplikasi AI perusahaan; Nvidia boleh tergolong dalam kuasa pengkomputeran AI dan pelayan AI; Micron boleh tergolong dalam storan AI.
Fokus langkah ini adalah: saham era AI bukan label tunggal, tetapi pelbagai label.
Setiap saham mempunyai beberapa atribut: basket mana ia tergolong, seberapa tinggi pendedahannya, dalam basket ini ia lebih seperti leader atau follower, syarikat mana yang mungkin mempengaruhinya, dan syarikat mana yang mungkin dipengaruhinya.
Saya memberikan kekangan ketat pada struktur output model besar:
python
schema = {
"symbol": symbol,
"asset_type": "stock|adr|etf|leveraged_etf|index|fund|other",
"company_name": "",
"sector": "",
"business_summary": "",
"tradable": False,
"model_confidence": 0,
"baskets": [
{
"id": "ai_cloud",
"exposure": 0.0,
"role": "leader|follower|both|observer",
"sub_theme": "",
"reason": ""
}
],
"search_names": [],
"event_keywords": [],
"negative_keywords": [],
"possible_leaders": [],
"possible_followers": [],
"brave_queries": [],
"reason": ""
}
Yang paling penting di sini ialah asset_type. Hanya stock dan adr boleh masuk ke dalam basket; ETF, ETF leveraj, indeks, dana, komoditi atau ETF wilayah semuanya ditapis terus.
Selain itu, reason mesti dalam bahasa Cina, nama medan mesti konsisten, keyakinan diseragamkan kepada 0 hingga 100. Jika tidak, halaman dagangan sebenar akan kelihatan tidak kemas.
Maklumat sektor tidak boleh diandaikan
Hanya ada pengelasan saham tidak mencukupi.
Sektor AI berubah terlalu pantas. Hari ini pasaran berdagang GPU, esok mungkin HBM, lusa mungkin modul optik, beberapa hari lagi mungkin penyejukan cecair, tenaga elektrik, perbelanjaan modal vendor awan.
Jika hanya bergantung pada pengetahuan model besar sendiri, ia mudah ketinggalan. Oleh itu sistem memerlukan sumber maklumat masa nyata.
Saya menyambungkan BraveSearch di sini. Sistem akan mencari maklumat sektor setiap basket AI secara berkala, dan juga mencari berita saham penting dalam basket.
Contohnya, basket storan AI, akan mencari kata kunci seperti Micron, Western Digital, SanDisk, HBM, DRAM, NAND; basket komunikasi optik AI, akan mencari maklumat seperti Ciena, Credo, Lumentum, AAOI, modul optik 800G, 1.6T.
Aliran utama kecerdasan sektor adalah:
python
def refresh_basket_intelligence(store):
if not BRAVE_KEY:
return
if not LLM_API_KEY:
return
intel = {}
for bid, basket in store["baskets"].items():
members = sorted(
basket["members"],
key=lambda x: x.get("exposure", 0),
reverse=True
)
top_symbols = [m["symbol"] for m in members[:8]]
basket_news = fetch_basket_news(basket, top_symbols)
stock_news = {}
for symbol in top_symbols[:6]:
profile = store["profiles"].get(symbol, {})
stock_news[symbol] = fetch_stock_news(profile, bid)
Sleep(800)
analysis = analyze_basket_intel_with_llm(
store, basket, top_symbols, basket_news, stock_news
)
if analysis:
analysis["basket"] = bid
analysis["basket_name"] = basket["name"]
analysis["symbols"] = top_symbols
analysis["updatedAt"] = int(time.time())
intel[bid] = analysis
store["basket_intel"] = intel
Langkah ini adalah untuk mewujudkan latar belakang dinamik bagi setiap sub-sektor AI.
Model besar akan mengeluarkan trend sektor, pemangkin teras, risiko teras, pemimpin calon, pengikut calon, dan hubungan yang perlu disahkan kemudian, berdasarkan berita yang ditarik oleh BraveSearch.
Ini berbeza dengan terus bertanya kepada model besar "bagaimana pandangan anda terhadap storan AI?" Kami akan memberi berita masa nyata terlebih dahulu, kemudian biarkan ia merumuskan.
Bukan perdagangan dipacu berita, tetapi harga menyimpang dahulu
Pada mulanya, saya juga terfikir tentang pemacu berita.
Sebagai contoh, apabila melihat laporan pendapatan syarikat yang melebihi jangkaan, biarkan model besar menilai saham mana yang mendapat manfaat, kemudian terus menjana isyarat. Tetapi apabila difikirkan, laluan ini sangat bising. Terlalu banyak berita, banyak berita kelihatan penting, tetapi pasaran tidak membelinya.
Jadi saya membalikkan logiknya.
Lihat harga dahulu, kemudian berita.
Jika semua saham dalam bakul agak stabil, sistem hanya memerhati. Hanya apabila sesebuah saham jelas menyimpang daripada prestasi purata sektor, menjadi pemimpin semasa, barulah sistem akan bertanya: mengapa ia bergerak?
Langkah ini menggunakan ZScore dalam bakul.
Secara mudahnya, ia adalah untuk melihat sama ada sesuatu saham itu luar biasa kuat atau lemah berbanding saham lain dalam sektor yang sama. Jika sesebuah saham tiba-tiba menonjol, manakala saham lain dalam bakul yang sama belum bertindak balas secara serentak, mungkin ada peluang penyebaran.
Logik teras pengiraan ZScore bakul adalah seperti berikut:
python
def calc_basket_zscores(store, symbols):
returns = {}
min_len = 999999
for symbol in symbols:
bars = get_records(
store["markets"][symbol]["contract"],
KLINE_PERIOD,
SYNC_WINDOW + 10
)
if len(bars) < SYNC_WINDOW + 2:
return None
r = calc_returns(bars)[-SYNC_WINDOW:]
returns[symbol] = r
min_len = min(min_len, len(r))
latest = {s: returns[s][-1] for s in symbols}
avg_latest = mean(list(latest.values()))
dev_series = {s: [] for s in symbols}
for i in range(min_len):
row = [returns[s][-min_len + i] for s in symbols]
row_avg = mean(row)
for s in symbols:
dev_series[s].append(returns[s][-min_len + i] - row_avg)
zscores = {}
max_abs = 0
for s in symbols:
sigma = std(dev_series[s])
z = (latest[s] - avg_latest) / sigma if sigma > 0 else 0
zscores[s] = round(z, 3)
max_abs = max(max_abs, abs(z))
return {"zscores": zscores, "maxAbs": max_abs}
Jika sisihan maksimum sesebuah bakul melebihi ambang penembusan, ia akan memasuki status BREAKOUT_DETECTED.
Pada ketika ini, sistem tidak akan berdagang dengan segera, sebaliknya mula menyiasat punca.
Berita hanya bertanggungjawab untuk menjelaskan, hubungan statistik untuk mengesahkan
Apabila pemimpin mengalami penembusan harga, sistem akan mengambil berita terkini, kemudian biarkan model besar menilai sama ada berita ini dapat menjelaskan pergerakan harga yang luar biasa.
Tetapi di sini bukan hanya bertanya "adakah berita ini menguntungkan?".
Sistem akan memberikan bakul semasa, maklumat sektor, status harga masa nyata, ZScore pemimpin, pengikut calon, hubungan statistik yang telah disahkan, dan berita yang ditarik oleh BraveSearch kepada model besar.
Model besar perlu menjawab:
(1) Sama ada berita ini dapat menjelaskan keabnormalan harga pemimpin.
(2) Sama ada arah berita konsisten dengan arah harga.
(3) Sama ada perdagangan dibenarkan.
(4) Pengikut mana yang terjejas.
(5) Seberapa besar impak bagi setiap pengikut.
(6) Mengapa pengikut ini mungkin terjejas.
Logik penyiasatan punca teras adalah seperti berikut:
python
def explain_breakout_with_news(store, bid, leader, direction, leader_z, followers, edges):
if not BRAVE_KEY:
return None
if not LLM_API_KEY:
return None
profile = store["profiles"].get(leader, {})
news = fetch_stock_news(profile, bid)
if not news:
return None
event = analyze_breakout_news_with_llm(
store, bid, leader, direction, leader_z,
followers, edges, news
)
if not event:
return None
if not event.get("explains_price_move"):
return None
expected_direction = "bullish" if direction == "long" else "bearish"
if event.get("direction") != expected_direction:
return None
event["confidence"] = normalize_confidence(event.get("confidence", 0))
if event["confidence"] < MIN_NEWS_CONFIDENCE:
return None
if not event.get("trade_allowed"):
return None
return event
Tetapi walaupun model besar mengatakan bahawa follower tertentu mungkin terjejas, ia tidak boleh didagangkan dengan segera. Hubungan statistik K-line juga perlu dilihat.
Sistem akan mengira hubungan sejarah antara saham dalam setiap bakul, contohnya selepas source menembusi, adakah target sering mengikut, bagaimana korelasi, kitaran ketinggalan optimum, dan purata pulangan ikutan.
Hanya source -> target yang lulus hubungan statistik akan menjadi edge aktif.
python
def rebuild_basket_stats(store):
edges = []
for bid, basket in store["baskets"].items():
symbols = [
m["symbol"] for m in basket["members"]
if m["symbol"] in store["markets"]
]
for source in symbols:
for target in symbols:
if source == target:
continue
metric = validate_pair(store, source, target)
if not metric:
continue
source_exp = basket_member_info(basket, source).get("exposure", 0)
target_exp = basket_member_info(basket, target).get("exposure", 0)
score = clamp(
metric["corr"] * 0.3 +
metric["follow"] * 0.4 +
min(source_exp, target_exp) * 0.3,
0, 1
)
edge = {
"basket": bid,
"source": source,
"target": target,
"corr": round(metric["corr"], 3),
"follow": round(metric["follow"], 3),
"lag": metric["lag"],
"avgReturn": round(metric["avgReturn"], 6),
"sample": metric["sample"],
"score": round(score, 3),
"active": (
score >= MIN_EDGE_SCORE and
metric["corr"] >= MIN_CORR and
metric["follow"] >= MIN_FOLLOW_SUCCESS
),
"updatedAt": int(time.time()),
}
edges.append(edge)
store["edges"] = edges
Langkah ini penting. Model besar pandai memahami logik, tetapi pasaran tidak semestinya mengikut logik. Hubungan statistik digunakan untuk mengesahkan: adakah logik ini pernah didagangkan oleh pasaran sebelum ini?
Yang didagangkan ialah penyebaran, bukan mengejar tinggi
Strategi ini bukan untuk mengejar leader. Leader sudah menembusi, mengejar terus boleh menjadi mengejar tinggi. Strategi sebenarnya mahu memanfaatkan peluang penyebaran dalam bakul AI yang sama.
Iaitu: leader sudah bergerak, berita juga masuk akal, tetapi sesetengah follower belum bertindak balas sepenuhnya. Jika follower ini dan leader mempunyai hubungan sejarah, mungkin ada peluang ikutan jangka pendek.
Dalam imbasan penembusan, edge aktif akan dicari dahulu, kemudian follower yang ketinggalan:
python
def scan_price_breakouts(store):
for bid, rt in store["realtime"].items():
if rt["state"] != "BREAKOUT_DETECTED":
continue
leader = rt["leader"]
z = 0
for m in rt["members"]:
if m["symbol"] == leader:
z = m["z"]
direction = "long" if z > 0 else "short"
edges = [
e for e in store["edges"]
if e["active"] and e["basket"] == bid and e["source"] == leader
]
followers = []
for e in edges:
target_rt = find_realtime_member(rt, e["target"])
if target_rt and abs(target_rt["z"]) < BREAKOUT_THRESHOLD * 0.75:
followers.append(e["target"])
if not followers:
continue
Hanya selepas surih berita juga lulus, barulah isyarat disahkan dijana.
Objek dagangan terutamanya follower.
Jika tiada kedudukan semasa, buka kedudukan mengikut arah isyarat. Jika kontrak yang sama sudah ada kedudukan searah, tambah kedudukan. Jika sudah ada kedudukan bertentangan, tutup kedudukan dahulu, kemudian buka kedudukan mengikut arah baharu.
python
def execute_symbol_trade(store, signal, symbol, detail):
direction = signal["direction"]
if TRADE_MODE != "trade":
return open_or_add_position(store, signal, symbol, detail, add_mode=False)
pos = get_position_by_symbol(symbol)
if pos:
pos_dir = position_direction(pos)
if pos_dir == direction:
return open_or_add_position(store, signal, symbol, detail, add_mode=True)
close_existing_position(store, symbol, pos, "reverse_signal")
Sleep(1000)
return open_or_add_position(store, signal, symbol, detail, add_mode=False)
Ini juga kerana banyak saham muncul dalam pelbagai bakul pada masa yang sama. Saham mungkin follower dalam AI Cloud, dan ahli logik lain dalam AI Application. Isyarat dari bakul berbeza mungkin mempengaruhinya serentak, jadi arah kontrak yang sama perlu dikendalikan secara seragam.
Kawalan risiko perlu mudah dahulu, tetapi tetap mesti ada
Dalam aspek kawalan risiko, kini menggunakan stop loss keras dan trailing stop. Apabila kerugian mencapai ambang, keluar; selepas keuntungan mencapai tahap tertentu, aktifkan trailing stop; jika penarikan balik terlalu banyak dari keuntungan tertinggi, kunci keuntungan dan keluar.
python
def monitor_positions(store):
for pos in exchange.GetPosition() or []:
symbol = position_symbol(pos)
if symbol not in store["markets"]:
continue
state = _G(position_state_key(symbol)) or {}
market = store["markets"][symbol]
ticker = exchange.GetTicker(market["contract"])
direction = position_direction(pos)
pnl_pct = (
(ticker["Last"] - pos["Price"]) /
pos["Price"] * 100 *
(1 if direction == "long" else -1)
)
if pnl_pct > state.get("peakPnlPct", 0):
state["peakPnlPct"] = pnl_pct
if not state.get("trailActive") and state.get("peakPnlPct", 0) >= TRAIL_ACTIVATE_PCT:
state["trailActive"] = True
hard_stop = False
if state.get("stop"):
hard_stop = (
ticker["Last"] <= state["stop"]
if direction == "long"
else ticker["Last"] >= state["stop"]
)
trail_hit = False
if state.get("trailActive"):
giveback = state.get("peakPnlPct", 0) - pnl_pct
allowed = max(
1.5,
state.get("peakPnlPct", 0) * TRAIL_GIVEBACK_PCT / 100.0
)
trail_hit = giveback >= allowed
if hard_stop or trail_hit:
close_existing_position(
store, symbol, pos,
"hard_stop" if hard_stop else "trailing_stop"
)
Ini bukan versi akhir pengurusan risiko, tetapi sebagai versi pertama untuk pemerhatian dagangan sebenar, ia sudah memadai.
Selepas ini, saya masih perlu menambah had jumlah kedudukan per akaun, pendedahan sektor tunggal, had kerugian harian, pengesahan urus niaga, dan had bilangan kali penambahan kedudukan.
Setakat mana sistem ini sudah dibangunkan?
Sistem ini kini sudah boleh melengkapkan satu kitaran penyelidikan yang agak lengkap.
Ia boleh mengimbas kontrak saham TradFi secara automatik, secara automatik meminta model besar membuat profil bakul saham untuk kedudukan beli, secara automatik membina subsektor AI, secara automatik menarik maklumat sektor dan saham individu melalui BraveSearch, secara automatik meringkaskan risikan sektor, secara automatik mengesan kekuatan masa nyata setiap bakul, secara automatik mengira hubungan ikutan saham dalam bakul, dan menjalankan penyiasatan punca berita selepas penembusan harga pemimpin.
Jika penjelasan berita sah, arah selaras, dan hubungan statistik juga menyokong, sistem akan menjana isyarat yang disahkan. Dalam mod lalai, ia hanya memberi notifikasi, tidak berdagang secara langsung; hanya selepas bertukar ke mod dagangan, barulah ia akan berurus niaga.
Halaman dagangan sebenar juga bukan lagi sekadar log, tetapi memaparkan gambaran keseluruhan sistem, status masa nyata bakul, risikan sektor, isyarat terkini, urus niaga terkini, dan langkah terkini dalam bentuk jadual. Ini membolehkan kita melihat dengan jelas di langkah mana sistem tersekat: adakah hanya harga yang tidak normal, atau berita tidak mempunyai penjelasan, atau pengikut tidak memenuhi syarat, atau pengurusan risiko menyekatnya.
Bahagian Yang Masih Belum Matang
Sejujurnya, sistem ini masih belum boleh dianggap sebagai strategi dagangan automatik yang matang.
Ia lebih menyerupai rangka kerja penyelidikan pusingan tema AI, yang sudah boleh menghubungkan "profil saham, risikan sektor, keabnormalan harga, penyiasatan punca berita, pengesahan statistik, isyarat dagangan", tetapi masih perlu terus diuji.
Perkara yang paling perlu diperbaiki adalah beberapa bahagian.
(1) Kualiti profil saham. Model besar kadangkala memasukkan saham pinggiran ke dalam bakul, jadi asset_type mesti diwajibkan untuk mengelakkan ETF, indeks, dana serantau daripada bercampur masuk.
(2) Kualiti berita. Berita yang ditangkap oleh BraveSearch tidak semestinya berita teras, model perlu menilai mana yang benar-benar boleh menjelaskan harga.
(3) Hubungan statistik. Hubungan ikutan sejarah tidak menjamin keberkesanan pada masa hadapan, ia perlu dikaji semula secara berterusan.
(4) Pengurusan risiko dagangan. Sebelum dagangan automatik, kedudukan per akaun, pendedahan sektor, kerugian harian, dan pengesahan urus niaga mesti ditambah.
Oleh itu, pada masa ini lebih sesuai untuk menjalankan mod notifikasi terlebih dahulu, dan melihat kualiti isyarat yang disahkan.
Jika selepas satu tempoh, didapati isyarat memang boleh menjelaskan pergerakan pasaran yang tidak normal, dan pengikut sering bertindak balas selepasnya, barulah mempertimbangkan dagangan sebenar dengan saiz kecil.
Kata Penutup
Strategi ini tidak membenarkan AI membuat pesanan secara langsung.
Saya selalu berpendapat bahawa kedudukan yang paling sesuai untuk model besar dalam sistem dagangan bukanlah "beritahu saya apa yang hendak dibeli", tetapi membantu kita memproses struktur maklumat yang sukar dikekalkan secara manual: perniagaan syarikat, klasifikasi sektor, berita masa nyata, penjelasan peristiwa, laluan aliran dana, sasaran yang berpotensi terjejas.
Dagangan sebenar tetap harus diserahkan kepada harga, statistik, dan pengurusan risiko.
Strategi kuantitatif dalam era AI tidak seharusnya hanya menambah satu antara muka model besar, tetapi harus menghubungkan data masa nyata, graf tema, berita peristiwa, struktur harga, pelaksanaan dagangan, dan penjelasan kajian semula.
Strategi graf saham AI ini adalah satu percubaan yang dilakukan ke arah ini.
Sumber kod strategi: AI Rantaian Industri Sistem Dagangan Kontrak TradFi
- 1





