{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2605-15412","title":"From Feedback Loops to Policy Updates: Reinforcement Fine-Tuning for LLM-Based Alpha Factor Discovery","arxiv_id":"2605.15412","date":"2026-05-14","proceeding":null,"authors":["Lingzhe Zhang","Tong Jia","Yunpeng Zhai","Zixuan Xie","Chiming Duan","Minghua He","Philip S. Yu","Ying Li"],"abstract":"Modern quantitative trading increasingly relies on systematic models to extract predictive signals from large-scale financial data, where alpha factor discovery plays a central role in transforming market observations into tradable signals. Recent LLM-based methods have shown promise in automating factor generation, but most of them still rely on prompt-level generation--evaluation--feedback loops for iterative optimization. As the loop becomes longer, repeatedly appended historical candidates and feedback can cause context explosion, increase inference cost, dilute useful information, and introduce feedback drift. Moreover, these methods often depend on very large LLMs whose stable generation preferences may lead to structurally similar expressions, redundant candidates, and search stagnation. To address these limitations, we propose \\textsc{QuantEvolver}, a self-evolving alpha factor discovery framework based on reinforcement fine-tuning. Instead of accumulating feedback in the prompt, \\textsc{QuantEvolver} converts executable quantitative evaluation into policy updates, enabling a Miner LLM to internalize historical optimization experience through parameter learning. Specifically, \\textsc{QuantEvolver} constructs high-quality seed factors, builds diverse seed--time-window training tasks, generates executable Factor DSL expressions, evaluates them through Regime Backtest, and optimizes the Miner LLM with Diversity-Complementarity Reward. During training, high-quality factors are continuously accumulated in a Mined Factor Database, which serves as the final discovered factor library. Extensive experiments on three realistic market benchmarks demonstrate the effectiveness of \\textsc{QuantEvolver}, which consistently improves the primary evaluation metric of each task over existing LLM-based alpha factor discovery baselines, produces higher-quality and more complementary factor pools.","url_abs":"https://arxiv.org/abs/2605.15412","url_pdf":"https://arxiv.org/pdf/2605.15412","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2605.15412","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2605.15412"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/QuantLLM/QuantEvolver","reach":null}],"summary":{"ran":3,"unverified":3},"by_repo_kind":{"found_in_text":{"samples":6,"ran":3,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"029523010ee52e15","entry":"analyse_expr","repo":"QuantLLM/QuantEvolver","repo_kind":"found_in_text","path":"quant_evolver/dsl/ast_tools.py","file_url":"https://github.com/QuantLLM/QuantEvolver/blob/HEAD/quant_evolver/dsl/ast_tools.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"029523010ee52e15"}},{"code_sha256_prefix":"1786061e1cad9d88","entry":"extract_expr","repo":"QuantLLM/QuantEvolver","repo_kind":"found_in_text","path":"quant_evolver/dsl/compiler.py","file_url":"https://github.com/QuantLLM/QuantEvolver/blob/HEAD/quant_evolver/dsl/compiler.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1786061e1cad9d88"}},{"code_sha256_prefix":"999024518f06552e","entry":"safe_symbol","repo":"QuantLLM/QuantEvolver","repo_kind":"found_in_text","path":"quant_evolver/evaluation/data.py","file_url":"https://github.com/QuantLLM/QuantEvolver/blob/HEAD/quant_evolver/evaluation/data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"999024518f06552e"}},{"code_sha256_prefix":"6e8c5e5c6b04f18e","entry":"compile_expr","repo":"QuantLLM/QuantEvolver","repo_kind":"found_in_text","path":"quant_evolver/dsl/compiler.py","file_url":"https://github.com/QuantLLM/QuantEvolver/blob/HEAD/quant_evolver/dsl/compiler.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6e8c5e5c6b04f18e"}},{"code_sha256_prefix":"1554f389320c988b","entry":"evaluate_expr_series","repo":"QuantLLM/QuantEvolver","repo_kind":"found_in_text","path":"quant_evolver/dsl/evaluator.py","file_url":"https://github.com/QuantLLM/QuantEvolver/blob/HEAD/quant_evolver/dsl/evaluator.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1554f389320c988b"}},{"code_sha256_prefix":"73e328268356a28c","entry":"load_factor_class_from_code","repo":"QuantLLM/QuantEvolver","repo_kind":"found_in_text","path":"quant_evolver/evaluation/factor_loader.py","file_url":"https://github.com/QuantLLM/QuantEvolver/blob/HEAD/quant_evolver/evaluation/factor_loader.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"73e328268356a28c"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}