Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Je, LLM inaweza kupata alpha factors?

LLM inaweza kuandika alpha factors mia moja kwa saa. Jifunze alama za factors 240 za coin flip kwenye bei halisi za miaka kumi na jinsi ya kuzijaribu zilizosalia.

LLM inaweza kupendekeza alpha factors siku nzima. Ukiipa modeli yenye uwezo kamusi ya data na mfumo wa kupima alama, itaandika expressions mia moja za factor zinazoonekana kuwa na mantiki kabla ya muda wa chakula cha mchana. Swali gumu zaidi liko chini ya hapo: mtu angejuaje kama mojawapo ni halisi, wakati utafutaji ulioizalisha ni mashine ya kutengeneza washindi kutokana na noise?

Alpha factor ni nini?

Factor ni kanuni inayobadilisha data ya soko kuwa namba moja kwa kila hisa katika kila tarehe. Mabadiliko ya bei kwa miezi kumi na miwili ni factor. Vivyo hivyo ni uwiano wa deni kwa equity. Factor huwa strategy unapopanga universe kwa kutumia factor hiyo, kununua kundi la juu, kuuza kundi la chini, na kufanya rebalancing kwa ratiba. Alpha ni return inayobaki baada ya kuondoa return ambayo exposure ya kawaida kwenye soko ingekupa hata hivyo.

Candidates hupimwa kwa kutumia Sharpe ratio: wastani wa return ukigawanywa kwa standard deviation ya return hiyo, kisha kuannualishwa. Ni return kwa kila kipimo cha volatility. Sharpe ya muda mrefu iliyo karibu na 1 katika strategy inayofanya kazi live inastahili kuheshimiwa. Hili ni muhimu kukumbuka wakati backtest inayofuata inapotaja 3.

Utafiti wa LLM factor hufanyikaje kwa vitendo

Kila mradi katika eneo hili hutumia toleo fulani la mzunguko uleule.

  1. Modeli huandika factor expressions katika lugha ndogo ambayo harness inaweza kuitathmini.
  2. Backtester hupima kila expression kwa kutumia historia iliyowekwa ya bei na fundamentals.
  3. Expressions zilizo juu ya threshold ya alama huhifadhiwa. Zilizobaki hutupwa.
  4. Zilizohifadhiwa hurudishwa kwenye context ya modeli kama mifano iliyofanyiwa kazi, kisha mzunguko huanza tena.

Mifumo ya biashara ya mawakala wengi hugawa kazi hizo miongoni mwa majukumu tofauti, ambapo mmoja hupendekeza na mwingine hupima. Miundombinu hiyo ni muhimu kwa kweli, na ujuzi wa data za soko unaohitajiwa na AI agent ni uleule ambao mtu anahitaji.

Hakuna jambo lisilo la uaminifu katika mzunguko huo. Utafutaji ndiyo njia ambayo utafiti hufanywa. Tatizo ni la kihesabu, na hujitokeza mara tu hatua ya 2 inapotekelezwa zaidi ya mara chache.

Kwa nini utafutaji wa LLM alpha factor hutengeneza washindi

Historia moja ya bei. Hypotheses nyingi za gharama ndogo. Kila hypothesis hupimwa dhidi ya sample ileile yenye ukomo, na sample hiyo ina bahati nyingi ndani yake. Ukijaribu rules za kutosha, baadhi zitafit bahati hiyo kwa karibu. Alama haiwezi kukuambia ni aina gani ya fit uliyopata, kwa sababu rule iliyolingana na noise na rule iliyolingana na market print hutoa namba ileile.

Hapa kuna null hypothesis iliyochorwa mara 240. Kila “factor” hapa chini ni coin flip: hash ya ticker, mwezi na namba ya jaribio hugawa majina 40 makubwa ya Marekani katika nusu mbili kila mwezi, na strategy huwa long nusu moja na short nusu nyingine. Hakuna taarifa ndani yake, kwa ujenzi wake. Yakipimwa kwa returns halisi za mwisho wa mwezi kuanzia Januari 2016 hadi Juni 2021, majaribio hayo 240 yanagawanyika hivi.

