<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>黑犬窝</title>
        <link>https://www.shuheng-mo.com//</link>
        <description>黑犬的赛博狗窝，AI时代数字世界最后的温柔</description>
        <lastBuildDate>Thu, 01 Jan 2026 17:38:02 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-US</language>
        <copyright>All rights reserved 2026, 黑犬</copyright>
        <item>
            <title><![CDATA[从赌徒到专业交易员：你只需要10分钟]]></title>
            <link>https://www.shuheng-mo.com//article/trading-framework</link>
            <guid>https://www.shuheng-mo.com//article/trading-framework</guid>
            <pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[价值百万的系统化交易框架]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-2d981b9ce32980f6a68ce4717494051e"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-2d981b9ce32980a5a3e4f0ac5932b5b0">你可能在网上看到过很多的教人构建自己股票交易系统的文章，不是借鉴以往复杂的交易系统（比如海龟）要么就是从一些复杂晦涩的金融术语出发，告诉你股票该这么做、期货要那么做，你应该去看谁的书、应该去听哪个大佬的博客，或者说散户就定投基金就好了别瞎掺合… … </div><div class="notion-blank notion-block-2d981b9ce32980a49a78f6808e27f1a6"> </div><div class="notion-text notion-block-2d981b9ce32980619361c0b26376db65">你不禁想问：<em><b>什么样的交易系统才是好的呀？为什么每个人告诉我的都不一样？普通人是不是很难拥有一套属于自己的交易系统。</b></em></div><div class="notion-blank notion-block-2d981b9ce32980579ba3f32ddfad020d"> </div><div class="notion-text notion-block-2d981b9ce32980ea9cbfded929f1f081">其实真相是，没有百分百胜率的交易系统或者交易方法，即便是那些穿越周期叱咤金融圈几十年的大佬们，也有看走眼，也有心态不好的时候。交易系统、交易方法，本质是一种心法，没有绝对的好或者绝对的坏，它不过是你的认知的具像化，当它能给你带来收益帮助你过上更好的生活时，它对于你来说就是一种“好”的系统。</div><div class="notion-blank notion-block-2d981b9ce32980a0a0cec1451a557380"> </div><div class="notion-text notion-block-2d981b9ce32980cabe1dd301b43cdc06">那么问题来了，普通人、没有金融常识的人就没法构建一个行之有效的交易系统吗？当然不是，只要一开始有正确的认知和观念，谁都可以在此基础上构建出属于自己稳健的、能持续盈利的交易系统，这种系统对任何人都有效、对任何的金融工具品类都奏效，而且非常灵活。</div><div class="notion-blank notion-block-2d981b9ce3298028a636cfae302dad07"> </div><div class="notion-text notion-block-2d981b9ce32980ee97c4c9298ca994e0">今天就让我们用10分钟，来搭建这样一个交易系统的框架。(⚠️<span class="notion-red_background"><b>注意：文中的金融术语文末会有通俗解释，没有金融知识也可以放心看～</b></span>)</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce329819a8f94e5348eee3734" data-id="2d981b9ce329819a8f94e5348eee3734"><span><div id="2d981b9ce329819a8f94e5348eee3734" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce329819a8f94e5348eee3734" title="第一步 心态重塑——交易是一门严肃的生意 "><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>第一步 心态重塑——交易是一门严肃的生意 </b></span></span></h3><div class="notion-text notion-block-2d981b9ce3298085b813e1d4c35562cf">摆正心态、认清自己并且管理好自身的精力，把你有限的精力都花在<b>基本面分析</b>上而不是<b>技术面</b>。</div><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980549515f422571b0263"><li><b>能力层次理论</b>：大多数人处于“无意识无能”阶段，即<b>不知道自己不知道</b>。职业化、稳定盈利化的第一步是进入“有意识能力”状态，将交易视为一项<b>可重复、可审计的业务</b>，而非随机的博弈，你较真了才能赢，要做到复盘自己为什么赢了能说出来。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980b08958f53e87524702"><li><b>黄金法则 80/20</b>：职业交易员 80%-90% 的精力花在基本面研究（寻找逻辑），仅 10%-20% 花在技术分析（确定时机）。同样散户也<b>不要每天盯盘</b>，你的精力比起职业人士更少，应该专注识别优质资产而非天天想着怎么择时看K线。（你想做日内当我没说🙇）</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298012b9b9f833e5031bb9"><li><b>时间窗口的“甜蜜点”</b>：放弃日内短线的噪音，避开长期持有的时间成本，专注于 <b>20-60个交易日</b> 的波动，这是基本面驱动力与价格爆发最契合的窗口，也就是1-2个月调整一次仓位就好。</li></ul><div class="notion-blank notion-block-2d981b9ce329803fadcdfd9755f2bb73"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce3298082b825dc0f76c2bb8c" data-id="2d981b9ce3298082b825dc0f76c2bb8c"><span><div id="2d981b9ce3298082b825dc0f76c2bb8c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce3298082b825dc0f76c2bb8c" title="第二步 宏观指标——确定航行的方向"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>第二步 宏观指标——确定航行的方向</b></span></span></h3><div class="notion-text notion-block-2d981b9ce3298001a9daed9f6140c49e">部分人说“宏观无用”，宏观分析可能不能指导你每天的交易，但是它一定展现市场变化趋势，能避免你做一些跟不上或者违反“大势”的事。</div><ul class="notion-list notion-list-disc notion-block-2d981b9ce329808ab944ed7c4ba5abf9"><li><b>本国GDP与股市的勾稽关系</b>：股市是宏观经济的先行指标，提前 6 个月反映趋势。预测未来半年的 GDP 走向是确定投资组合“<b>多空偏向（Bias）</b>”的罗盘。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980689789e38953faae0d"><li><b>全球宏观领先指标</b>：至少应该监控<b>收益率曲线</b>（利差收窄预示衰退风险）、<b>信用利差</b>（评估风险情绪）和 <b>M2 货币供应量</b>（流动性的源头）。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980d2995edc9d527ebfb1"><li><b>政策周期</b>：中国股市具有强烈的“<b>政策市</b>”特征，必须关注重要会议（如中央经济工作会议）的产业定调，多听听政策解读在中国大陆总是一件好事。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce329802bbfb3ef12e293b4a6"><li><b>信用</b>：在中国，<b>社融数据（TSF）</b>的变动往往比纯货币供应更能反映实体经济的饥渴程度。</li></ul><div class="notion-blank notion-block-2d981b9ce329806f98d0d6739b003cd7"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce32980f2babadca8b0d23f87" data-id="2d981b9ce32980f2babadca8b0d23f87"><span><div id="2d981b9ce32980f2babadca8b0d23f87" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce32980f2babadca8b0d23f87" title="第三步 学会定量筛选——寻找市场的“优等生”与“差生” "><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>第三步 学会定量筛选——寻找市场的“优等生”与“差生” </b></span></span></h3><div class="notion-text notion-block-2d981b9ce32980b19068ea36def254a5">不管什么交易，都是矮子里面拔高个，其实根据一些价格指标我们已经可以筛选掉大部分矮子，接着再用 定性分析找高个。</div><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980e3b80afc6302ae9717"><li><b>PE（市盈率）</b>：不是 PE 低就是便宜，PE 高就是贵。<b>价格是质量的信号</b>，高 PE 往往意味着市场愿意为高质量的增长支付溢价，而低 PE 可能是“价值陷阱”。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298040a857fb016d3c7106"><li><b>寻找异常值（Outliers）</b>：通过“<b>连续正向增长动能</b>”模型寻找多头标的。我们寻找的是那些收益增长率不仅为正，且在加速、同时优于同行业的个股。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298084ab66cb452b366b05"><li><b>市值过滤器</b>：多头倾向于选择 30-100 亿美元（等值 A 股中盘股）的标的，因为其<b>波动率</b>和<b>增长潜力</b>高于巨型股。</li></ul><div class="notion-blank notion-block-2d981b9ce329805a98c1c1f7242d8687"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce32980deb07ce349109a2b48" data-id="2d981b9ce32980deb07ce349109a2b48"><span><div id="2d981b9ce32980deb07ce349109a2b48" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce32980deb07ce349109a2b48" title="第四步 定性分析——一家公司不应该是一个“黑盒”"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">第四步 <b>定性分析——一家公司不应该是一个“黑盒”</b></span></span></h3><div class="notion-text notion-block-2d981b9ce32980a0945cdad5b7ab8490">很多人不明白手里的一只票其实是一家公司的一部分，学会分析一家公司这点是省略不了的，就算不懂财报分析和财务，也要关注这家公司的相关新闻，不要等扇贝被海水冲走了才发现公司不在了。</div><ul class="notion-list notion-list-disc notion-block-2d981b9ce329800ca871f56e462cbced"><li><b>寻找 KPI 证据</b>：数字背后是业务。你需要深入研报和财报，找到驱动收入的真实指标（如互联网公司的留存率、制造业的产线周转率）。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce329808d9b3bdfd52ac138df"><li><b>管理层与内部人</b>：考察 CEO 的往绩。同时监控大股东的减持或增持动作，判断利益是否与普通股东一致。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980e9b224f5bdd317fdfd"><li><b>【A股特色补充】</b>关注<b>股权质押比例</b>和管理层的“<b>政治站位</b>”，这在中国特有的商业环境下对估值影响巨大。</li></ul><div class="notion-blank notion-block-2d981b9ce32980868394cb53f624c689"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce329805d980ddd915c69bda5" data-id="2d981b9ce329805d980ddd915c69bda5"><span><div id="2d981b9ce329805d980ddd915c69bda5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce329805d980ddd915c69bda5" title="第五步 催化剂与时机——决定扣动扳机的瞬间"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>第五</b>步 <b>催化剂与时机——决定扣动扳机的瞬间</b></span></span></h3><div class="notion-text notion-block-2d981b9ce32980939eccc41b70993e0a">择时是交易前最后一公里，而择时的依据是“催化剂”，下手的时间很重要，一个在事情开始前，一个在事情发生过程中，这两个时间点都是你可以下功夫的地方，当然一定要有一个明确的“催化剂”，不能说“我觉得行”、“我觉得这事不对”。</div><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980819143db3f9ddcf13b"><li><b>催化剂（FUPM 准则）</b>：没有催化剂的想法只是“投资”，有了催化剂才叫“交易”。必须找到能在 60 天内改变市场预期的事情（如政策突发、新产品发布），不见兔子不撒鹰。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980049db5eda88d746080"><li><b>技术分析的“红绿灯”</b>：技术面不产生想法，只作为执行的参考。如果基本面向好但技术形态处在剧烈下跌趋势中，那是“红灯”，应列入观察名单（Watchlist）等待。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980359515d9d5e9e5027b"><li><b>【A股特色补充】</b>考虑 A 股的涨跌停板机制对流动性的锁死，以及 T+1 制度下对“确定性”的极高要求。</li></ul><div class="notion-blank notion-block-2d981b9ce3298072ad8ef8083c614c24"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce3298024a139f5e906e61cb9" data-id="2d981b9ce3298024a139f5e906e61cb9"><span><div id="2d981b9ce3298024a139f5e906e61cb9" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce3298024a139f5e906e61cb9" title="第六步 风险管理——你的底线"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>第六</b>步 <b>风险管理——你的底线</b></span></span></h3><div class="notion-text notion-block-2d981b9ce32980a5bcf9f604bbacac60">很多人觉得赌徒和交易的核心区别在研究和择时，但我认为最核心的还是风险管理。赌徒只知道赢了有多爽但没想过赌输了有多惨，交易者知道我亏了但是我还是会有后手，而且通常这一步应该是和第五部分同时发生的，而非跌了才开始想应急预案。</div><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298069bf4df186795479cd"><li><b>预防性风险管理（PRM）</b>：设定 <b>1:3 的风险回报比</b>。通过分散投资（8-12只股票组合）消除单笔交易的“灾难性损失”风险。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce329808aad07f02ad3fc49c4"><li><b>消除情绪</b>：通过“空间冥想”认知个人在市场中的渺小，从而消除因亏损产生的愤怒（复仇交易）或盈利产生的贪婪，不要去做空，不要报复性去买当下涨得好的票，重复念“I invest for good”（至少我是这么做的）。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298047811fc80711fe863d"><li><b>收银机思维</b>：像经营店铺一样管理损益，及时<b>锁定已实现利润</b>（Realized P&amp;L），确保存量资本的安全性，说白了你还是应该不要做赔本买卖。</li></ul><div class="notion-blank notion-block-2d981b9ce32980bdb51bfe36ea7eddf0"> </div><div class="notion-text notion-block-2d981b9ce32980c18afbdecc015f0b36">其实一个完备的交易系统的构建链路很简单也很清晰：<b>端正心态 → 观察环境 → 筛选优质标的 → 标的定性分析 → 明确交易信号 → 做好风险和预期管理</b>。这6个部分你都能做好，其实超越市场上99%的散户股民了，不需要一套鹤立鸡群晦涩难懂的系统，而是一个逻辑清晰可以高效执行系统。</div><div class="notion-blank notion-block-2d981b9ce3298068b392d4559362e04a"> </div><div class="notion-text notion-block-2d981b9ce32980e8a878e71ebc8619a0">同样，这个六步法也可以无痛迁移到其他的交易类目比如期货上，比如： </div><div class="notion-text notion-block-2d981b9ce32980a991d5f93ba0ccd09e">1. <b>基石</b>：将时间窗口保持在 <b>20-60个交易日</b>，这能避开日内交易的随机噪音。</div><div class="notion-text notion-block-2d981b9ce329809c81aae8ff55507682">2. <b>宏观</b>：关注<b>实际利率</b>和<b>美元指数</b>，因为大多数主要大宗商品基准都以美元定价。</div><div class="notion-text notion-block-2d981b9ce32980e3bce9f20f9c97ae1a">3. <b>量化</b>：在期货中，这步由“财务指标筛选”转为<b>供需错配筛选</b>（如库存水平异常变化）。</div><div class="notion-text notion-block-2d981b9ce32980c782e3f0cd8bc9f409">4. <b>定性</b>：分析影响产量的特定事件（如地缘政治、罢工、行业监管政策）。</div><div class="notion-text notion-block-2d981b9ce32980269c4bd8e48be63a60">5. <b>催化剂与时机</b>：寻找能拨动指针的非预见性新闻（如意外的库存数据、产油国会议）。</div><div class="notion-text notion-block-2d981b9ce32980e1a02de91f2abb628f">6. <b>风险管理</b>：严格执行 <b>1:3 的风险回报比</b>，并根据品种波动率设置止损。</div><div class="notion-blank notion-block-2d981b9ce32980568eb1c9aa38d9e0c4"> </div><div class="notion-text notion-block-2d981b9ce32980f9ad7be2a95137ece7">怎么样？是不是很简单，快去根据自己的需要构建属于自己的交易系统吧～</div><hr class="notion-hr notion-block-2d981b9ce3298045a921d55921757758"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d981b9ce32980cdbf16efc0d0516320" data-id="2d981b9ce32980cdbf16efc0d0516320"><span><div id="2d981b9ce32980cdbf16efc0d0516320" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d981b9ce32980cdbf16efc0d0516320" title="术语解释"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">术语解释</span></span></h3><div class="notion-text notion-block-2d981b9ce3298095b1d0d9d9ccc0c452">鉴于本文很多的阅读者并没有专业知识或金融工作经验，这里提供了一些通俗术语解释帮助你快速理解本文内容。专业从业者可以跳过这一部分或寻求更完备、精确的解释～</div><div class="notion-blank notion-block-2d981b9ce3298018a72fc2b14c9c65d2"> </div><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980639f62d8c5f1471715"><li><b>基本面</b>： 包含<b>宏观经济分析</b>（如预测GDP走向、监控利率和流动性）和<b>微观公司分析</b>（如财务报表、收入和利润增长）定量过程通过数据（如PE、PEG、收益增长率）筛选出行业的“优等生”或“差生”；定性过程则深入研究背后的原因，即关键绩效指标（KPIs）和管理层的运营计划。基本面决定了交易的<b>偏向（Bias）</b>，即你应该做多还是做空。专业交易员认为，价格是质量的信号，钱总是追逐增长的。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980cb98a0cbf1fdf14ff3"><li><b>技术面</b>:<b>  </b>分为<b>技术分析</b>（研究图表形态和结构，如头肩顶、旗形等）和<b>价格行为</b>（研究价格动量，如移动平均线SMA/EMA、RSI、MACD等）, 过去的价格图表本质上是<b>过去基本面的“照片”。</b>技术面<b>仅用于时机评估（Timing，时间点）。</b></li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980b5a4d4e9590b8f2e9c"><li><b>多空</b>：<b>“多”与“空”</b>（Long/Short）是交易员用来表达对市场看法并获取收益的两种基本手段，其核心目的在于实现<b>绝对收益</b>（无论市场涨跌都能赚钱）。</li><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980b5a4d4e9590b8f2e9c"><li>股票具有<b>持续的增长潜力和市场溢价，通常“做多”，</b>以较低的价格买入股票，期望在未来以更高的价格卖出，可能亏损即亏光所有本金，也是我们日常最常用的获取收益的手段。</li><li>卖那些<b>增长失速</b>（X-growth）或基本面恶化的公司的股票，你赚取的是价格下跌的差价，这就叫“<b>做空</b>”。这种行为风险很高，向券商<b>借入</b>自己并不拥有的股票并立即卖出，期望价格下跌后，再以更低的价格买回来还给券商，如果股票上涨了你的亏损理论是无限的，因为你要买回股票还给券商。</li><li><b>多空组合</b>：专业交易员不会只买入或只卖出。通过同时持有<b>优质的多头（Long）劣质的空头（Short）</b>，可以相互抵消掉市场整体涨跌带来的风险（即Beta中性化）</li></ul></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce329809ca0bbf86e9ac52e8b"><li><b>头寸</b>：在交易中可以理解为你的“持仓”<b>或</b>“库存”。源代码将交易账户视为一家企业，而头寸就是你为了在未来赚取差价而持有的某种资产的数量，比如：</li><ul class="notion-list notion-list-disc notion-block-2d981b9ce329809ca0bbf86e9ac52e8b"><li><b>多头头寸 (Long Position)</b>：指你买入并持有，希望价格上涨后卖出获利的仓位</li><li><b>空头头寸 (Short Position)</b>：指你借入并卖出，希望价格下跌后买回还给券商获利的仓位</li></ul></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298021963fd3874bdd319e"><li><b>红绿灯</b>：<b>是一种用于</b>评估交易时机（Timing）的决策工具。它并不是用来告诉你“买什么”，而是在你通过基本面分析确定了“买什么”之后，用来决定“何时出手”以及“出多少手”，通常分为三个阶段：</li><ul class="notion-list notion-list-disc notion-block-2d981b9ce3298021963fd3874bdd319e"><li><span class="notion-red_background"><b>红灯（Red Light）</b></span><b>：暂缓操作，已经做好了所有的基本面研究，非常看好（或看空）某只股票，且催化剂也到位了。但当你打开图表时，发现技术指标完全与你作对（例如：你想做多，但短期趋势正在剧烈下跌）。</b></li><li><span class="notion-yellow_background"><b>黄灯（Amber Light）</b></span><b>：试探性建仓，基本面依然看好，图表上开始出现好转的迹象（比如下跌趋势开始放缓，或开始横盘整理），虽然还没有完全爆发，但已经不再是敌对状态，这时考虑考虑建立部分头寸（如1/3或1/2仓位）。</b></li><li><span class="notion-teal_background"><b>绿灯（Green Light）</b></span><b>：全力执行，</b>基本面、催化剂、技术分析和价格行为指标<b>全部对齐</b>。例如出现了明显的趋势延续、向上突破或价格确认，建立完整头寸。</li></ul></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce329801288d2d0e71f3099d5"><li><b>催化剂</b>：专业圈子里常用“FUPM”（F U Pay Me）来要求催化剂，即：“这股票到底什么时候能动？我得在60天内拿到回报！” 它必须是<b>增量的、市场尚未消化</b>的新信息。如果市场已经预料到某事，那它就只是“旧闻”，不再是催化剂。简单来说就是触发你的交易行为的一个钩子，比如：<b>财报发布、新产品上线、分析师上调/下调评级、股票回购、并购公告，或者利率决议（FOMC）、通胀预期变化、消费者信心指数变动。</b>投资可以是赞助人无地起高楼，但是交易是一定要看见东西的。</li></ul><ul class="notion-list notion-list-disc notion-block-2d981b9ce32980e089dde9d58eecdcc8"><li><b>已实现损益 (Realized P&amp;L / 实盈或实亏)</b>：仓位已经卖出结清（Crystallized），利润或亏损已经落袋，这才是衡量你业务健康程度的“收银机数字”。相对的有<b>按市值计价 (Mark to Market), </b>指根据当前市场最新价格实时计算的持仓价值;<b>未实现损益 (Unrealized P&amp;L / 浮盈或浮亏),</b>仓位尚在持有的过程中，账面上显示的盈利或亏损。源码强调这是“不真实”的，因为价格还在波动</li></ul><div class="notion-blank notion-block-2d981b9ce3298036b792f85268d4db2a"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[本站第一篇帖子]]></title>
            <link>https://www.shuheng-mo.com//article/first-blog</link>
            <guid>https://www.shuheng-mo.com//article/first-blog</guid>
            <pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[一份简单的自我介绍]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-2d781b9ce3298098a9c0fd47ac36956f"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-2d781b9ce329807996cae92891e3f8f9">大家好，我是黑犬（Mo），一个99年出生的牛马。如果要用几个标签来形容我的话：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce329801d9ee2f5e06fa4f9e1"><li>极客 🤓</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329801282d4cbfebef83079"><li>业余分析师 📊</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298080a23cff368a853967"><li>科技爱好者 💻</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298016bbb0d1dba49d1673"><li>白日梦想家 🌈</li></ul><div class="notion-text notion-block-2d781b9ce32980c79a6fd8405ac7d3e2">我的技术栈主要是：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce329805e8fa6c75e769d8398"><li>Python、C++、JavaScript</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980b88b09f5121f0ec5b6"><li>各类主流Web开发框架</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980a5a600c0e9ad6ad338"><li>AI和数据分析相关技术</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329808cbd06f3738006af01"><li>云原生和DevOps工具链</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce3298013ae8dd79b318f6948" data-id="2d781b9ce3298013ae8dd79b318f6948"><span><div id="2d781b9ce3298013ae8dd79b318f6948" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce3298013ae8dd79b318f6948" title="关于这个网站"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">关于这个网站</span></span></h3><div class="notion-text notion-block-2d781b9ce32980b2aa7dd0e4d39b788b">这个网站是我的个人作品集，也是我与这个世界对话的窗口。在这里，你可以：</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-2d781b9ce329803ea38ce536761e031f" data-id="2d781b9ce329803ea38ce536761e031f"><span><div id="2d781b9ce329803ea38ce536761e031f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329803ea38ce536761e031f" title="探索内容"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">探索内容</span></span></h4><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298017abc1fed1b66b8191"><li>技术博客和教程</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298060b585e91c24fe791b"><li>分析报告和方法论</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980bab89ae048e3ae50f9"><li>个人项目展示</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329804ebd24d2ca8e48e0a8"><li>与我的AI分身对话</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329805ba6d9c93c74c0514c" data-id="2d781b9ce329805ba6d9c93c74c0514c"><span><div id="2d781b9ce329805ba6d9c93c74c0514c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329805ba6d9c93c74c0514c" title="未来计划"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">未来计划</span></span></h3><div class="notion-text notion-block-2d781b9ce32980d3987fd6efbb9a55be">在这个狗窝里，我会持续分享：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298050b339c9854e5a1112"><li>技术探索和实践心得</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980c0867be9256795bc75"><li>独立开发的故事</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980d38bf1ccc43489e50a"><li>数据分析的思考</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329805caa94e458108c7da1"><li>AI领域的新发现</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce3298074889df453b4e2a0c3" data-id="2d781b9ce3298074889df453b4e2a0c3"><span><div id="2d781b9ce3298074889df453b4e2a0c3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce3298074889df453b4e2a0c3" title="寄语"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">寄语</span></span></h3><blockquote class="notion-quote notion-block-2d781b9ce32980db94c5e3caa7a1821e"><div>生活不易，我们都在为梦想努力。希望这个小小的狗窝，能为你带来一些温暖和启发。</div></blockquote><div class="notion-text notion-block-2d781b9ce32980758830c92695bf7db6">祝愿所有来访的朋友：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980a79465d109f7b5ad75"><li>技术之路常有惊喜 🚀</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980ddaf4af4721414b15c"><li>工作顺心如意 💼</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329809e898ac9895e0daf54"><li>生活甜甜蜜蜜 🍯</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329805599e6d51c35be7192"><li>最重要的是 —— <b>活得爽</b>！ ✨</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce3298040a067e81a8d82ebed" data-id="2d781b9ce3298040a067e81a8d82ebed"><span><div id="2d781b9ce3298040a067e81a8d82ebed" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce3298040a067e81a8d82ebed" title="联系我"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">联系我</span></span></h3><div class="notion-text notion-block-2d781b9ce329800f9b39e6b7330192d8">如果你想和我交流，随时欢迎通过网页上提供的联系方式联系我。</div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[钢铁之尾2：哪哪都不行]]></title>
            <link>https://www.shuheng-mo.com//article/tails-of-iron</link>
            <guid>https://www.shuheng-mo.com//article/tails-of-iron</guid>
            <pubDate>Fri, 05 Nov 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[本文为限定内容，输入密码获取内容。（提示: 黑犬的生日）]]></description>
            <content:encoded><![CDATA[本文为限定内容，输入密码获取内容。（提示: 黑犬的生日）]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[104周转行Quant | W07 - C++ IO与异常（上）]]></title>
            <link>https://www.shuheng-mo.com//article/qd104week007</link>
            <guid>https://www.shuheng-mo.com//article/qd104week007</guid>
            <pubDate>Fri, 02 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Carol正式接任SigmaX的CTO,却发现公司的数据管理系统千疮百孔。监管审计、投资人尽调、数据丢失危机接踵而至,新官上任的Carol能否用硬核技术力挽狂澜? 本期关键词：IO、std::filesystem、std::format、二进制序列化、stringstream、流状态管理]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-2d781b9ce329802fbe91d8ed41454ef4"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980418382d9a622ca3bb0" data-id="2d781b9ce32980418382d9a622ca3bb0"><span><div id="2d781b9ce32980418382d9a622ca3bb0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980418382d9a622ca3bb0" title="❤️‍🔥新官上任三把火"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">❤️‍🔥新官上任三把火</span></span></h3><div class="notion-text notion-block-2d781b9ce329801b924dd313584412ef">上周SigmaX的CEO黑犬在公司完成现代化工程改造后决定退位让贤，把QD组的Leader任命为公司的新CTO。</div><div class="notion-text notion-block-2d781b9ce32980bdb12ac87f836b2d47">周一一大早，Carol正式接任CTO,而Bob也从普通QD升职为了整个组的Lead。黑犬在SigmaX全员大会上宣布这一任命。富婆Esme作为主要投资人也出席了会议,她对Carol寄予厚望：</div><blockquote class="notion-quote notion-block-2d781b9ce32980969111e5393c9702b0"><div>“Carol,你的技术能力我们都看到了。现在SigmaX大大小小一共拿到了20亿融资,我们要做的第一件事就是规范化运营。监管部门要求我们提供完整的数据审计追踪,之前资金量小的时候小打小闹也就罢了，现在必须做好，这是合规的底线。”</div></blockquote><div class="notion-text notion-block-2d781b9ce32980b6be60fd1cd3ba05e6">黑犬真是脸都绿了🤢,要知道SigmaX的技术系统在过去几年里完全没有考虑过合规性(尤其是这一块还是自己兼任CTO的时候负责的),现在要补救可不是一件容易的事，还好在这个关键的时间点把烂摊子甩出去了嘻嘻。</div><div class="notion-text notion-block-2d781b9ce32980eaa182e3f1ede3afab">黑犬拍了拍Carol的肩膀说：