UlizaVipengele 240 vya kubahatisha vilivyopimwa kwa bei halisi: Sharpe ya mwaka, Jan 2016 hadi Jun 2021
SQL halisi nyuma ya kila namba
WITH month_end AS (
    SELECT ticker,
           toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','ADBE','AMZN','BA','CAT','COST','CRM','CSCO','CVX','DE',
                     'DUK','GE','GOOGL','HD','HON','IBM','INTC','JNJ','JPM','KO',
                     'LMT','MCD','MMM','MRK','MSFT','NKE','NVDA','ORCL','PEP','PFE',
                     'PG','QCOM','SO','T','TGT','TXN','UNP','VZ','WMT','XOM')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2015-12-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2021-06-30')
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) >= 22
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, month_start
),
lagged AS (
    SELECT ticker,
           month_start,
           close_px,
           lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY month_start
                                      ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
    FROM month_end
),
monthly_return AS (
    SELECT ticker, month_start, close_px / prev_px - 1 AS ret
    FROM lagged
    WHERE prev_px > 0
      AND month_start >= toDate('2016-01-01')
),
trial AS (
    SELECT arrayJoin(range(1, 241)) AS n
),
factor_month AS (
    SELECT t.n AS trial_id,
           m.month_start AS month_start,
           avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1)
         - avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) AS long_short_ret
    FROM monthly_return AS m
    CROSS JOIN trial AS t
    GROUP BY trial_id, month_start
    HAVING countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1) > 0
       AND countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) > 0
),
scored AS (
    SELECT trial_id,
           avg(long_short_ret) / stddevSamp(long_short_ret) * sqrt(12) AS sharpe
    FROM factor_month
    GROUP BY trial_id
    HAVING stddevSamp(long_short_ret) > 0
)
SELECT multiIf(sharpe < -1.2, 'below -1.2',
               sharpe < -0.8, '-1.2 to -0.8',
               sharpe < -0.4, '-0.8 to -0.4',
               sharpe <  0.0, '-0.4 to 0.0',
               sharpe <  0.4, '0.0 to 0.4',
               sharpe <  0.8, '0.4 to 0.8',
               sharpe <  1.2, '0.8 to 1.2',
               '1.2 and above') AS sharpe_bucket,
       count() AS factor_count,
       round(100 * count() / 240, 1) AS share_pct
FROM scored
GROUP BY sharpe_bucket
ORDER BY min(sharpe)
Run this yourself

Spread ndiyo hoja yote. Hakuna chochote kwenye chart hiyo kinachotabiri jambo lolote, lakini bado majaribio 1 yaliingia kwenye kundi la juu (1.2 and above), 0.4% ya utafutaji, na 1 kwenye kundi la chini (below -1.2). Mtafiti aliyefanya jaribio moja yenye bahati na kusimama angekuwa na chart na Sharpe ratio, bila njia ya kutofautisha mojawapo na discovery. Returns hapa ni kutoka close ya mwisho wa mwezi mmoja hadi close ya mwisho wa mwezi mwingine; jinsi returns za kila mwezi hupimwa inaeleza hesabu hiyo.

Namba muhimu ni idadi ya majaribio uliyofanya

Backtest inayoripotiwa peke yake haina denominator yake. Majaribio yale yale 240, yakisomwa kama utafutaji unaoendelea kupanuka: katika kila hatua, alama bora zaidi kwenye ubao ikilinganishwa na wastani wa kila kitu kilichojaribiwa hadi wakati huo.

UlizaAlama bora huongezeka kadiri utafutaji unavyopanuka: Sharpe bora na wastani kulingana na idadi ya majaribio
SQL halisi nyuma ya kila namba
WITH month_end AS (
    SELECT ticker,
           toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','ADBE','AMZN','BA','CAT','COST','CRM','CSCO','CVX','DE',
                     'DUK','GE','GOOGL','HD','HON','IBM','INTC','JNJ','JPM','KO',
                     'LMT','MCD','MMM','MRK','MSFT','NKE','NVDA','ORCL','PEP','PFE',
                     'PG','QCOM','SO','T','TGT','TXN','UNP','VZ','WMT','XOM')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2015-12-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2021-06-30')
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) >= 22
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, month_start
),
lagged AS (
    SELECT ticker,
           month_start,
           close_px,
           lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY month_start
                                      ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
    FROM month_end
),
monthly_return AS (
    SELECT ticker, month_start, close_px / prev_px - 1 AS ret
    FROM lagged
    WHERE prev_px > 0
      AND month_start >= toDate('2016-01-01')
),
trial AS (
    SELECT arrayJoin(range(1, 241)) AS n
),
factor_month AS (
    SELECT t.n AS trial_id,
           m.month_start AS month_start,
           avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1)
         - avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) AS long_short_ret
    FROM monthly_return AS m
    CROSS JOIN trial AS t
    GROUP BY trial_id, month_start
    HAVING countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1) > 0
       AND countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) > 0
),
scored AS (
    SELECT trial_id,
           avg(long_short_ret) / stddevSamp(long_short_ret) * sqrt(12) AS sharpe
    FROM factor_month
    GROUP BY trial_id
    HAVING stddevSamp(long_short_ret) > 0
),
ladder AS (
    SELECT arrayJoin([1, 2, 5, 10, 25, 50, 100, 160, 240]) AS n
)
SELECT l.n AS factors_tried,
       round(max(s.sharpe), 2) AS best_sharpe,
       round(avg(s.sharpe), 2) AS average_sharpe
FROM ladder AS l
CROSS JOIN scored AS s
WHERE s.trial_id <= l.n
GROUP BY factors_tried
ORDER BY factors_tried
Run this yourself

Maximum inayoendelea inaweza kupanda tu, na huo ndio mtego. Rule ya kwanza iliyojaribiwa ilipata 0.44. Baada ya majaribio 240, alama bora kwenye ubao ilikuwa 1.59, huku wastani wa yote ukiwa 0.01. Kichwa cha habari kiliboreshwa bila rule yoyote kuboreshwa. Harness inayotathmini expressions elfu kumi inaendesha curve hii mbali sana upande wa kulia wa kilichoonyeshwa hapa, na namba inayoripoti ni kilele chake.

Kipindi cha holdout huwafanyaje washindi

Ulinzi wa kawaida ni holdout: pima katika kipindi kimoja, kisha pima tena survivors katika kipindi cha baadaye ambacho utafutaji haukukigusa. Chukua coin flips kumi na mbili bora kutoka kwenye training window, kisha endesha rules zilezile katika miaka mitano iliyofuata, kuanzia Julai 2021 hadi Juni 2026.