&gt; “Carol,这次就靠你了！合规性搞好了，我们才能安心做投资，作为CTO的侬一定不要让我们失望哦~”</div><div class="notion-text notion-block-2d781b9ce329809b8f45c2c551b53428">Carol信心满满地接下任务,但当她开始梳理现有系统时,发现了一个可怕的事实：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce329803aa009de689bfa9d35"><li><b>数据文件散落在各个目录</b>,没有统一管理</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329809c9f92d18b1e5734be"><li><b>日志输出全是cout/cerr</b>,格式混乱无法追溯</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980189a74d953431ddc28"><li><b>策略回测数据只存在内存</b>,重启就丢失</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298080b15ac120117ea758"><li><b>与第三方数据供应商对接靠手工复制粘贴CSV</b></li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980fe9327f623706f222a"><li><b>文件IO错误处理基本为零</b></li></ul><div class="notion-text notion-block-2d781b9ce3298087ae65f4f157253663">这哪里是管理20亿资产的量化私募的系统,这简直是大学生大课作业的水平😨！</div><blockquote class="notion-quote notion-block-2d781b9ce329801cacf6fa10a63ab584"><div>“XX的，这个系统也太烂了吧，我就知道这货技术不行，怪不得突然就把我升成 CTO了，整半天是这XX的烂摊子搞不定了吧！”</div></blockquote><div class="notion-text notion-block-2d781b9ce32980bc8477e0e1cad889f2">Carol真的气炸了，决定立刻召集QD组开会，制定一套<b>现代C++文件和数据管理系统</b>的改造方案，同时在QD部门的会议室里把黑犬骂了个狗血淋头。</div><div class="notion-text notion-block-2d781b9ce32980b096c0f7fbb9e2894d">此时在办公室喝马黛茶🧉看彭博新闻的黑犬忽然打了一个喷嚏🤧。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980018e89c09b652e2812" data-id="2d781b9ce32980018e89c09b652e2812"><span><div id="2d781b9ce32980018e89c09b652e2812" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980018e89c09b652e2812" title="🔍技术噩梦还是审计噩梦"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🔍技术噩梦还是审计噩梦</span></span></h3><div class="notion-text notion-block-2d781b9ce32980cfb44dd0724ae52208">周二的时候，监管部门来了一次突击检查。证监会的审计官员来到SigmaX进行季度审计,要求提供：</div><ol start="1" class="notion-list notion-list-numbered notion-block-2d781b9ce32980a69259d8edcd6f123f" style="list-style-type:decimal"><li><b>所有策略的历史执行记录</b>（谁、何时、执行了什么策略）</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2d781b9ce32980318f7cc713db4b4c7a" style="list-style-type:decimal"><li><b>数据文件的完整性验证</b>（文件是否被篡改、何时创建）</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2d781b9ce32980279494cae8ae51a9e0" style="list-style-type:decimal"><li><b>系统日志的时间轴</b>（精确到毫秒的操作记录）</li></ol><div class="notion-text notion-block-2d781b9ce32980428f96c9b0b379a1b6">审计官拿出一份文件清单：“请提供2025年Q3季度所有交易策略的执行日志,按日期归档。”</div><div class="notion-text notion-block-2d781b9ce3298059981dc2bc5e367086">接到合规官Henry需求的Bob打开服务器一看,傻眼了：</div><div class="notion-text notion-block-2d781b9ce329809999b7d06d79cadf2f">审计官皱起眉头：“你们的文件管理怎么这么混乱?我需要看到<b>规范的目录结构</b>,每天的日志应该独立存放,历史数据要有备份机制。”</div><div class="notion-text notion-block-2d781b9ce32980d99c65f0990d1ee5f8">Carol也被问得非常无语,她只能硬着头皮说：
&gt; “非常抱歉,我们之前没有重视这方面的管理,现在请给我3天时间。我会用C++17的<b>std::filesystem</b>重构整个数据管理系统,建立规范的目录结构和自动备份机制。”</div><div class="notion-text notion-block-2d781b9ce3298052a833ee308d79d7dc">结合周一开会的规划，Carol连夜召集Bob和Alice,开始构建公司数据管理功能<b>DataManager</b>：</div><div class="notion-text notion-block-2d781b9ce32980da8d7efc539f9fba81">在构建DataManager时，Carol使用了std::filesystem的强大功能来实现文件和目录的创建、删除、遍历等操作，核心功能包括：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce329804c8920e050178d254e"><li><b>自动创建目录结构</b> (fs::create_directories)</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329808b998bdafccf5bc3e8"><li><b>文件存在性检查</b> (fs::exists)</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980e9abc6e839bccd93ca"><li><b>自动备份机制</b> (fs::copy_file)</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980cca512e5214cb73018"><li><b>清理过期文件</b> (fs::last_write_time)</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298050aea7e63647fab15b"><li><b>目录大小统计</b> (fs::file_size)</li></ul><div class="notion-text notion-block-2d781b9ce329809b8571e33d406f68bc">3天后,审计官再次来访,Carol演示了新系统：</div><blockquote class="notion-quote notion-block-2d781b9ce3298093b053d404891ead32"><div>“您看,这是我们的策略执行目录。每个策略都有独立的数据文件,自动按日期归档。系统会自动备份重要数据,并清理30天前的临时文件。所有文件操作都有完整的元数据记录。”</div></blockquote><div class="notion-text notion-block-2d781b9ce329809ca147cce1f7feac2c">审计官满意地点头：“这才像一个专业的金融机构！通过！”</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329803fa36ac2c9f5b638ad" data-id="2d781b9ce329803fa36ac2c9f5b638ad"><span><div id="2d781b9ce329803fa36ac2c9f5b638ad" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329803fa36ac2c9f5b638ad" title="👠富婆的话你要听"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">👠富婆的话你要听</span></span></h3><div class="notion-text notion-block-2d781b9ce32980b8b57fdd81b25e0c73">周三上午在投资人例会上，Esme带着几位新的LP来到SigmaX,并提出新的透明化运营的要求：</div><blockquote class="notion-quote notion-block-2d781b9ce32980ed99affa7e5c147184"><div>“狗子,我们这帮人投了这么多钱,需要实时了解系统运行状态。我要求所有关键操作都要有格式化日志,包括：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980c9ac51da0928419444"><li>谁在什么时间执行了什么操作</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980cb84fecd81775458e3"><li>每个策略的收益率,精确到小数点后4位</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980f1ba0ed30ab6d61d98"><li>系统性能指标,响应时间要精确到毫秒</li></ul><div class="notion-text notion-block-2d781b9ce329805bb9d4f90cf94c0bf7">而且日志要<b>易读、专业、可追溯</b>,不要再给我看那些cout输出的垃圾！”</div></blockquote><div class="notion-text notion-block-2d781b9ce32980cc8ec9c7709eccc1f9">黑犬听得冷汗直流，但是有不能不答应投资人的要求，只有先在会上打哈哈说官话，然后不时给Carol使眼色，整的Carol坐在对面很无语，白眼都要翻到天上了🫣。</div><div class="notion-text notion-block-2d781b9ce329805a9e9fd6f4a2ff8275">Bob私下对Carol说：“老板,现在的日志系统全是老板那XX硬编码的cout,要改成格式化输出得重写几千行代码,还容易出错😵…”</div><div class="notion-text notion-block-2d781b9ce3298071ad7ce836e85973f1">Carol想起了C++20的<b>std::format</b>：</div><blockquote class="notion-quote notion-block-2d781b9ce3298023aacfd6d20ad958aa"><div>“不用重写！我们用std::format构建统一的Logger系统。类型安全、高性能、Python风格的格式化语法,完美契合我们的需求！”</div></blockquote><div class="notion-text notion-block-2d781b9ce329800d86ece0db6718be54">Carol设计了分级日志系统：</div><div class="notion-text notion-block-2d781b9ce32980608a71fac742c374a0">在新的日志系统中，实现了以下核心特性：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980e78ac8f713c7379bbb"><li><b>类型安全的格式化</b>（编译期检查,杜绝printf的类型错误）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980beb95de9c021718fd1"><li><b>自动时间戳</b>（精确到秒,支持自定义格式）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980f1bb82c40f6e47ad6e"><li><b>分级日志</b>（DEBUG/INFO/WARNING/ERROR）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329801c8df6ec562efadae9"><li><b>同时输出到文件和控制台</b></li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980d1b9edffb5f38e2445"><li><b>高性能</b>（比iostream快,比printf安全）</li></ul><div class="notion-text notion-block-2d781b9ce32980e5813ef6f726c4677f">在此基础上，为了堵住所有投资人的嘴，Carol还设计了投资报告生成器功能，一键生成每日投资数据报告：</div><div class="notion-text notion-block-2d781b9ce3298014bb28f517412389d1">Esme看到投资报告后赞不绝口：“这才是专业机构该有的水准！比我投的其他基金都专业！狗子你这Carol能力太强了，她结婚了么？你和她说说要不要我给介绍个好对象哈哈哈~”</div><div class="notion-text notion-block-2d781b9ce3298016abc0f156708d2e55">黑犬笑而不语🤩，给她介绍对象？算了吧，这么好用的CTO最好就一直别结婚为我所用，这份工资发的太值了😈。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329807d961fcfe7d3b9114f" data-id="2d781b9ce329807d961fcfe7d3b9114f"><span><div id="2d781b9ce329807d961fcfe7d3b9114f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329807d961fcfe7d3b9114f" title="🤪策略(又又)要爆了"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🤪策略(又又)要爆了</span></span></h3><div class="notion-text notion-block-2d781b9ce32980a987c2d91ef4c815ba">周四凌晨两点，Alice慌张地给Carol打了一通紧急电话：
&gt; “Carol！出大事了！服务器刚才重启,我的<b>动量突破策略V3</b>的回测数据<b>全部丢失</b>！那可是我调了3个月的参数啊😭！年化收益率48%的策略,现在什么都没了！”</div><div class="notion-text notion-block-2d781b9ce32980259147eb3b373e91b5">Carol远程登录服务器一查,心都凉了：所有策略数据都只存在内存里,从来没有持久化过！最糟糕的时，这次的问题还赖不上黑犬，完全是之前跳槽的QD成员遗留下来的问题。</div><div class="notion-text notion-block-2d781b9ce329802d8c19f6e83f950917">黑犬半夜在公司飞书群里发飙：
&gt; @全体成员 明天早上投资委员会要审查所有策略的历史回测数据,这要是拿不出东西来,Esme朋友给的2亿融资可能要黄！Carol,必须在8小时内搞出点东西来拿给委员会看！不然就收拾东西滚蛋吧！</div><div class="notion-text notion-block-2d781b9ce329808bb047c9dedf4944fd">Carol知道数据已经无法恢复,但她可以立即建立<b>持久化系统</b>,防止悲剧再次发生。她决定用<b>二进制序列化</b>：</div><div class="notion-text notion-block-2d781b9ce32980d29461cbe802813aa0">早上8点,Carol向投资委员会演示：</div><blockquote class="notion-quote notion-block-2d781b9ce32980dfb99bd4a942ab00f7"><div>“各位,虽然历史数据丢失了,但我已经建立了完善的持久化系统。从今天起,所有策略的回测数据都会自动保存为二进制文件,即使服务器重启,数据也永不丢失。”</div></blockquote><div class="notion-text notion-block-2d781b9ce329805a8bb9f94ecfb87042">投资委员会成员问：“为什么用二进制而不是JSON?”</div><div class="notion-text notion-block-2d781b9ce329808aafacf4a2ba7ff128">Carol自信地回答：
&gt; “二进制序列化的读写速度是JSON的<b>10倍以上</b>,文件大小只有JSON的<b>30%</b>。对于我们每天产生GB级别的回测数据来说,这是性能和存储空间的最优解。而且我们实现了版本控制,未来升级数据格式也不会破坏兼容性。”</div><div class="notion-text notion-block-2d781b9ce32980c09b42eac64d0b9862">投资人们纷纷点头,这次虽然没有完美解决问题，但是好在还是给了投资人信心，危机化解，黑犬也没有再给技术部门施压，只是叮嘱各位以后要听Carol的话，不要再出幺蛾子了。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329800386eae7fdbdfd6b7b" data-id="2d781b9ce329800386eae7fdbdfd6b7b"><span><div id="2d781b9ce329800386eae7fdbdfd6b7b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329800386eae7fdbdfd6b7b" title="💩头铁的乙方"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">💩头铁的乙方</span></span></h3><div class="notion-text notion-block-2d781b9ce32980b2ae32ed84d6cceea2">SigmaX签约了彭博(Bloomberg)的市场数据服务,对方技术负责人David说：</div><blockquote class="notion-quote notion-block-2d781b9ce32980819cb6f5f2278f0bc4"><div>“我们的数据接口支持CSV格式导出,你们需要每天早上9点从我们的FTP服务器拉取最新的市场数据CSV文件,然后导入你们的系统。”</div></blockquote><div class="notion-text notion-block-2d781b9ce32980179e41cf3c7a094bd6">Bob一听就头大：“CSV格式?那不是要写一堆字符串解析代码?万一数据里有逗号、换行符这些特殊字符怎么办?”</div><div class="notion-text notion-block-2d781b9ce32980028bf0d0b7587b3bb3">Carol说：“不用担心,我们用<b>std::stringstream</b>来优雅地处理CSV导入导出！”</div><div class="notion-text notion-block-2d781b9ce32980329ebbce063363e4b5">实现了几个核心特性：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980fd9b5ddc2653725c3e"><li><b>内存中的流操作</b>（不需要临时文件）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298068b5c3df4964fb6963"><li><b>灵活的格式控制</b>（setprecision控制精度）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980e29ce8ef4f3ef66602"><li><b>字符串拆分解析</b>（getline配合delimiter）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298034a0dae9dcab4f940c"><li><b>类型转换</b>（string → double/int）</li></ul><div class="notion-text notion-block-2d781b9ce32980158337c478c967aed1">David看了Carol的实现后说：“你们的CSV处理很专业！很多量化公司都是用Python脚本手工处理,你们直接在C++里实现,性能肯定好得多。”</div><div class="notion-text notion-block-2d781b9ce32980bcb60ef43b23e9971e">第二天早上,系统成功从彭博拉取了最新数据,自动解析导入,整个流程不到10秒完成。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980639963d51361a42574" data-id="2d781b9ce32980639963d51361a42574"><span><div id="2d781b9ce32980639963d51361a42574" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980639963d51361a42574" title="🚨突发情况"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🚨突发情况</span></span></h3><div class="notion-text notion-block-2d781b9ce329807b80c9e1977c94d049">正当Carol以为一切顺利时,周六的上午交易系统突然报错：</div><div class="notion-text notion-block-2d781b9ce329800d8057fa8d4a27d21a">Carol紧急排查,发现问题出在<b>IO错误处理</b>上：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980aa9f46ec0cac0ff8b6"><li><b>磁盘空间不足</b>,写入失败但没有检测</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980dead69cbf4f9d974fd"><li><b>文件权限错误</b>,打开文件失败被忽略</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329807f8ddbe8337e0e4c8e"><li><b>网络文件系统断线</b>,读取数据时出错但没有异常处理</li></ul><div class="notion-text notion-block-2d781b9ce3298051ab96f437236dd1e0">这些错误在测试环境都没暴露,一到生产环境就频繁出现,导致交易系统数据不一致😱！</div><div class="notion-text notion-block-2d781b9ce3298087b2d8c34b05f62c0a">Carol痛定思痛,决定实现<b>完善的流状态管理</b>：</div><div class="notion-text notion-block-2d781b9ce329800d8027c23603074c9a">实现了以下核心特性：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce329800e88c3c5d151da9a71"><li><b>is_open()</b> 检查文件是否成功打开</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980d0933ce1428b35c4ba"><li><b>exceptions()</b> 启用流异常</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980398fc8d1f6795405fb"><li><b>good()/bad()/fail()/eof()</b> 状态检查</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980f6bc54d05eb3415762"><li><b>详细的错误信息</b> (std::format)</li></ul><div class="notion-text notion-block-2d781b9ce3298097aeced1d9995361e1">重构后,系统运行稳定,再也没有出现过IO相关的生产事故。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329805c8f0bf490df46705e" data-id="2d781b9ce329805c8f0bf490df46705e"><span><div id="2d781b9ce329805c8f0bf490df46705e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329805c8f0bf490df46705e" title="🪞Carol的周末复盘"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🪞Carol的周末复盘</span></span></h3><div class="notion-text notion-block-2d781b9ce32980fa85ffc5a58aa2804f">周日晚上，Carol在家坐在电脑前复盘整理这一周的技术总结报告，一周的奋战让她又掉了几根头发😵‍💫，但看到新闻报道SigmaX的技术领先行业还是有了几分欣慰。</div><div class="notion-text notion-block-2d781b9ce32980f498cedaf756b1df4f">黑犬发来微信：“Carol,这周辛苦了。你的技术改造让投资人和监管部门都非常满意,明天我会给你和QD组发一笔特别奖金💰。继续加油,SigmaX的未来就靠你们了！”</div><div class="notion-text notion-block-2d781b9ce32980aa9e64f90c83ccc4fd">Carol苦笑,回复：“放心吧老板,下周我们会把异常处理也做到业界顶尖水平！”</div><div class="notion-text notion-block-2d781b9ce329801da58ce03edebbe651">经过一周的血与泪,SigmaX的数据管理系统已经脱胎换骨,Carol也成功化解了多重危机。她知道,作为CTO,未来的挑战只会更多,不管这些挑战是来自内部还是外部,她都将带领QD组迎难而上,用硬核技术守护SigmaX的每一分资产和尊严。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980818d9ad5310ab5eb52" data-id="2d781b9ce32980818d9ad5310ab5eb52"><span><div id="2d781b9ce32980818d9ad5310ab5eb52" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980818d9ad5310ab5eb52" title="📒补充说明"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">📒补充说明</span></span></h3><div class="notion-text notion-block-2d781b9ce32980fb8da6eafc66966ea9">本周学习的5个核心IO技术,都是现代C++的最佳实践：</div><ol start="1" class="notion-list notion-list-numbered notion-block-2d781b9ce32980d2acf2d74e0d2cb531" style="list-style-type:decimal"><li>std::filesystem (C++17)</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2d781b9ce3298039a49ac2d8014c3e84" style="list-style-type:decimal"><li>std::format (C++20)</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2d781b9ce3298059bfc0c9a47c47d0fc" style="list-style-type:decimal"><li>二进制序列化</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-2d781b9ce32980ffa709e3a8e37856d2" style="list-style-type:decimal"><li>std::stringstream</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-2d781b9ce329801c8040e29e229ab6b5" style="list-style-type:decimal"><li>流状态管理</li></ol><div class="notion-text notion-block-2d781b9ce329806baa84d24f807e9e15">这些模式的共同点是：<b>在运行时保持灵活性的同时，尽可能利用编译期优化</b>。至此我们已经在SigmaX完成了所有最常见的C++ 现代化技术中文件IO的所有实践，下周开始，我们将进入C++基础的又一大话题：异常。</div><div class="notion-text notion-block-2d781b9ce329808fa14dc70f53c5d229">你可能要问，IO不还有网络IO吗？没有错，但是网络IO的内容实在太多涉及的场景也更加复杂，需要搭建专门的网络环境来解释和，我们会在后续设置一个单独的专题展开讲解，欢迎关注，敬请期待~</div><div class="notion-text notion-block-2d781b9ce32980fd8ca8f10aacc5e122">本周代码已经上传到Github仓库🔗：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/shuheng-mo/qd-study-plan-104wk.git">https://github.com/shuheng-mo/qd-study-plan-104wk.git</a>，欢迎Star⭐、贡献代码或issue。</div><div class="notion-text notion-block-2d781b9ce32980e7beb3da4f2c049a86"><b>下周预告：W08 - C++ IO与异常(下)</b></div><div class="notion-text notion-block-2d781b9ce32980fea334f90e4a3079d5">👋各位下周五见，下周SigmaX又会有哪些有趣的故和硬核挑战呢？尽情期待吧~</div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[104周转行Quant | W06 - C++的OOP高级用法（下）]]></title>
            <link>https://www.shuheng-mo.com//article/qd104week006</link>
            <guid>https://www.shuheng-mo.com//article/qd104week006</guid>
            <pubDate>Fri, 02 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[SigmaX准备迎接大融资，但代码质量和安全性面临严峻考验，投资人、监管、竞争对手纷纷施压，黑犬还顶住压力带领团队迎难而上吗? 本期关键词：std::variant、Decorator、PIMPL、Prototype、Visitor]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-2d781b9ce32980f1885cd0263b61598d"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980dc9855f9f8f1c8b729" data-id="2d781b9ce32980dc9855f9f8f1c8b729"><span><div id="2d781b9ce32980dc9855f9f8f1c8b729" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980dc9855f9f8f1c8b729" title="💔投资人不远万里压力我"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">💔投资人不远万里压力我</span></span></h3><div class="notion-text notion-block-2d781b9ce32980188a51ecabd5691802">上周SigmaX通过CRTP等技术击败了竞争对手白猫的对冲基金“AlphaZ”，富婆Esme追加投资，并引荐了一群新的LP和朋友。</div><div class="notion-text notion-block-2d781b9ce32980869b82edb1dee39a96">周一一大早富婆Esme就带着3位顶级PE投资人来SigmaX做尽职调查，每个人都带着厚厚的合同和技术问题，其中一位经验丰富的PE合伙人说：</div><blockquote class="notion-quote notion-block-2d781b9ce32980e98043f0bdaf7ec459"><div>“你们的营收很不错，策略研究员也很优秀，但是你们的人力系统有针对不同市场环境的团队配置方法吗？如果市场剧波波动，你们能否快速响应调整团队配置？我们投的另一家基金用Rust写的系统能快速衡量并调整团队配置，人家说值语义天下无敌，你们的技术团队能做到吗?”</div></blockquote><div class="notion-text notion-block-2d781b9ce329802293fde05899defc7e">黑犬硬着头皮说可以(不然到手的几千万就飞了🥵)，但其实心里没底得都快尿裤子了，悄悄的用眼神给QD组的技术人员打暗号。</div><div class="notion-text notion-block-2d781b9ce32980439766f93710f0317b">QD的lead Carol赶紧救场：