UlizaMajaribio 12 bora katika mafunzo, yaliyopimwa tena kwa miaka mitano ambayo haikutumika (Jul 2021 hadi Jun 2026)
SQL halisi nyuma ya kila namba
WITH month_end AS (
    SELECT ticker,
           toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','ADBE','AMZN','BA','CAT','COST','CRM','CSCO','CVX','DE',
                     'DUK','GE','GOOGL','HD','HON','IBM','INTC','JNJ','JPM','KO',
                     'LMT','MCD','MMM','MRK','MSFT','NKE','NVDA','ORCL','PEP','PFE',
                     'PG','QCOM','SO','T','TGT','TXN','UNP','VZ','WMT','XOM')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2015-12-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) >= 22
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, month_start
),
lagged AS (
    SELECT ticker,
           month_start,
           close_px,
           lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY month_start
                                      ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
    FROM month_end
),
monthly_return AS (
    SELECT ticker, month_start, close_px / prev_px - 1 AS ret
    FROM lagged
    WHERE prev_px > 0
      AND month_start >= toDate('2016-01-01')
),
trial AS (
    SELECT arrayJoin(range(1, 241)) AS n
),
factor_month AS (
    SELECT t.n AS trial_id,
           m.month_start AS month_start,
           avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1)
         - avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) AS long_short_ret
    FROM monthly_return AS m
    CROSS JOIN trial AS t
    GROUP BY trial_id, month_start
    HAVING countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1) > 0
       AND countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) > 0
),
scored AS (
    SELECT trial_id,
           avgIf(long_short_ret, month_start <  toDate('2021-07-01'))
             / stddevSampIf(long_short_ret, month_start <  toDate('2021-07-01')) * sqrt(12) AS in_sample_sharpe,
           avgIf(long_short_ret, month_start >= toDate('2021-07-01'))
             / stddevSampIf(long_short_ret, month_start >= toDate('2021-07-01')) * sqrt(12) AS out_of_sample_sharpe
    FROM factor_month
    GROUP BY trial_id
    HAVING countIf(month_start <  toDate('2021-07-01')) >= 24
       AND countIf(month_start >= toDate('2021-07-01')) >= 24
)
SELECT concat('trial ', toString(trial_id)) AS factor_label,
       round(in_sample_sharpe, 2) AS in_sample_sharpe,
       round(out_of_sample_sharpe, 2) AS out_of_sample_sharpe
FROM scored
ORDER BY in_sample_sharpe DESC
LIMIT 12
Run this yourself

Kila jozi ya bars ni rule moja. Bar ya kushoto ni alama iliyoipa nafasi katika ripoti. Bar ya kulia ni rule ileile katika miaka mitano iliyofuata. Trial iliyokuwa ya kwanza ilipata 1.59 katika training na -0.51 baadaye; trial ya kumi na mbili ilipata 0.74 na kisha 0.49.

Rules kumi na mbili ni sample ndogo yenyewe. Ukipanga zote 240 katika fifths kwa kutumia training score, kisha ukapata wastani wa holdout score kwa kila fifth, unapata mtazamo ulio wazi zaidi.

UlizaNafasi ya mafunzo dhidi ya matokeo ya holdout: majaribio 240 yaliyogawanywa katika sehemu tano
SQL halisi nyuma ya kila namba
WITH month_end AS (
    SELECT ticker,
           toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
           argMax(toFloat64(close), window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','ADBE','AMZN','BA','CAT','COST','CRM','CSCO','CVX','DE',
                     'DUK','GE','GOOGL','HD','HON','IBM','INTC','JNJ','JPM','KO',
                     'LMT','MCD','MMM','MRK','MSFT','NKE','NVDA','ORCL','PEP','PFE',
                     'PG','QCOM','SO','T','TGT','TXN','UNP','VZ','WMT','XOM')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2015-12-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) >= 22
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, month_start
),
lagged AS (
    SELECT ticker,
           month_start,
           close_px,
           lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY month_start
                                      ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
    FROM month_end
),
monthly_return AS (
    SELECT ticker, month_start, close_px / prev_px - 1 AS ret
    FROM lagged
    WHERE prev_px > 0
      AND month_start >= toDate('2016-01-01')
),
trial AS (
    SELECT arrayJoin(range(1, 241)) AS n
),
factor_month AS (
    SELECT t.n AS trial_id,
           m.month_start AS month_start,
           avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1)
         - avgIf(m.ret, bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) AS long_short_ret
    FROM monthly_return AS m
    CROSS JOIN trial AS t
    GROUP BY trial_id, month_start
    HAVING countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 1) > 0
       AND countIf(bitAnd(cityHash64(m.ticker, toString(m.month_start), t.n), 1) = 0) > 0
),
scored AS (
    SELECT trial_id,
           avgIf(long_short_ret, month_start <  toDate('2021-07-01'))
             / stddevSampIf(long_short_ret, month_start <  toDate('2021-07-01')) * sqrt(12) AS in_sample_sharpe,
           avgIf(long_short_ret, month_start >= toDate('2021-07-01'))
             / stddevSampIf(long_short_ret, month_start >= toDate('2021-07-01')) * sqrt(12) AS out_of_sample_sharpe
    FROM factor_month
    GROUP BY trial_id
    HAVING countIf(month_start <  toDate('2021-07-01')) >= 24
       AND countIf(month_start >= toDate('2021-07-01')) >= 24
),
ranked AS (
    SELECT trial_id,
           in_sample_sharpe,
           out_of_sample_sharpe,
           row_number() OVER (ORDER BY in_sample_sharpe DESC) AS in_sample_rank
    FROM scored
)
SELECT multiIf(in_sample_rank <=  48, 'best fifth in training',
               in_sample_rank <=  96, 'second fifth',
               in_sample_rank <= 144, 'middle fifth',
               in_sample_rank <= 192, 'fourth fifth',
               'worst fifth in training') AS training_group,
       round(avg(in_sample_sharpe), 2) AS avg_in_sample_sharpe,
       round(avg(out_of_sample_sharpe), 2) AS avg_out_of_sample_sharpe
FROM ranked
GROUP BY training_group
ORDER BY min(in_sample_rank)
Run this yourself

Katika training, makundi yanaanzia 0.66 juu hadi -0.63 chini. Huo ni mfululizo mpana na wenye mpangilio kamili, kwa sababu makundi yaligawanywa kwa kutumia alama hiyo hiyo. Katika holdout, ncha hizo mbili zina wastani wa 0.01 na 0.13. Mfululizo huo unasawazika. Holdout ndiyo sehemu pekee ya pipeline ambayo haijaoptimized dhidi yake, na hilo ndilo linaloifanya iwe ya thamani na itumike kwa uangalifu.

Kinga zinazofanya kazi kweli

Holdout unayotumia mara moja. Kila unapoiangalia, unaibadilisha kuwa training data. Walk-forward testing, ambapo window husogea na kila alama hutokana na data ya baada ya fit, ndiyo toleo linalostahimili matumizi ya mara kwa mara.

Marekebisho ya multiple-testing. Deflated Sharpe ratio, iliyoanzishwa na Bailey na López de Prado mwaka 2014, hupunguza Sharpe iliyozingatiwa kwa kuzingatia idadi ya majaribio yaliyofanywa, urefu wa sample, skewness ya returns, na unene wa tails zake. Ukiingiza idadi ya majaribio kwa uaminifu, headline Sharpe kutoka kwenye utafutaji wa expressions elfu kumi mara nyingi hupungua hadi kutokuwa na maana.

Audit trail inayojumuisha kila expression iliyojaribiwa, pamoja na zilizotupwa. Hii ndiyo sehemu ya msingi, na ndiyo sababu “auditable” ni neno muhimu katika maelezo ya mradi wa factor research. Deflation inahitaji idadi ya majaribio. Pipeline inayorekodi washindi pekee imeharibu input ya correction yake yenyewe. Drafts zilizotupwa, parameter sweeps zilizoachwa, restarts za mtafiti mwenyewe, na kila toleo la awali la scoring code vyote huhesabiwa katika idadi hiyo.

Ukaguzi wa cost na look-ahead bias kabla ya kuamini alama. Factor iliyopangwa kwa kutumia fundamentals field yenye tarehe ambayo vendor aliipakia, badala ya tarehe ambayo soko lingeweza kuiona, hutoa backtest nzuri lakini hufanya biashara vibaya.

Kusoma neno “auditable”