&gt; “各位老板，我研究过C++的std::variant，这正好是值语义多态的的最佳场景！只要在原有系统中稍作修改就能实现，明天可以有demo给大家看！”</div><div class="notion-text notion-block-2d781b9ce3298072b8ebf3964fffa5e6">Carol连夜召集QD组重构，团队系统改用std::variant:</div><div class="notion-text notion-block-2d781b9ce32980a7acceca5de43782a6">第二天演示时，瞬间生成并对比200种团队配置，投资人们纷纷点头称赞：
&gt; “Impressive！这就是我们要的技术实力！你们的QD组真棒！我们投了！”</div><div class="notion-text notion-block-2d781b9ce329800f8c6dd7ff6fd01df4">躲在会议室角落的黑犬总算松了口气😮‍💨，起身叫了个滴滴回家换条裤子。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980e0b177ee9ee86f38dd" data-id="2d781b9ce32980e0b177ee9ee86f38dd"><span><div id="2d781b9ce32980e0b177ee9ee86f38dd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980e0b177ee9ee86f38dd" title="👊监管冷不丁梆梆就两拳"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">👊监管冷不丁梆梆就两拳</span></span></h3><div class="notion-text notion-block-2d781b9ce3298012a9a0f3409bff1c4a">周二下午，黑犬刚刚换完裤子回公司，合规官Henry拿着一份30页的监管新规进老板办公室：
&gt; “老板，监管部门发布新规了！
&gt; 新规要求所有策略执行必须有：
&gt;
&gt; 1. <b>完整审计日志</b>（谁、何时、执行了什么）
&gt; 2. <b>性能计时指标</b>（用于监控异常）
&gt; 3. <b>结果缓存</b>（避免重复计算）
&gt; 4. <b>信号过滤机制</b>（防止异常信号）</div><div class="notion-text notion-block-2d781b9ce329803283d6e076699cc5e6">黑犬看了看现有的<b>200+策略</b>，如果每个都改，改到猴年马月🤯。更麻烦的是，不同策略需要<b>不同的功能组合</b>：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980daaecdd5d7f488849f"><li>高频策略：计时 + 缓存</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980efbba6c1152d66107a"><li>风险策略：日志 + 过滤</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980feace5eb1ba890f6fe"><li>测试策略：全都要</li></ul><div class="notion-text notion-block-2d781b9ce329800992b3deee7d42b3a0">顿时办公室里叫苦连天，策略研究员Alice说：“我的策略好不容易调好参数，不想改代码啊…”，QD Bob也默默加购了两瓶米诺蒂尔。</div><div class="notion-text notion-block-2d781b9ce32980308036c876eadadd20">Carol挺身而出说：
&gt; “老板，不用担心！我们可以用用Decorator！不改原代码，动态加功能，完美符合开闭原则！”</div><div class="notion-text notion-block-2d781b9ce329805daf1fd981a2b4133c">黑犬像看见了救世主：
&gt; “就这么干！Bob，你和Carol搞定这个，给你们3天！”</div><div class="notion-text notion-block-2d781b9ce3298081b693eb822fc0d375">3天后，所有策略都套上了合规装饰器:</div><div class="notion-text notion-block-2d781b9ce329802db6cdc0cbd31efaae">监管检查时，审计日志、性能指标一应俱全。监管官员表示：“你们是我见过最配合的量化公司！”</div><div class="notion-text notion-block-2d781b9ce32980e0a8fce48b442f399d">黑犬都快感动哭了😭，QD组又一次拯救了SigmaX，赶紧安排本月多给QD组发一笔奖金。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980879c8bc81532c19719" data-id="2d781b9ce32980879c8bc81532c19719"><span><div id="2d781b9ce32980879c8bc81532c19719" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980879c8bc81532c19719" title="😼我必毁你天堂"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">😼我必毁你天堂</span></span></h3><div class="notion-text notion-block-2d781b9ce3298045ae35f81ddf393739">周三的夜里，黑犬正在梦里和蕾塞一起跳舞💃，突然被HR紧急电话吵醒了：
&gt; “老板！AlphaZ的白猫出狠招了！白猫通过猎头私下联系了SigmaX的<b>5名核心QD</b>，开价是原薪资的<b>3倍</b>！更阴险的是，白猫还要求跳槽者”带点技术文档过来”。还好我们刚完善了保密协议，不然就惨了！</div><div class="notion-text notion-block-2d781b9ce329805b8a33c46c312207ee">太baby了，要不是我的QD们够忠心（还是有俩交离职信了😅），SigmaX怕是要遭受毁灭性打击。</div><div class="notion-text notion-block-2d781b9ce32980158b60ed2432ca4b4d">在被白猫阴了这一下之后，黑犬决定不能再让白猫有机可乘，必须加强核心技术的保护，就算逆向了我们的源代码也不知道怎么实现的。他又找来了QD组，决定用<b>PIMPL编译防火墙</b>来隐藏投资系统核心的投资组合优化模块实现细节：</div><div class="notion-text notion-block-2d781b9ce32980fba0b6f220d06a559b">在重构完成之后，黑犬安排QD组继续加班加点优化实现细节，白猫即使拿到头文件也只能望洋兴叹，同时又给HR下了命令，<b>所有技术人员涨薪35%，年终奖双倍</b>，并且要求签署更严格的保密协议。</div><div class="notion-text notion-block-2d781b9ce32980238523f6d16456d76b">白猫，你折我翅膀，我必毁你天堂🚬！敢从人才入口卡我脖子，我记住你咯~</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329807ba35af3f057566aee" data-id="2d781b9ce329807ba35af3f057566aee"><span><div id="2d781b9ce329807ba35af3f057566aee" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329807ba35af3f057566aee" title="🤪策略(又)要爆了"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🤪策略(又)要爆了</span></span></h3><div class="notion-text notion-block-2d781b9ce3298090b5e6f02396a745d0">风和日丽的周四早上，黑犬刚喝完一杯马黛茶🧉，Alice就冲进办公室：
&gt; “老板！我们的<b>动量突破策略V3</b>回测收益率达到<b>年化48%</b>！”
&gt; “但问题来了…这个策略要部署到<b>全球50个市场</b>，每个市场只有参数略微不同（阈值、窗口期等）”</div><div class="notion-text notion-block-2d781b9ce3298083909cf5990754bf49">路过的Bob一听就哈气🐱了：手动创建50次？光配置就要2小时，还容易出错?
黑犬也犯嘀咕，2小时？我们的竞争对手AlphaZ可是吹牛说他们的策略10分钟就能全球部署！</div><div class="notion-text notion-block-2d781b9ce32980eebbd7cf34ca5e6ecd">Bob推开门说：
&gt; “老板，不用愁！我们可以用<b>原型模式</b>（Prototype），类似生物学的克隆，复制一个优秀个体，然后做基因微调。都不用Carol麻烦，我直接帮你搞定了！”</div><div class="notion-text notion-block-2d781b9ce32980fdbfc0c157ea9fd919">黑犬给了一个大拇哥👍，让Bob赶紧去搞，搞定了回来让我亲😘他一嘴巴：</div><div class="notion-text notion-block-2d781b9ce329800da49dccb15a95cbea">原型系统上线后，50个市场部署时间从2小时缩短到<b>5分钟</b>，消息甚至惊动了投资人，纷纷打电话来问黑犬秘诀是什么🤫。</div><div class="notion-text notion-block-2d781b9ce329800489aeee7b5a8c9fe3">黑犬不言，只默默感叹：“得Bob者得天下，这货当一个普通QD还是屈才了”。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980a5ab4cd98220300e42" data-id="2d781b9ce32980a5ab4cd98220300e42"><span><div id="2d781b9ce32980a5ab4cd98220300e42" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980a5ab4cd98220300e42" title="💩年报地狱"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">💩年报地狱</span></span></h3><div class="notion-text notion-block-2d781b9ce32980d891fde0b3231250cd">千算万算，唯独没算到下个月要交年报，而财务完全没有得倒很好的支持。SigmaX的财务总监Linda周五一大早就冲进黑犬办公室：
&gt; “老板，年报要交了！我们需要统计<b>全年的员工薪酬数据</b>。
&gt; 年底需要生成的报告必须要包含：
&gt;
&gt; 1. <b>薪资报告</b>（财务部要做预算）
&gt; 2. <b>绩效评估</b>（董事会要审查）
&gt; 3. <b>税务申报</b>（会计师事务所要报税）
&gt; 4. <b>人力成本分析</b>（给投资人看）
&gt; 5. <b>技能盘点</b>（HR要做人才规划）
&gt; 现在这些都都得靠我手动从Excel导入系统，太多了！”</div><div class="notion-text notion-block-2d781b9ce32980cc869ee066c7ed0144">黑犬一听就头大🤯，早知道就不要自己兼任这个CTO了，如今自己一手搭建负责维护的人力资源系统出了那么多问题。</div><div class="notion-text notion-block-2d781b9ce32980469747e64a8b4dc268">Lisa：“明年可能还要加绩效改进计划、培训需求分析…你们每次都要改代码或者手动导入？不是吧老板…”</div><div class="notion-text notion-block-2d781b9ce32980dbae1cf588b79dc623">黑犬只好又灰溜溜地找来了QD组，Carol说：
&gt; “老板，不用愁！我们可以用<b>访问者模式</b>（Visitor）来解决这个问题。这样每个报告生成逻辑都可以独立封装，新增报告时不需要修改员工类，完美符合开闭原则！而且也不要太多的更改。”</div><div class="notion-text notion-block-2d781b9ce32980c9bafdf7df8bfaeaba">黑犬累了，说不定技术这块真的不如交给QD组的专业人士…</div><div class="notion-text notion-block-2d781b9ce32980c4b90fd8ee3c469eb0">在Carol和Bob的通力合作下，访问者模式很快就上线了：</div><div class="notion-text notion-block-2d781b9ce32980d1b0b7ccf796e89efd">这样一来，年底财务、HR、董事会都准时拿到报告，以后以后随便加报告都不怕了！</div><div class="notion-text notion-block-2d781b9ce32980ba9817c51c04e81eb0">经过这次的事件之后，黑犬的内心想法也有了一些变化… …</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980509bf5e13fb495d090" data-id="2d781b9ce32980509bf5e13fb495d090"><span><div id="2d781b9ce32980509bf5e13fb495d090" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980509bf5e13fb495d090" title="🍷周六夜反思"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🍷周六夜反思</span></span></h3><div class="notion-text notion-block-2d781b9ce32980c1ae35dc261edfa412">黑犬在办公室加班整理本周的技术升级报告，给自己倒了一杯红酒。</div><div class="notion-text notion-block-2d781b9ce3298005af57d47d429db81f">经过两周的技术系统现代化改造，SigmaX的技术栈已经达到业界顶尖水平💥，本周达成了如下成果：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980e7bf9afbc1d0bfe067"><li>✅ 投资人尽调通过，2亿融资落地</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980139e2ae6a7c9d169d5"><li>✅ 监管合规性100分</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329802a8638d4cfb37b0e6c"><li>✅ 核心技术安全性大幅提升</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980998517c04623e379ae"><li>✅ 策略部署效率提升10倍</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298088bb99fd391890b3e5"><li>✅ 报告生成系统灵活可扩展</li></ul><div class="notion-text notion-block-2d781b9ce32980c7be73dbcd73e270bc">黑犬端起酒杯，望着窗外金融小镇的夜色，心想：<b>工程质量才是我们这些量化私募的竞争力的基石</b>，我的QD组真是太棒了！相比之下，我的技术领导力尚可但技术深度还远远不够，这种时候适时让贤，我自己专注于投资战略规划和团队管理，才是对SigmaX最有利的选择！</div><div class="notion-text notion-block-2d781b9ce32980729900cbb6ab395a34">想到这里，黑犬决定下周就和Esme已经几个合伙人谈谈，让Carol接任CTO总监所有技术工作，提拔Bob为QD组lead，这样SigmaX的工程能力才能更上一层楼！</div><div class="notion-text notion-block-2d781b9ce329806b9a34de9fcce04cea">黑犬端起酒杯一饮而尽，随后打开了电子邮件客户端，开始给Esme和合伙人们写邮件…</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980f2b8edfa534d26dbb1" data-id="2d781b9ce32980f2b8edfa534d26dbb1"><span><div id="2d781b9ce32980f2b8edfa534d26dbb1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980f2b8edfa534d26dbb1" title="📒补充说明"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">📒补充说明</span></span></h3><div class="notion-text notion-block-2d781b9ce329805796b7e03ee08755aa">本周的5个设计模式都是GoF经典设计模式在现代C++中的最佳实践：</div><ol start="1" class="notion-list notion-list-numbered notion-block-2d781b9ce3298047a5fbd769ad7182b9" style="list-style-type:decimal"><li><b>std::variant</b> - C++17引入，实现了值语义的多态，是对传统继承多态的重要补充</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2d781b9ce329805c81cec39e88039ae7" style="list-style-type:decimal"><li><b>Decorator</b> - 动态组合功能，体现了组合优于继承的设计原则</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2d781b9ce32980fe959ade990f02e751" style="list-style-type:decimal"><li><b>PIMPL</b> - 经典的编译防火墙技术，Scott Meyers在《Effective Modern C++》中重点推荐</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-2d781b9ce329806fa0fffa2ceb91e19a" style="list-style-type:decimal"><li><b>Prototype</b> - 使用CRTP实现虚构造函数，避免了手动编写大量clone代码</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-2d781b9ce32980d3bafbfb88bf2fbed2" style="list-style-type:decimal"><li><b>Visitor</b> - 双重分派机制，解决了”在不修改类的情况下添加新操作”这一经典问题</li></ol><div class="notion-text notion-block-2d781b9ce32980a8950dc902dea107e4">这些模式的共同点是：<b>在运行时保持灵活性的同时，尽可能利用编译期优化</b>。至此我们已经在SigmaX完成了所有最常见的C++ OOP的现代化技术的所有实践，下周开始，我们将进入C++基础的又一大话题：I/O与异常。</div><div class="notion-text notion-block-2d781b9ce3298052ba4cd9455fd9a2dd">本周代码已经上传到Github仓库🔗：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/shuheng-mo/qd-study-plan-104wk.git">https://github.com/shuheng-mo/qd-study-plan-104wk.git</a>，欢迎Star⭐、贡献代码或issue。</div><div class="notion-text notion-block-2d781b9ce32980a585f4dc1ce9622ae8"><b>下周预告：W07 - C++ IO与异常(上)</b></div><div class="notion-text notion-block-2d781b9ce329807f82e3f26184aa0b8f">👋各位下周五见，下周SigmaX又会有哪些有趣的故和硬核挑战呢？尽情期待吧~</div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[104周转行Quant | W05 - C++的OOP高级用法（上）]]></title>
            <link>https://www.shuheng-mo.com//article/qd104week005</link>
            <guid>https://www.shuheng-mo.com//article/qd104week005</guid>
            <pubDate>Fri, 02 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[SigmaX逐渐做大做强，公司越大，问题越多…
本期关键词：CRTP、Mixin、Policy-Based Design、模板元编程、类型擦除]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-2d781b9ce329802693f1f584997b84d2"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329805aa3c0c5d8b0b8c61d" data-id="2d781b9ce329805aa3c0c5d8b0b8c61d"><span><div id="2d781b9ce329805aa3c0c5d8b0b8c61d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329805aa3c0c5d8b0b8c61d" title="🏦死对头的崛起"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🏦死对头的崛起</span></span></h3><div class="notion-text notion-block-2d781b9ce3298073827afde53b268b8e">上周SigmaX好不容易重回正轨，正在规划第一个盈利季度的工作，这周一开局就遇到大麻烦。</div><div class="notion-text notion-block-2d781b9ce32980fca901e1437ef97318">某天下午，公司的QR Alice冲进黑犬办公室：</div><blockquote class="notion-quote notion-block-2d781b9ce329809193c7e0b41159c71e"><div>“老板！我们的动量策略今天完全失效了！市场上有人比我们快了至少 50ms，我们的单子还没发出去，机会就没了！”</div></blockquote><div class="notion-text notion-block-2d781b9ce32980ed88e2dfc9edf9f399">QD Bob也气冲冲地跑来，拿着电脑给黑犬看系统日志：</div><blockquote class="notion-quote notion-block-2d781b9ce32980b9b74cc4619c7598e0"><div>“老板，我看出问题了。我们现在用的虚函数多态，每次策略执行都要查虚表，光这个开销就有几十纳秒。高频交易场景下，这个延迟是致命的！”</div></blockquote><div class="notion-text notion-block-2d781b9ce32980a28cedc6e15b9379d1">黑犬皱眉调出监控系统，发现原来是隔壁金融小镇的死对头——海归高材生”<b>白猫</b>”才成立的量化冲基金“<b>AlphaZ</b>”突然杀出来，并且他家的订单总是要早一些到交易所。</div><div class="notion-text notion-block-2d781b9ce329800a92dad95d83d5ffca">可恶🤬，这能忍吗？敢抢我的钱！黑犬光速拉着QD组的Tech lead Carol开会研究，很快决定了用<b>CRTP静态多态</b>技术重构公司的基本策略类：</div><div class="notion-text notion-block-2d781b9ce3298085acf1e63ed2245656">通过CRTP，黑犬成功消除了虚函数调用的开销，策略执行速度提升了40%，成功抢回了一些单子，但AlphaZ还是领先不少，这让黑犬很不爽。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329807f8921ccfa2c018ba9" data-id="2d781b9ce329807f8921ccfa2c018ba9"><span><div id="2d781b9ce329807f8921ccfa2c018ba9" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329807f8921ccfa2c018ba9" title="🚸风控盲区"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🚸风控盲区</span></span></h3><div class="notion-text notion-block-2d781b9ce32980f5a20eef822baf82ee">周二，刚刚才解决性能问题，黑犬又接到风控部的经理Eva的投诉：
&gt; “狗哥，我发现一个严重问题！昨天有 3 笔订单的 ID 和员工 ID 搞混了，系统把<b>订单 ID 0991</b> 当成了<b>员工 ID 0991</b>，查询时返回了完全错误的数据！幸好我人工复核发现了，不然亏大了！”</div><div class="notion-text notion-block-2d781b9ce32980a7bb27fe9ef3c1f9df">好家伙，人力管理系统不是黑犬自己负责的吗🫣？黑犬马上检查员工管理系统源码，发现后来员工数量增加后虽然增加了员工ID区分员工，但是处都是 <code class="notion-inline-code">std::string</code> 和 <code class="notion-inline-code">int</code> 做 ID，完全没有类型区分：</div><div class="notion-text notion-block-2d781b9ce32980448ad0e13d994cc05e">黑犬先给Eva道歉，然后立刻召集QD组的Bob和Carol开会，决定用<b>强类型ID系统</b>来重构员工和订单ID：</div><div class="notion-text notion-block-2d781b9ce3298097acabef342af1ff0a">这样就能在编译期防止ID混淆，避免类似错误再次发生，还好Eva发现的及时，不然损失可就大了，金融系统中的类型混淆可是灾难性的， 黑犬默默掏出小本本记下下个月给Eva多发点奖金。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980c18c8bf8c6c38b8393" data-id="2d781b9ce32980c18c8bf8c6c38b8393"><span><div id="2d781b9ce32980c18c8bf8c6c38b8393" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980c18c8bf8c6c38b8393" title="🦹又被监管盯上了"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🦹又被监管盯上了</span></span></h3><div class="notion-text notion-block-2d781b9ce32980c9bc49c1fe7db9b1ab">周三的晚上黑犬忙了半天刚刚要回家，就被合规官Henry叫住了：
&gt; “老板，监管部门要求我们记录每个员工的<b>所有操作日志</b>、<b>任务耗时指标</b>，还要有<b>权限控制</b>。但如果我去修改每个员工类，要改 7 个文件，太容易出 bug 了！”</div><div class="notion-text notion-block-2d781b9ce329800389e0fa20ec3103bd">黑犬一听这话就头大，这不就是典型的<b>横切关注点</b>问题吗？如果每个员工类都要改，那维护成本太高了。黑犬立刻打电话把QD组叫了回来，决定用<b>Mixin功能组合</b>来实现这个功能：</div><div class="notion-text notion-block-2d781b9ce3298000bf06f24a5d67da73">这样黑犬就不用修改每个员工类了，只要用Mixin组合出需要的功能即可，既满足了监管要求，又避免了代码重复和维护困难的问题，比如：</div><div class="notion-text notion-block-2d781b9ce329803383c8f9c3596d1e47">创建员工时创建这样的对象，那么公司的QR在做策略研究时就会自动记录日志了，而不需要修改原有的 <code class="notion-inline-code">QuantResearcher</code> 类。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce3298014852be9a7932bfbd7" data-id="2d781b9ce3298014852be9a7932bfbd7"><span><div id="2d781b9ce3298014852be9a7932bfbd7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce3298014852be9a7932bfbd7" title="🧐富婆的新需求"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🧐富婆的新需求</span></span></h3><div class="notion-text notion-block-2d781b9ce32980cca07ce1d6b42f052b">就在黑犬以为可以松口气时，周四午休时公司神秘大客户——富婆Esme打来电话：
&gt; “狗子啊，我这边朋友家孩子都想来你公司增长点经验，给我好好安排安排。我希望你们能给这些实习生设计一些灵活的<b>奖金计算方案</b>，听懂了么？”</div><div class="notion-text notion-block-2d781b9ce329809899bff6067f91a671">好家伙，但我能说不吗？<b>我不能</b>。黑犬只好又找来了QD组，决定用<b>Policy-Based Design策略模板设计</b>来实现这个需求，把原来的员工类改成策略模板类，这样工作和奖金都能更加灵活地调整：</div><div class="notion-text notion-block-2d781b9ce3298075a91af812337b82c7">哪里都是人情世故，谁叫富婆给钱多呢？黑犬只好硬着头皮新增了几个HC，还和HR打好了招呼，让实习生们都用上<b>专门设计过</b>的奖金计算方案。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980a78ca9d7cce87d920d" data-id="2d781b9ce32980a78ca9d7cce87d920d"><span><div id="2d781b9ce32980a78ca9d7cce87d920d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980a78ca9d7cce87d920d" title="🌋策略灾难"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🌋策略灾难</span></span></h3><div class="notion-text notion-block-2d781b9ce3298045a978e3d6eb82c450">直到这周四晚上，Alice 研发了 200 多个不同的策略，有的用 C++，有的用 Python FFI，有的甚至是外部厂商提供的：</div><blockquote class="notion-quote notion-block-2d781b9ce3298008b5ded5360461d15c"><div>“老板，我们的策略现在五花八门：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298037b4d5ebb39da91080"><li>MomentumStrategy（继承 Strategy）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce32980ef9ff7dc3471de2faa"><li>MeanReversionStrategy（继承 Strategy）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298065a372cf76e0e86b4f"><li>MLStrategy（Python 接口，没继承）</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298064bd6ddd6bcdf4383e"><li>VendorStrategy（外部库，接口完全不同）</li></ul><div class="notion-text notion-block-2d781b9ce3298058bd97fd71a8e10b37">我现在想统一管理这些策略，但它们连基类都不一样！”</div></blockquote><div class="notion-text notion-block-2d781b9ce329809cb4cdf4ee89903414">黑犬头都大了，你就不能提前说吗？下次让研究组凑钱请QD组吃饭！黑犬只好又找来了QD组，决定用<b>类型擦除</b>(Type Erasure)技术来实现策略的统一管理：</div><div class="notion-text notion-block-2d781b9ce32980ca8a61e109cce187f5">直接使用类型擦除重构了策略类之后，Alice现在终于能够统一的管理不同类型的策略了：</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce32980b8a624dc68871410b1" data-id="2d781b9ce32980b8a624dc68871410b1"><span><div id="2d781b9ce32980b8a624dc68871410b1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce32980b8a624dc68871410b1" title="🌈雨后彩虹"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">🌈雨后彩虹</span></span></h3><div class="notion-text notion-block-2d781b9ce3298058bb84c64f9f0f77a0">经过一周的奋战，黑犬终于带领QD组解决了公司面临的各种棘手问题，现在比AlphaZ的订单执行速度 <b>快了 30 微秒</b>！气得白猫直跳脚。富婆Esme也非常满意，追加了 2000 万投资。黑犬站在办公室落地窗前，看着团队成员在工位上专注工作。</div><div class="notion-text notion-block-2d781b9ce32980cda03af4e8acec0a53">财务助理递来一杯马黛茶🧉：</div><blockquote class="notion-quote notion-block-2d781b9ce32980de82c0c7c47a835a93"><div>“老板，前辈 A 发来邮件，说想介绍几个 LP（有限合伙人）过来。大姐头Esme说周天晚上八点也撺了一个和投资人朋友的局，要你一定抽时间去。”</div></blockquote><div class="notion-text notion-block-2d781b9ce329806eafb5fac31efc9b08">黑犬笑了笑说：</div><blockquote class="notion-quote notion-block-2d781b9ce32980b8aabaf57808941e74"><div>“告诉他，SigmaX 已经准备好了。技术债还清了，架构优化了，团队专业化了。是时候进入下一个阶段了。”</div></blockquote><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2d781b9ce329803bbc25e8435da2254b" data-id="2d781b9ce329803bbc25e8435da2254b"><span><div id="2d781b9ce329803bbc25e8435da2254b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2d781b9ce329803bbc25e8435da2254b" title="📒补充说明"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">📒补充说明</span></span></h3><div class="notion-text notion-block-2d781b9ce32980e580a9d02f7768f3a7">本周涉及了多种C++高级编程技术，你可能好奇<b>模板元编程</b>怎么没有单独讲，其实这些技术本质上都离不开模板元编程的支持，比如CRTP、Mixin、Policy-Based Design和类型擦除都大量使用了模板技术来实现编译期多态和类型抽象，模板元编程的几个重要特征（如<b>SFINAE、constexpr if、概念</b>等）在这些技术中都有所体现，比如：</div><ul class="notion-list notion-list-disc notion-block-2d781b9ce329809bbd9bd7c7818bcbea"><li><b>CRTP</b> 利用模板参数实现静态多态，避免了虚函数开销。</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298073afc5da5100bccb5f"><li><b>Mixin</b> 通过模板继承实现功能组合，遵循开闭原则。</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce329807cad17c73d48c3dfd1"><li><b>Policy-Based Design</b> 通过模板参数实现策略注入，增强了灵活性。</li></ul><ul class="notion-list notion-list-disc notion-block-2d781b9ce3298035b2dee2ffa639060d"><li><b>类型擦除</b> 通过模板实现对任意类型的封装，实现统一接口。</li></ul><div class="notion-text notion-block-2d781b9ce3298006ba8ad823684a83a6">教科书对模板元编程的介绍通常比较抽象，而通过这些具体技术的应用，可以更直观理解这几项技术适用于什么场景，以及它们如何利用模板元编程的特性来实现高效、灵活的设计。</div><div class="notion-text notion-block-2d781b9ce329800c95e9cb252915f33e">本周代码已经上传到Github仓库🔗：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/shuheng-mo/qd-study-plan-104wk.git">https://github.com/shuheng-mo/qd-study-plan-104wk.git</a>，欢迎Star⭐、贡献代码或issue。</div><div class="notion-text notion-block-2d781b9ce329809f945ef4a2b294a407"><b>下周预告：W06 - C++的OOP高级用法（下）</b></div><div class="notion-text notion-block-2d781b9ce32980888891f1d3cd7ff870">👋各位下周五见，下周SigmaX将会迎来更加硬核的挑战。</div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>