Repositories mpya katika eneo hili hujitokeza karibu kila wiki, na mradi wenye stars kadhaa dazeni ni prototype, si track record. Idadi ya stars pia hubadilika kwa kasi kuliko code yenyewe. Ndiyo maana ukurasa huu hupima pattern badala ya mradi mmoja. Hivi ndivyo unavyopaswa kufungua kwanza katika mradi wowote utakaokutana nao.

  • Je, huweka kumbukumbu ya kila candidate pamoja na expression yake na alama yake, ikiwa na timestamp, au huweka kumbukumbu ya zilizohifadhiwa pekee?
  • Je, holdout inalazimishwa na harness, au inategemea nidhamu binafsi ya mtafiti?
  • Je, kila alama inayoripotiwa inaambatana na idadi ya majaribio?
  • Iliundwa kwa ajili ya soko gani? Library iliyotuned kwa China A-shares hurithi price limits za kila siku na kizuizi cha kuuza hisa zilizonunuliwa katika session hiyo hiyo. Tabia ya factor chini ya kanuni hizo haihamishiki moja kwa moja kwenye US equities.
  • Je, unaweza kuiendesha tena na kuzalisha namba hizo? Weka commit halisi uliyosoma, kwa sababu mradi katika hatua hii hubadilisha scoring code yake kati ya wikendi.

Hakuna lolote kati ya haya linalofanya LLM isiwe na manufaa katika factor research. Kuzalisha hypotheses ni kikwazo halisi, na models ni nzuri katika kazi hiyo. Kinachobadilika ni mahali ambapo mzigo unaangukia: kwenye uhasibu wa idadi ya hypotheses zilizotumiwa. Kabla ya mojawapo haijakutana na live order book, paper trading ndiyo mahali ambapo tofauti kati ya backtest na fill huonekana.

Maswali yanayoulizwa mara kwa mara kuhusu LLM alpha factor

Je, LLM inaweza kupata alpha factors?

Inaweza kupendekeza maelfu yao, lakini pendekezo si ugunduzi. Dai hilo hutolewa katika hatua ya scoring, na score inayotokana na utafutaji mpana ina tatizo la selection ambalo score yenyewe haiwezi kuliona. Tathmini nidhamu ya holdout na idadi iliyorekodiwa ya majaribio kabla ya expression yenyewe.

Deflated Sharpe ratio ni nini?

Ni correction inayobadilisha Sharpe ratio iliyozingatiwa kuwa uwezekano kwamba utafutaji wa ukubwa huo ungeizalisha bila kuwepo edge halisi. Bailey na López de Prado waliichapisha mwaka 2014. Input yake kuu ni idadi ya majaribio, ambayo ni namba ambayo research loop isiyo na audit haiwezi kutoa.

Backtests ngapi ni nyingi kupita kiasi?

Hakuna threshold; kuna adjustment inayopaswa kutumiwa. Backtest moja yenye score ya 1.0 na backtests elfu kumi ambazo score yao bora ni 1.0 ni madai tofauti kuhusu dunia. Coin flips zilizo hapo juu zilifikia 1.59 katika majaribio 240 bila kuwa na taarifa yoyote katika data.

Kwa nini published factors hudhoofika baada ya kuchapishwa?

Utafiti wa kitaaluma umefuatilia kudhoofika kwa anomalies zilizochapishwa katika miaka inayofuata kuchapishwa kwake. Crowding ni mojawapo ya sababu zilizopendekezwa, na result ya awali iliyofit kupita kiasi kwenye sample yake yenyewe ni sababu nyingine; zote hutoa umbo lilelile kwenye chart. Efficient market hypothesis inaeleza ya kwanza, na majaribio yaliyo hapo juu yanaonyesha ya pili.


Kila paneli hapa ni stored query juu ya bei halisi za mwisho wa mwezi, na SQL iko wazi chini yake. Nakili moja, ongeza idadi ya majaribio, na uangalie namba bora zaidi ikipanda kwenye Strasmore terminal.

#llm#factor research#overfitting#multiple testing#quant