<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>WTSolutions Invest</title>
  
  <subtitle>| QMT 使用指南 | IBKR 使用指南 | Investment故事 |</subtitle>
  <link href="https://invest.wtsolutions.cn/atom.xml" rel="self"/>
  
  <link href="https://invest.wtsolutions.cn/"/>
  <updated>2026-04-29T11:11:16.659Z</updated>
  <id>https://invest.wtsolutions.cn/</id>
  
  <author>
    <name>WTSolutions</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>IBKR 盈透证券 新手指南 IBKR InteractiveBrokers for Beginner</title>
    <link href="https://invest.wtsolutions.cn/posts/ibkr-for-beginner/"/>
    <id>https://invest.wtsolutions.cn/posts/ibkr-for-beginner/</id>
    <published>2026-04-29T00:26:06.000Z</published>
    <updated>2026-04-29T11:11:16.659Z</updated>
    
    <content type="html"><![CDATA[<h2 id="软件工具"><a href="#软件工具" class="headerlink" title="软件工具"></a>软件工具</h2><p>IBKR有网页版，手机APP版，电脑桌面版等多个软件工具。</p><p>对于新手来说，手机APP和电脑网页版可能使用起来相对比较友好一些。我感觉电脑桌面版的那个软件设计哦，只适合于金融行业资深从业者。反正就挺难用的。</p><p>手机APP, 如果是苹果的，就直接在应用商店下载，如果是安卓的，但是你又不知道怎么下载, 你就打IBKR在上海的客服电话，他们会教你，上海客服给你的下载链接下载的APP可以在国内的网络环境下稳定的使用。</p><p>另外，IBKR也是有api可以提供使用的，懂编程的朋友也可以使用API进行程序化交易。</p><h2 id="券商佣金"><a href="#券商佣金" class="headerlink" title="券商佣金"></a>券商佣金</h2><p>对于小散来说，选阶梯式的会比较合适，一次交易，基本佣金基本是在0.35USD。</p><p>如果交易量大或者金额特别高的，估计也不会看我这个帖子，所以我就只介绍适合新手小散的佣金方式。</p><h2 id="T-0"><a href="#T-0" class="headerlink" title="T+0"></a>T+0</h2><p>美国股市并不是完全T+0，</p><p>对于资金量大于25000USD的day trader账户，是可以随便T+0交易的</p><p><s>2000~25000USD资金量的保证金账户，5个交易日内最多3次 T+0交易</s><br>2026年6月，SEC修改政策，将不再限制2000～25000USD资金量账户的保证金账户的日内交易限制了，具体的券商有18个月的时间来实时这个政策调整，所以一定要在6月之后，跟自己的券商确认一下是否已经调整了政策。</p><p>小于2000USD的现金账户，就不建议你进行T+0交易了，需要等到资金交割之后才能再次交易</p><p>如果违规账户会被暂停90天。</p><p>简单来说，有钱的就充钱吧，充25000，成为day trader，能随便T+0。没那么多钱且是新手还是别随便T+0了。IBKR的手机APP在识别到你可能触发违规的时候，一般会弹出小窗口提醒你一下，需要注意！</p><h2 id="换汇"><a href="#换汇" class="headerlink" title="换汇"></a>换汇</h2><p>IBKR里面可以很方便的换汇，但换汇是有手续费的，最少2USD。据说IBKR的汇率是比较好的，但我也没有对比过。因为资金量很小的话，也不太需要在乎这个。</p><h2 id="入金速度"><a href="#入金速度" class="headerlink" title="入金速度"></a>入金速度</h2><p>如果采用银行转账的形式，转账后需要大概30分钟，一小时，才能显示到账户中，并不是实时到账的。其他的入金形式是不是能实时到账，我不确定，有知道的知友可以在评论区补充。另外，入金账户的名称和你的IBKR的账户名称要是同一个姓名，才能入金的，不能用别人的账户入金。</p><h2 id="入金账户"><a href="#入金账户" class="headerlink" title="入金账户"></a>入金账户</h2><p>内地账户不支持入金到IBKR， 需要海外（含香港）的账户入金。也可以用Wise入金，Wise现在支持使用中国身份证开户了，可以开美元港币等账户。<br>了解Wise: <a href="https://invest.wtsolutions.cn/posts/wise-account-guide/">wise-account-guide</a><br>前往开户：<a href="https://wise.com/invite/ahpc/f0epglc">https://wise.com/invite/ahpc/f0epglc</a></p><h2 id="出金"><a href="#出金" class="headerlink" title="出金"></a>出金</h2><p>每个月的第一笔出金是免费的，每个月从第二笔出金是要支付手续费了的。</p><h2 id="行情"><a href="#行情" class="headerlink" title="行情"></a>行情</h2><p>使用IBKR的任何客户端，看行情都是特别的不适应的。没有国人制作的APP看行情更舒服，可以用HK的或者SG的券商APP（FUTU,雪球,MOOMOO等）。</p><h2 id="股票收益增长计划"><a href="#股票收益增长计划" class="headerlink" title="股票收益增长计划"></a>股票收益增长计划</h2><p>这个就是当有人需要融券的时候，IBKR会找参与了股票收益计划的人，把券借给需要融券的人。借出的账户，可以收到利息。借出后，当你想卖股票的时候，完全不影响你卖出。</p><h2 id="利息"><a href="#利息" class="headerlink" title="利息"></a>利息</h2><p>入金后可能有一部分余额没有用于购买股票，以现金余额的形式在账户里面。</p><p>余额10000美金是没有利息的，高于10万美金的利息是能达到4.3%的。中间分了几档，利息介于0~4.3%之间。如果是小散户，估计可能也没有利息或者利息很少。</p><h2 id="夜盘交易"><a href="#夜盘交易" class="headerlink" title="夜盘交易"></a>夜盘交易</h2><p>IBKR支持夜盘美股交易，也就是除了美股正常的交易时间之外，大部分时间你也是可以交易股票和ETF的。</p><p>时间是美国ET时间晚上八点到第二天早晨的三点五十，大家可以相应换算北京时间，基本覆盖了A股交易的时间。</p><p>注意，并不是所有的交易产品都支持夜盘的，绝大部分散户操作的股票和ETF支持，在页面你可以看到夜盘按钮的就是支持的。另外，夜盘交易并没有正常交易时间段那么活跃，也就是流动性相对没那么好，所以交易价格可能和公允价值偏差较大。</p><h2 id="Bit币交易"><a href="#Bit币交易" class="headerlink" title="Bit币交易"></a>Bit币交易</h2><p>如果使用中国大陆身份进行开户的话，是不允许进行相关交易的。</p><h2 id="股市交易时间"><a href="#股市交易时间" class="headerlink" title="股市交易时间"></a>股市交易时间</h2><p>不同地区股市交易时间不同，如下均按照北京时间，只统计常规交易时间。像美股是有夜盘交易的，不含在如下所述的交易时间中（如果有错误，还请在评论区指正）</p><ul><li>中国沪深市场：周一至周五，上午9:30至11:30，下午1:00至3:00。</li><li>中国香港股市：周一至周五，早市9:30至12:00，午市1:00至4:00。</li><li>美国股市：夏令时21:30至次日4:00，冬令时22:30至次日5:00。</li><li>欧洲股市：夏令时15:00至23:30，冬令时16:00至次日0:30。</li><li>日本股市：周一至周五，上午8:00至下午2:00。</li><li>我国台湾股市：周一至周五，上午9:00至下午1:30。</li><li>伦敦证券交易所（英国）：周一至周五，16:00至次日00:30。</li><li>法兰克福证券交易所（德国）：周一至周五，15:00至次日03:00。</li><li>巴黎泛欧交易所（法国）：周一至周五，16:00至次日00:30。</li></ul><h2 id="交易品种"><a href="#交易品种" class="headerlink" title="交易品种"></a>交易品种</h2><ul><li>股票交易：包括美国、欧洲、亚洲等多个国家和地区的股票市场。</li><li>期权交易：提供多种期权交易策略。</li><li>期货和商品交易：涵盖能源、金属、农产品等多种期货合约。</li><li>外汇交易：提供主要和次要货币对的交易。</li><li>债券交易：包括政府债券、公司债券等。</li><li>基金和ETFs：提供广泛的共同基金和交易所交易基金。</li></ul><h2 id="保险"><a href="#保险" class="headerlink" title="保险"></a>保险</h2><p>IBKR证券账户中持有的现金根据SEC的客户保护法规15c3-3受到保护。</p><p>除IBKR的保护外，前$250,000美元现金享受SIPC保险覆盖。</p><h2 id="闲钱理财"><a href="#闲钱理财" class="headerlink" title="闲钱理财"></a>闲钱理财</h2><p>有时候账户有一些余额，放着没利息（仅限低于10000美元的余额），可以选择购买BIL，类似货币基金吧（不完全等同），可以每天涨一点点利息，但交易这个BIL也是正常需要缴纳手续费的。</p><h2 id="下单类型-美股和A股区别）"><a href="#下单类型-美股和A股区别）" class="headerlink" title="下单类型(美股和A股区别）"></a>下单类型(美股和A股区别）</h2><p>美股和A股在下单类型上存在一些差异，主要体现在市场规则和交易机制上。以下是主要区别：</p><ul><li>市价单（Market Order）</li></ul><p>美股：市价单按当前市场价格立即执行，成交速度快，但价格可能波动。</p><p>A股：A股也有市价单，但通常有价格限制（如涨跌停板），成交价不会超出当日涨跌幅范围。</p><ul><li>限价单（Limit Order）</li></ul><p>美股：限价单按指定价格或更优价格成交，未达到指定价格则不执行。</p><p>A股：A股的限价单类似，但受涨跌停板限制，超出范围的委托无效。</p><ul><li>止损单（Stop Order）</li></ul><p>美股：止损单在达到指定价格后转为市价单，常用于控制风险。</p><p>A股：A股没有直接的止损单，投资者需手动操作或使用条件单。</p><ul><li>止损限价单（Stop-Limit Order）</li></ul><p>美股：止损限价单在达到止损价后转为限价单，按指定或更优价格成交。</p><p>A股：A股无此订单类型，需手动操作。</p><ul><li>条件单（Conditional Order）</li></ul><p>美股：条件单在满足特定条件时触发，常用于复杂策略。</p><p>A股：部分券商提供类似功能，但不如美股普遍。</p><ul><li>订单有效期</li></ul><p>美股：订单有效期多样，包括当日有效、长期有效等。</p><p>A股：通常为当日有效，未成交的订单在收盘后自动撤销。</p><ul><li>最小交易单位</li></ul><p>美股：无固定最小交易单位，可交易一股。</p><p>A股：最小交易单位为100股（1手），科创板为200股。</p><ul><li>订单有效期</li></ul><p>美股：订单有效期多样，包括当日有效、长期有效等。</p><p>A股：通常为当日有效，未成交的订单在收盘后自动撤销。</p><h2 id="CRS税务信息交换"><a href="#CRS税务信息交换" class="headerlink" title="CRS税务信息交换"></a>CRS税务信息交换</h2><p>在美国运营的IBKR主体与国内没有CRS税务交换。（不敢100%确认哈，也是多处打听的消息）</p><p>在香港、英国等地运营的IBKR主体受运营国家法规要求，会产生CRS交换。</p><p>主要要看账户在哪个地方哪个营运主体开设的。</p><p>被交换的信息内容广泛，包括账户所有者的姓名、住址、税务识别号，以及账户号、年终余额或账户净值。此外，还可能包括在一个公历年度内取得的利息、股息收入以及出售金融资产产生的收入等。个人的金融账户基本都会被申报，如存款账户、托管账户（如股票账户）、投资实体股权、债权权益、具有现金价值的保险、年金账户等。</p><p>CRS的信息交换覆盖面极为广泛，几乎囊括了所有类型的金融服务提供商，如银行、券商、信托公司、基金管理公司等。</p><h2 id="美国ibkr开户"><a href="#美国ibkr开户" class="headerlink" title="美国ibkr开户"></a>美国ibkr开户</h2><p>可以通过在线开户的形式获取美国ibkr的账户，我的推荐链接，使用该推广链接开户，可获得最高1000美金的返利。<br><a href="https://ibkr.com/referral/he430">https://ibkr.com/referral/he430</a></p><p>最近听说，现在IBKR的开户政策也逐渐变严格了，开始要求居住在海外或者有海外居住权之类的要求了，大家尽早开户啦。</p><h2 id="账户类型介绍"><a href="#账户类型介绍" class="headerlink" title="账户类型介绍"></a>账户类型介绍</h2><p>IBKR提供多种账户类型，适合不同需求的投资者：</p><ul><li><p><strong>现金账户（Cash Account）</strong>：</p><ul><li>只能使用已存入的资金交易</li><li>不支持杠杆交易</li><li>适合保守型投资者和资金较少的新手</li><li>T+0交易限制严格（见前文T+0部分）</li></ul></li><li><p><strong>保证金账户（Margin Account）</strong>：</p><ul><li>可以使用券商提供的杠杆进行交易</li><li>支持更多交易策略（如卖空、期权等）</li><li>T+0交易限制较宽松（2000-25000美元资金量）</li><li>需要维持一定的保证金比例</li></ul></li><li><p><strong>专业交易者账户（Professional Account）</strong>：</p><ul><li>适合交易经验丰富的投资者</li><li>可以访问更多高级交易功能和工具</li><li>要求满足特定的交易经验和资金条件</li></ul></li><li><p><strong>联名账户（Joint Account）</strong>：</p><ul><li>适合夫妻或合作伙伴共同管理投资</li><li>分为联名生存者账户和联名租户账户等类型</li></ul></li></ul><h2 id="客户服务"><a href="#客户服务" class="headerlink" title="客户服务"></a>客户服务</h2><p>IBKR提供多种客户支持渠道：</p><ul><li><strong>在线客服</strong>：登录客户端后可与客服实时聊天</li><li><strong>电话支持</strong>：提供全球电话热线，支持多语言</li><li><strong>邮件支持</strong>：发送邮件至客服邮箱，通常24小时内回复</li><li><strong>帮助中心</strong>：丰富的FAQ和教程资源</li><li><strong>社区论坛</strong>：投资者交流经验和问题的平台</li></ul><p>中国客户可拨打上海客服电话。</p><h2 id="新手交易建议"><a href="#新手交易建议" class="headerlink" title="新手交易建议"></a>新手交易建议</h2><ul><li><p><strong>学习资源</strong>：</p><ul><li>IBKR官网教育中心（Traders’ Academy）</li><li>投资书籍和在线课程</li><li>金融新闻和分析报告</li></ul></li><li><p><strong>投资策略</strong>：</p><ul><li>分散投资，避免集中持有单一证券</li><li>长期投资为主，避免频繁交易</li><li>定期复盘，总结经验教训</li></ul></li><li><p><strong>风险管理</strong>：</p><ul><li>设定止损点，控制单笔交易风险</li><li>不要将全部资金投入高风险产品</li><li>保持良好的心态，避免情绪化交易</li></ul></li></ul><hr><p>希望这篇IBKR新手指南能帮助到你！如有任何问题或建议，欢迎在评论区留言。</p><p>2026&#x2F;04&#x2F;29 更新</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;软件工具&quot;&gt;&lt;a href=&quot;#软件工具&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="ibkr" scheme="https://invest.wtsolutions.cn/categories/ibkr/"/>
    
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="ibkr" scheme="https://invest.wtsolutions.cn/tags/ibkr/"/>
    
    <category term="ibkr for beginner" scheme="https://invest.wtsolutions.cn/tags/ibkr-for-beginner/"/>
    
    <category term="盈透证券" scheme="https://invest.wtsolutions.cn/tags/%E7%9B%88%E9%80%8F%E8%AF%81%E5%88%B8/"/>
    
  </entry>
  
  <entry>
    <title>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码</title>
    <link href="https://invest.wtsolutions.cn/posts/write-qmt-code-with-Deepseek/"/>
    <id>https://invest.wtsolutions.cn/posts/write-qmt-code-with-Deepseek/</id>
    <published>2026-04-07T07:26:06.000Z</published>
    <updated>2026-04-07T07:34:35.653Z</updated>
    
    <content type="html"><![CDATA[<p>​随着人工智能技术的迅猛发展，利用AI工具提升工作效率已成为现代开发者的重要手段。</p><p>在使用deepseek官方网页生成迅投QMT代码的时候，deepseek给出的代码是xtquant代码，也就是miniqmt代码，并不是我们传统意义上说的大QMT可用的代码。</p><p>因此，我们需要自建一个知识库，让deepseek根据我的知识库里面的知识，去帮我生成大QMT可用的交易代码。</p><h2 id="一、建立迅投QMT的知识库"><a href="#一、建立迅投QMT的知识库" class="headerlink" title="一、建立迅投QMT的知识库"></a>一、建立迅投QMT的知识库</h2><p>建立迅投QMT的知识库的方法比较简单，我们就直接访问迅投QMT的官方网站，把网站上的网页内容打印成PDF文件，我这边有一个打印下来的PDF文件可以下载（注意我打印的日期是2026年2月5日，后续迅投网站可能会更新），大家也可以自己去网站上打印。</p><p>下载链接：<br><a href="https://pan.quark.cn/s/a68a9e9ce7d7">网盘链接</a></p><p><a href="https://pan.quark.cn/s/a68a9e9ce7d7">https://pan.quark.cn/s/a68a9e9ce7d7</a></p><p>关于我整理的知识库，详见我的博客文章 <a href="../qmt-knowledge-base">qmt-knowledge-base</a> </p><h2 id="二、利用腾讯ima-copilot建立与deepseek的知识库"><a href="#二、利用腾讯ima-copilot建立与deepseek的知识库" class="headerlink" title="二、利用腾讯ima.copilot建立与deepseek的知识库"></a>二、利用腾讯ima.copilot建立与deepseek的知识库</h2><h3 id="1、下载与安装-IMA-Copilot"><a href="#1、下载与安装-IMA-Copilot" class="headerlink" title="1、下载与安装 IMA.Copilot"></a>1、下载与安装 IMA.Copilot</h3><h3 id="2-导入PDF文件到个人知识库"><a href="#2-导入PDF文件到个人知识库" class="headerlink" title="2.   导入PDF文件到个人知识库"></a>2.   导入PDF文件到个人知识库</h3><ol><li>在 IMA.Copilot 中，点击左侧导航栏的“知识库”选项。</li><li>选择“导入文档”，上传你的迅投QMT PDF文件。</li><li>等待系统处理并索引文档内容。</li></ol><h2 id="三、使用-IMA-Copilot-编写量化交易-Python-代码"><a href="#三、使用-IMA-Copilot-编写量化交易-Python-代码" class="headerlink" title="三、使用 IMA.Copilot 编写量化交易 Python 代码"></a>三、使用 IMA.Copilot 编写量化交易 Python 代码</h2><p>在个人知识库页面，下面有一个输入窗口，可以在此处提问，此处提问可以是直接基于知识库知识来回答的。</p><p>举例说明：</p><blockquote><p>“请根据迅投QMT的PDF文档，编写一个计算股票移动平均线的Python函数。”</p></blockquote><p>IMA.Copilot 将结合 DeepSeek R1 大模型和你的知识库内容，自动生成相应的Python代码。以下就是deepseek给出的代码。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#coding:gbk</span></span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">calculate_ma</span>(<span class="params">ContextInfo, stock_code, window_size</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    计算指定股票的移动平均线</span></span><br><span class="line"><span class="string">    :param ContextInfo: QMT上下文对象[1](@ref)</span></span><br><span class="line"><span class="string">    :param stock_code: 股票代码（格式：&#x27;000001.SZ&#x27;）[1](@ref)</span></span><br><span class="line"><span class="string">    :param window_size: 均线周期</span></span><br><span class="line"><span class="string">    :return: MA值（浮点数）</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="comment"># 获取本地收盘价数据</span></span><br><span class="line">    local_data = ContextInfo.get_market_data_ex(</span><br><span class="line">        [<span class="string">&#x27;close&#x27;</span>], </span><br><span class="line">        [stock_code],</span><br><span class="line">        period=<span class="string">&#x27;1d&#x27;</span>,</span><br><span class="line">        count=window_size,</span><br><span class="line">        subscribe=<span class="literal">False</span></span><br><span class="line">    )</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 提取收盘价列表</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        close_prices = local_data[stock_code][<span class="string">&#x27;close&#x27;</span>].values</span><br><span class="line">    <span class="keyword">except</span> KeyError:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;未找到股票<span class="subst">&#123;stock_code&#125;</span>的收盘数据&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">None</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 计算移动平均</span></span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">len</span>(close_prices) &gt;= window_size:</span><br><span class="line">        ma_value = np.mean(close_prices[-window_size:])</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">round</span>(ma_value, <span class="number">2</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;数据不足，当前数据量<span class="subst">&#123;<span class="built_in">len</span>(close_prices)&#125;</span>，需要<span class="subst">&#123;window_size&#125;</span>根K线&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">None</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用示例（在策略中调用）</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">handlebar</span>(<span class="params">C</span>):</span><br><span class="line">    stock = <span class="string">&quot;600000.SH&quot;</span></span><br><span class="line">    ma10 = calculate_ma(C, stock, <span class="number">10</span>)  <span class="comment"># 计算10日均线</span></span><br><span class="line">    ma20 = calculate_ma(C, stock, <span class="number">20</span>)  <span class="comment"># 计算20日均线</span></span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&quot;<span class="subst">&#123;stock&#125;</span> 10日均线：<span class="subst">&#123;ma10&#125;</span>，20日均线：<span class="subst">&#123;ma20&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">init</span>(<span class="params">C</span>):</span><br><span class="line">    <span class="comment"># 下载所需历史数据（建议在策略初始化时执行）</span></span><br><span class="line">    C.download_history_data(<span class="string">&quot;600000.SH&quot;</span>, <span class="string">&quot;1d&quot;</span>, <span class="string">&quot;&quot;</span>, <span class="string">&quot;&quot;</span>)</span><br></pre></td></tr></table></figure><h2 id="四、检查测试"><a href="#四、检查测试" class="headerlink" title="四、检查测试"></a>四、检查测试</h2><p>生成的代码可能需要根据具体需求进行调整和优化。</p><blockquote><p>特别注意：AI生成的内容，不能保证是100%准确的，大家务必人工检查确认代码的正确性。</p></blockquote><p>通过本文的介绍，如何使用腾讯 IMA.Copilot 结合 DeepSeek R1 大模型，从个人知识库中的迅投QMT PDF文件编写量化交易的Python代码。这一流程不仅提高了代码编写的效率，还大大提升了代码的质量和准确性。</p><p>未来，随着AI技术的不断进步，我们有理由相信，量化交易将变得更加智能化和高效化。</p><p>​</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><p>本文更新于2026年4月7日</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;​随着人工智能技术的迅猛发展，利用AI工具提升工作效率已成为现代开发者的重要手段。&lt;/p&gt;
&lt;p&gt;在使用deepseek官方网页生成迅投QMT代码的时候，deepseek给出的代码是xtquant代码，也就是miniqmt代码，并不是我们传统意义上说的大QMT可用的代码。&lt;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="python" scheme="https://invest.wtsolutions.cn/tags/python/"/>
    
    <category term="迅投" scheme="https://invest.wtsolutions.cn/tags/%E8%BF%85%E6%8A%95/"/>
    
    <category term="deepseek" scheme="https://invest.wtsolutions.cn/tags/deepseek/"/>
    
    <category term="量化交易" scheme="https://invest.wtsolutions.cn/tags/%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT量化交易系统新手指南及常见问题</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-guide/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-guide/</id>
    <published>2026-04-07T07:03:00.000Z</published>
    <updated>2026-04-07T07:33:22.133Z</updated>
    
    <content type="html"><![CDATA[<h2 id="迅投QMT门槛"><a href="#迅投QMT门槛" class="headerlink" title="迅投QMT门槛"></a>迅投QMT门槛</h2><p>迅投QMT量化交易系统是一款基于python语言开发的程序化交易（量化交易）平台，它提供了丰富的量化交易功能，包括策略开发、回测、实盘交易等。</p><p>迅投QMT量化交易系统的门槛相对较低，只需要具备一定的python编程基础，资金门槛也比较低，就可以开始使用。现在一些大语言模型也可以帮你编写代码了。</p><p>其实迅投QMT还是比较适合入门级和中级个人投资者的，如果是那种特别专业的个人投资者或者机构的投资者，不一定会选择迅投QMT，还有其他的量化交易平台，比如大家经常能在龙虎榜上面看到的华鑫某某某，当然华鑫的门槛会更高，对资金和对技术能力都会有更高的门槛。</p><h2 id="开通QMT的方法"><a href="#开通QMT的方法" class="headerlink" title="开通QMT的方法"></a>开通QMT的方法</h2><p>首先就是开通一个券商，选择的券商要能支持QMT的接入，然后开通QMT的账号，就可以开始使用了。有一些券商基本没什么开户门槛，就能开通QMT，如果有需要，可以通过底部的微信二维码，与我联系，可以与我的客户经理联系，其实也就只是帮个忙，不是全职干这个的哈。<br><a href="https://invest.wtsolutions.cn/posts/qmt-account-open/">开户qmt</a></p><p>QMT交易的权限，券商那边是管控的，一般来说股票、可转债的是门槛比较低的，只需要编写一些策略文件等就可以开通了。如果要开通ETF期权的交易权限，那么资金量就要求比较高了，需要提交的文书也特别复杂。</p><h2 id="QMT的安装"><a href="#QMT的安装" class="headerlink" title="QMT的安装"></a>QMT的安装</h2><p>安装包要从你的券商那里下载，一定不要随便从网上自己下载。千万不要轻信第三方提供的安装包。安装很简单，就和平时安装一个软件一样。要使用windows的平台设备， win 10, win 11 , win server等。</p><p>我这边提供一个供你参考研究的安装包，是某金证券的QMT安装包。下载时间是20260407，是这个时间对应的最新版本。仅供学习研究使用，如果开始交易，请务必直接从券商那边获取正规的安装包，不要轻信他人提供的安装包。<a href="https://pan.quark.cn/s/a68a9e9ce7d7">网盘链接</a></p><h2 id="QMT的登陆"><a href="#QMT的登陆" class="headerlink" title="QMT的登陆"></a>QMT的登陆</h2><p>需要从自己的券商那里获取，有一个用户名和一个密码，然后登陆即可。一般在开通QMT交易权限的时候，券商会告诉你用户名和密码。</p><h2 id="Python版本"><a href="#Python版本" class="headerlink" title="Python版本"></a>Python版本</h2><p>QMT策略编写使用的语言是python，版本为3.6。如果完全不懂python的话，要么赶紧学习，要么这个帖子就是一个劝退帖。他并不是那种点一点鼠标就能写策略的，必须要有python编写能力。在使用python包的时候，要注意版本问题，因为QMT里面内置的python版本是3.6，所以在编写策略的时候，要注意使用的python包的版本是否支持3.6。</p><h3 id="关于线程和进程"><a href="#关于线程和进程" class="headerlink" title="关于线程和进程"></a>关于线程和进程</h3><p>QMT中，python无法使用多线程和多进程，所有策略都在同一线程中执行，所以策略中应该尽量避免阻塞类的写法，否则会影响其他策略的执行。</p><h3 id="QMT自带python库"><a href="#QMT自带python库" class="headerlink" title="QMT自带python库"></a>QMT自带python库</h3><p>QMT里面内置了一些常用的python库，包括：</p><ul><li>numpy, pandas, patsy, scipy, statsmodels, TA_Lib<br>其中多种指标如 ADX, MACD, RSI, 布林轨道等；K 线形态识别，如黄昏之星，锤形线等等可以使用TA_Lib库。</li></ul><p>如果你想要使用其他的python库，有的券商qmt是支持自行安装的，有的可能需要联系券商给你打开权限。可以先自行尝试安装，要是不行就问问客户经理是不是不让自己安装。</p><h2 id="QMT自带策略"><a href="#QMT自带策略" class="headerlink" title="QMT自带策略"></a>QMT自带策略</h2><p>QMT里面自带了一些策略，包括：</p><ul><li>均线策略</li><li>日内交易策略</li><li>国债逆回购策略</li></ul><p>等等，当然这些仅供参考，基本上大家都要自己编写自己的策略。不过有了这些自带策略作为例子，学习起来会轻松很多。</p><h2 id="QMT的运行环境"><a href="#QMT的运行环境" class="headerlink" title="QMT的运行环境"></a>QMT的运行环境</h2><p>需要一台Windows电脑，win10, win11, 也可以使用云服务器 win server，电脑的性能取决于你自己的策略，如果策略的数量不多，且策略并不复杂，其实普通的电脑都没有问题。对于新手来说，完全可以使用一台现有的电脑开始使用，如果后面上了复杂的策略，慢慢的再增加性能更好的电脑硬件。我自己的策略比较简单，我把我的电脑的一些硬件，比如USB接口只开启了一个，声卡什么用不到的硬件都关闭了，只保留了必须的硬件，这样可以保证电脑的性能，也可以保证电脑的稳定性，同时电耗也会比较低，目前我的电耗每天不到0.5度。</p><blockquote><p>我的帖子，分享如何低成本的选择迅投QMT的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p></blockquote><p>QMT的运行，很多时候，我们并不是一直盯着的，会需要在电脑上&#x2F;云服务器上面安装一个远程协助软件，这样可以随时远程连接到QMT，然后进行一些操作。</p><h2 id="QMT与手机的通信"><a href="#QMT与手机的通信" class="headerlink" title="QMT与手机的通信"></a>QMT与手机的通信</h2><p>QMT与手机的通信是非常重要的，因为很多时候，QMT运行的电脑并不是实时由人工监管的，可能会出现程序报错，或者策略不符合预期等。我们需要在程序中添加代码，将错误信息通过短信、邮件、app推送等方式通知发送到手机，这样我们可以及时的处理出现的问题。</p><p>目前常用的方法有：</p><ul><li>短信推送 （要收费）</li><li>邮件推送  具体方法详见我的博客文章<a href="../qmt-email-notification">qmt-email-notification</a></li><li>飞书推送</li><li>微信公众号推送<br>等等</li></ul><p>我有时间的时候，再单独写文章讲如何使用这些推送方法。</p><h2 id="远程操作QMT电脑"><a href="#远程操作QMT电脑" class="headerlink" title="远程操作QMT电脑"></a>远程操作QMT电脑</h2><p>有时候，我们需要远程操控QMT的电脑，可以通过一些远程的操作软件，比如teamviewer, 向日葵等。如果你是在远程服务器上面运行QMT，那么你咨询一下服务器的供应商，如何进行远程连接。</p><h2 id="一些Bug与解决方案"><a href="#一些Bug与解决方案" class="headerlink" title="一些Bug与解决方案"></a>一些Bug与解决方案</h2><blockquote><p>关于这个bug我又单独的写了两个文章，一个是关于QMT的服务器延迟问题，一个是关于QMT的账号成交状态变化主推 deal_callback() ， 当账号成交状态有变化时，这个函数被客户端调用。</p></blockquote><blockquote><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p></blockquote><blockquote><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p></blockquote><p>QMT量化交易系统中的 账号成交状态变化主推 deal_callback() ， 当账号成交状态有变化时，这个函数被客户端调用。</p><p>在使用的过程中发现，deal_callback() 函数在会被调用多次，后来咨询国金证券QMT的工作人员后，才发现，会在至少如下两种情况下调用：</p><ol><li>当账号成交状态有变化时，会调用 deal_callback() 函数。</li><li>当网络出现中断之后，QMT系统与服务器重新连接的时候，会调用 deal_callback() 函数, 并且把当日的所有成交全部都推送一遍。</li></ol><p>因此务必不可以相信 deal_callback() 函数的推送数据，因为 deal_callback() 函数的推送数据可能是重复推送的。为了解决这个问题，我们需要自己建立数据库，去记录每一次下单，下单的成交状态。后续所有的下单，都要基于自己的数据库数据，不可相信QMT的推送数据。</p><p>如下摘取自迅投QMT的官方文档：</p><blockquote><p><strong>下单与回报相关</strong></p><p>为保证以尽快的速度执行交易信号, qmt 客户端提供的交易接口是异步的, 以快速交易参数填2的passorder函数为例，调用后会立刻发出委托, 然后返回。不会等待委托回报, 也不会阻塞python线程的运行。</p><p>委托&#x2F;成交&#x2F;持仓&#x2F;账号信息的更新, 是在客户端后台进行的, python策略中无法手动控制。python提供的取账号信息接口 get_trade_detail_data， 与四种交易回调函数, 都是从客户端本地缓存中读取数据 &#x2F; 触发调用，不是调用时查询柜台再返回。客户端本地缓存状态定期接收柜台推送刷新，有交易主推的柜台50ms一次，没有交易主推的柜台1-6秒一次。 不能认为get_trade_detail_data查到的状态是与柜台完全一致的, 比如卖出委托后立刻查询, 不会查到对应委托, 可用资金也不会变多。</p><p>实盘策略需要设计盘中保存&#x2F;更新委托状态的机制。常见的做法是用全局变量字典保存委托状态, 给每一笔委托独立的投资备注作为字典的key，委托状态作为字典的value, 下单后默认设置为待报, 之后查到委托后更新状态。如果某品种股票存在待报状态委托, 暂停该品种后续报单, 防止发生超单的情况。(实现可以参考实盘示例7-调整至目标持仓Demo)</p><p>QMT 所有策略是在同一个线程中被调用的，任意一个策略阻塞线程(死循环 sleep 加锁等操作)会导致所有策略的执行被阻塞，所以不能在策略里写等待操作。如需要多线程 &#x2F; 多进程的用法，可以使用极简模式配合 xtquant 库使用</p></blockquote><p><strong>deal_callback()没有被调用</strong><br>deal_callback() 函数没有被调用，或者定义了deal_callback() 函数，收不到推送数据，可能是因为没有在初始化的时候，设置set_account()函数。要先在init里调用ContextInfo.set_account后生效<br>另外，推送仅在实盘运行模式下生效。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">init</span>(<span class="params">ContextInfo</span>):</span><br><span class="line">    <span class="comment"># 设置对应的资金账号</span></span><br><span class="line">    <span class="comment"># 示例需要在策略交易界面运行</span></span><br><span class="line">    ContextInfo.set_account(account)</span><br></pre></td></tr></table></figure><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><p>讯投QMT使用小技巧: 公共代码的编写与引用 <a href="../qmt-shared-code">开始阅读</a></p><p>讯投QMT使用小技巧: trade client not found 无法找到trade client <a href="../qmt-trade-client-not-found">开始阅读</a></p><p>讯投QMT使用小技巧: 运行在云服务器时如何加密保护策略代码 <a href="../qmt-strategy-code-protection">开始阅读</a></p><p>迅投QMT量化交易系统-登录问题-无法登陆 <a href="../qmt-can-not-login">开始阅读</a></p><p>讯投QMT使用小技巧: account未定义 account not defined <a href="../qmt-account-not-defined">开始阅读</a></p><p>QMT 知识库 XtQuant知识库 使用文档 pdf <a href="../qmt-knowledge-base">开始阅读</a></p><p>QMT 与手机通信 - 邮件推送实现方法 <a href="../qmt-email-notification">开始阅读</a></p><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><h2 id="其他问题"><a href="#其他问题" class="headerlink" title="其他问题"></a>其他问题</h2><p>本文更新于2026年4月7日</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;迅投QMT门槛&quot;&gt;&lt;a href=&quot;#迅投QMT门槛&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
  </entry>
  
  <entry>
    <title>QMT 与手机通信 - 邮件推送实现方法</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-email-notification/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-email-notification/</id>
    <published>2026-04-07T03:00:00.000Z</published>
    <updated>2026-04-07T03:28:26.528Z</updated>
    
    <content type="html"><![CDATA[<h2 id="QMT-邮件推送的重要性"><a href="#QMT-邮件推送的重要性" class="headerlink" title="QMT 邮件推送的重要性"></a>QMT 邮件推送的重要性</h2><p>在使用 QMT 量化交易系统时，我们经常需要将交易信号、错误信息或系统状态及时通知到手机，以便及时处理异常情况。邮件推送是一种简单、可靠且免费的通信方式，通过 Python 的 SMTP 模块可以轻松实现。</p><h2 id="实现邮件推送的准备工作（发件邮箱）"><a href="#实现邮件推送的准备工作（发件邮箱）" class="headerlink" title="实现邮件推送的准备工作（发件邮箱）"></a>实现邮件推送的准备工作（发件邮箱）</h2><h3 id="步骤-1：选择合适的邮箱服务"><a href="#步骤-1：选择合适的邮箱服务" class="headerlink" title="步骤 1：选择合适的邮箱服务"></a>步骤 1：选择合适的邮箱服务</h3><p>推荐使用以下邮箱服务，它们都支持 SMTP 协议：</p><ul><li>Gmail</li><li>QQ 邮箱</li><li>163 邮箱</li><li>网易邮箱</li><li>企业邮箱</li></ul><h3 id="步骤-2：开启-SMTP-服务并获取授权码"><a href="#步骤-2：开启-SMTP-服务并获取授权码" class="headerlink" title="步骤 2：开启 SMTP 服务并获取授权码"></a>步骤 2：开启 SMTP 服务并获取授权码</h3><p>以 QQ 邮箱为例：</p><ol><li>登录 QQ 邮箱</li><li>点击 “设置” → “账户”</li><li>找到 “POP3&#x2F;IMAP&#x2F;SMTP&#x2F;Exchange&#x2F;CardDAV&#x2F;CalDAV 服务”</li><li>开启 “POP3&#x2F;SMTP 服务”</li><li>按照提示生成授权码（不是邮箱密码）</li><li>保存好授权码，后续会用到</li></ol><h2 id="实现邮件推送的准备工作（收件邮箱）"><a href="#实现邮件推送的准备工作（收件邮箱）" class="headerlink" title="实现邮件推送的准备工作（收件邮箱）"></a>实现邮件推送的准备工作（收件邮箱）</h2><p>选择一个收件邮箱还是很重要的，最好是当你邮箱有邮件收到的时候，手机上有提醒，比如你可以在手机上安装对应的app获取实时推送。</p><p>我这边用的是QQ邮件，然后微信绑定了QQ邮箱，当我的QQ邮箱收到了一个邮件的时候，微信就会收到一个提醒，说进来一封新邮件。类似微信消息，这个几乎是实时的。这只是我选用的方式，你选择适合自己的方法就好。</p><h2 id="Python-实现-SMTP-邮件发送"><a href="#Python-实现-SMTP-邮件发送" class="headerlink" title="Python 实现 SMTP 邮件发送"></a>Python 实现 SMTP 邮件发送</h2><h3 id="基本邮件发送代码"><a href="#基本邮件发送代码" class="headerlink" title="基本邮件发送代码"></a>基本邮件发送代码</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> smtplib</span><br><span class="line"><span class="keyword">from</span> email.mime.text <span class="keyword">import</span> MIMEText</span><br><span class="line"><span class="keyword">from</span> email.mime.multipart <span class="keyword">import</span> MIMEMultipart</span><br><span class="line"><span class="keyword">from</span> email.header <span class="keyword">import</span> Header</span><br><span class="line"></span><br><span class="line"><span class="comment"># 邮件配置</span></span><br><span class="line">SMTP_SERVER = <span class="string">&quot;smtp.qq.com&quot;</span>  <span class="comment"># SMTP 服务器地址</span></span><br><span class="line">SMTP_PORT = <span class="number">587</span>  <span class="comment"># SMTP 端口</span></span><br><span class="line">SENDER_EMAIL = <span class="string">&quot;your_qq_email@qq.com&quot;</span>  <span class="comment"># 发件人邮箱</span></span><br><span class="line">SENDER_PASSWORD = <span class="string">&quot;your_authorization_code&quot;</span>  <span class="comment"># 授权码（不是密码）</span></span><br><span class="line">RECEIVER_EMAIL = <span class="string">&quot;your_mobile_email@139.com&quot;</span>  <span class="comment"># 收件人邮箱（可以是手机邮箱）</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">send_email</span>(<span class="params">subject, content</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    发送邮件函数</span></span><br><span class="line"><span class="string">    :param subject: 邮件主题</span></span><br><span class="line"><span class="string">    :param content: 邮件内容</span></span><br><span class="line"><span class="string">    :return: 是否发送成功</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        <span class="comment"># 创建邮件对象</span></span><br><span class="line">        message = MIMEMultipart()</span><br><span class="line">        message[<span class="string">&#x27;From&#x27;</span>] = Header(<span class="string">&quot;QMT 通知&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        message[<span class="string">&#x27;To&#x27;</span>] = Header(<span class="string">&quot;用户&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        message[<span class="string">&#x27;Subject&#x27;</span>] = Header(subject, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 添加邮件正文</span></span><br><span class="line">        message.attach(MIMEText(content, <span class="string">&#x27;plain&#x27;</span>, <span class="string">&#x27;utf-8&#x27;</span>))</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 连接 SMTP 服务器并发送邮件</span></span><br><span class="line">        server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)</span><br><span class="line">        server.starttls()  <span class="comment"># 开启 TLS 加密</span></span><br><span class="line">        server.login(SENDER_EMAIL, SENDER_PASSWORD)</span><br><span class="line">        server.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, message.as_string())</span><br><span class="line">        server.quit()</span><br><span class="line">        </span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;邮件发送成功&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;邮件发送失败: <span class="subst">&#123;<span class="built_in">str</span>(e)&#125;</span>&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试邮件发送</span></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&quot;__main__&quot;</span>:</span><br><span class="line">    send_email(<span class="string">&quot;QMT 测试通知&quot;</span>, <span class="string">&quot;这是一封测试邮件，用于验证 QMT 邮件推送功能是否正常。&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="邮件发送函数封装"><a href="#邮件发送函数封装" class="headerlink" title="邮件发送函数封装"></a>邮件发送函数封装</h3><p>为了方便在 QMT 策略中使用，我们可以将邮件发送功能封装成一个独立的模块：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># email_utils.py</span></span><br><span class="line"><span class="keyword">import</span> smtplib</span><br><span class="line"><span class="keyword">from</span> email.mime.text <span class="keyword">import</span> MIMEText</span><br><span class="line"><span class="keyword">from</span> email.mime.multipart <span class="keyword">import</span> MIMEMultipart</span><br><span class="line"><span class="keyword">from</span> email.header <span class="keyword">import</span> Header</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">EmailSender</span>:</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self, smtp_server, smtp_port, sender_email, sender_password, receiver_email</span>):</span><br><span class="line">        <span class="variable language_">self</span>.smtp_server = smtp_server</span><br><span class="line">        <span class="variable language_">self</span>.smtp_port = smtp_port</span><br><span class="line">        <span class="variable language_">self</span>.sender_email = sender_email</span><br><span class="line">        <span class="variable language_">self</span>.sender_password = sender_password</span><br><span class="line">        <span class="variable language_">self</span>.receiver_email = receiver_email</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">send</span>(<span class="params">self, subject, content</span>):</span><br><span class="line">        <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">        发送邮件</span></span><br><span class="line"><span class="string">        :param subject: 邮件主题</span></span><br><span class="line"><span class="string">        :param content: 邮件内容</span></span><br><span class="line"><span class="string">        :return: 是否发送成功</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        <span class="keyword">try</span>:</span><br><span class="line">            message = MIMEMultipart()</span><br><span class="line">            message[<span class="string">&#x27;From&#x27;</span>] = Header(<span class="string">&quot;QMT 通知&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">            message[<span class="string">&#x27;To&#x27;</span>] = Header(<span class="string">&quot;用户&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">            message[<span class="string">&#x27;Subject&#x27;</span>] = Header(subject, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">            </span><br><span class="line">            message.attach(MIMEText(content, <span class="string">&#x27;plain&#x27;</span>, <span class="string">&#x27;utf-8&#x27;</span>))</span><br><span class="line">            </span><br><span class="line">            server = smtplib.SMTP(<span class="variable language_">self</span>.smtp_server, <span class="variable language_">self</span>.smtp_port)</span><br><span class="line">            server.starttls()</span><br><span class="line">            server.login(<span class="variable language_">self</span>.sender_email, <span class="variable language_">self</span>.sender_password)</span><br><span class="line">            server.sendmail(<span class="variable language_">self</span>.sender_email, <span class="variable language_">self</span>.receiver_email, message.as_string())</span><br><span class="line">            server.quit()</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">        <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">f&quot;邮件发送失败: <span class="subst">&#123;<span class="built_in">str</span>(e)&#125;</span>&quot;</span>)</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建全局邮件发送实例</span></span><br><span class="line">email_sender = EmailSender(</span><br><span class="line">    smtp_server=<span class="string">&quot;smtp.qq.com&quot;</span>,</span><br><span class="line">    smtp_port=<span class="number">587</span>,</span><br><span class="line">    sender_email=<span class="string">&quot;your_qq_email@qq.com&quot;</span>,</span><br><span class="line">    sender_password=<span class="string">&quot;your_authorization_code&quot;</span>,</span><br><span class="line">    receiver_email=<span class="string">&quot;your_mobile_email@139.com&quot;</span></span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">send_qmt_email</span>(<span class="params">subject, content</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    发送 QMT 相关邮件</span></span><br><span class="line"><span class="string">    :param subject: 邮件主题</span></span><br><span class="line"><span class="string">    :param content: 邮件内容</span></span><br><span class="line"><span class="string">    :return: 是否发送成功</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">return</span> email_sender.send(subject, content)</span><br></pre></td></tr></table></figure><blockquote><p>封装后的email.utils.py应当与其他的策略的py文件放在同一个文件夹下，通常是在安装目录下的python文件夹。<br>参考<a href="../qmt-shared-code">qmt-shared-code</a>文件中详细的解释。</p></blockquote><h2 id="在-QMT-策略中集成邮件推送"><a href="#在-QMT-策略中集成邮件推送" class="headerlink" title="在 QMT 策略中集成邮件推送"></a>在 QMT 策略中集成邮件推送</h2><h3 id="示例-1：策略启动通知"><a href="#示例-1：策略启动通知" class="headerlink" title="示例 1：策略启动通知"></a>示例 1：策略启动通知</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> email_utils <span class="keyword">import</span> send_qmt_email</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">init</span>(<span class="params">ContextInfo</span>):</span><br><span class="line">    <span class="comment"># 设置账号</span></span><br><span class="line">    ContextInfo.set_account(<span class="string">&quot;your_account&quot;</span>)</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 发送策略启动通知</span></span><br><span class="line">    subject = <span class="string">&quot;QMT 策略启动通知&quot;</span></span><br><span class="line">    content = <span class="string">&quot;策略已成功启动，开始运行。&quot;</span></span><br><span class="line">    send_qmt_email(subject, content)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">handle_bar</span>(<span class="params">ContextInfo</span>):</span><br><span class="line">    <span class="comment"># 策略逻辑</span></span><br><span class="line">    <span class="keyword">pass</span></span><br></pre></td></tr></table></figure><h3 id="示例-2：交易信号通知"><a href="#示例-2：交易信号通知" class="headerlink" title="示例 2：交易信号通知"></a>示例 2：交易信号通知</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> email_utils <span class="keyword">import</span> send_qmt_email</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">handle_bar</span>(<span class="params">ContextInfo</span>):</span><br><span class="line">    <span class="comment"># 获取股票数据</span></span><br><span class="line">    code = <span class="string">&quot;600000.SH&quot;</span></span><br><span class="line">    price = ContextInfo.get_market_data([code], <span class="string">&quot;close&quot;</span>)[code]</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 交易信号判断</span></span><br><span class="line">    <span class="keyword">if</span> price &gt; <span class="number">10.0</span>:</span><br><span class="line">        <span class="comment"># 发送买入信号通知</span></span><br><span class="line">        subject = <span class="string">&quot;QMT 交易信号通知&quot;</span></span><br><span class="line">        content = <span class="string">f&quot;买入信号：<span class="subst">&#123;code&#125;</span> 当前价格：<span class="subst">&#123;price&#125;</span>\n建议：买入&quot;</span></span><br><span class="line">        send_qmt_email(subject, content)</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 执行买入操作</span></span><br><span class="line">        <span class="comment"># ContextInfo.order(code, 100, &quot;buy&quot;)</span></span><br></pre></td></tr></table></figure><h3 id="示例-3：错误信息通知"><a href="#示例-3：错误信息通知" class="headerlink" title="示例 3：错误信息通知"></a>示例 3：错误信息通知</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> email_utils <span class="keyword">import</span> send_qmt_email</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">handle_bar</span>(<span class="params">ContextInfo</span>):</span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        <span class="comment"># 策略逻辑</span></span><br><span class="line">        code = <span class="string">&quot;600000.SH&quot;</span></span><br><span class="line">        price = ContextInfo.get_market_data([code], <span class="string">&quot;close&quot;</span>)[code]</span><br><span class="line">        <span class="comment"># 其他操作...</span></span><br><span class="line">    <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">        <span class="comment"># 发送错误通知</span></span><br><span class="line">        subject = <span class="string">&quot;QMT 策略错误通知&quot;</span></span><br><span class="line">        content = <span class="string">f&quot;策略运行出错：<span class="subst">&#123;<span class="built_in">str</span>(e)&#125;</span>\n请及时检查。&quot;</span></span><br><span class="line">        send_qmt_email(subject, content)</span><br></pre></td></tr></table></figure><h2 id="高级功能：邮件模板和附件"><a href="#高级功能：邮件模板和附件" class="headerlink" title="高级功能：邮件模板和附件"></a>高级功能：邮件模板和附件</h2><h3 id="带-HTML-格式的邮件"><a href="#带-HTML-格式的邮件" class="headerlink" title="带 HTML 格式的邮件"></a>带 HTML 格式的邮件</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">send_html_email</span>(<span class="params">subject, html_content</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    发送 HTML 格式邮件</span></span><br><span class="line"><span class="string">    :param subject: 邮件主题</span></span><br><span class="line"><span class="string">    :param html_content: HTML 内容</span></span><br><span class="line"><span class="string">    :return: 是否发送成功</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        message = MIMEMultipart()</span><br><span class="line">        message[<span class="string">&#x27;From&#x27;</span>] = Header(<span class="string">&quot;QMT 通知&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        message[<span class="string">&#x27;To&#x27;</span>] = Header(<span class="string">&quot;用户&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        message[<span class="string">&#x27;Subject&#x27;</span>] = Header(subject, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        </span><br><span class="line">        message.attach(MIMEText(html_content, <span class="string">&#x27;html&#x27;</span>, <span class="string">&#x27;utf-8&#x27;</span>))</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 发送邮件代码...</span></span><br><span class="line">        <span class="comment"># ...</span></span><br><span class="line">        </span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;邮件发送失败: <span class="subst">&#123;<span class="built_in">str</span>(e)&#125;</span>&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用示例</span></span><br><span class="line">html_content = <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">&lt;html&gt;</span></span><br><span class="line"><span class="string">&lt;body&gt;</span></span><br><span class="line"><span class="string">&lt;h2&gt;QMT 交易报告&lt;/h2&gt;</span></span><br><span class="line"><span class="string">&lt;p&gt;今日交易情况：&lt;/p&gt;</span></span><br><span class="line"><span class="string">&lt;table border=&quot;1&quot;&gt;</span></span><br><span class="line"><span class="string">  &lt;tr&gt;</span></span><br><span class="line"><span class="string">    &lt;th&gt;股票代码&lt;/th&gt;</span></span><br><span class="line"><span class="string">    &lt;th&gt;交易类型&lt;/th&gt;</span></span><br><span class="line"><span class="string">    &lt;th&gt;价格&lt;/th&gt;</span></span><br><span class="line"><span class="string">    &lt;th&gt;数量&lt;/th&gt;</span></span><br><span class="line"><span class="string">  &lt;/tr&gt;</span></span><br><span class="line"><span class="string">  &lt;tr&gt;</span></span><br><span class="line"><span class="string">    &lt;td&gt;600000.SH&lt;/td&gt;</span></span><br><span class="line"><span class="string">    &lt;td&gt;买入&lt;/td&gt;</span></span><br><span class="line"><span class="string">    &lt;td&gt;10.5&lt;/td&gt;</span></span><br><span class="line"><span class="string">    &lt;td&gt;100&lt;/td&gt;</span></span><br><span class="line"><span class="string">  &lt;/tr&gt;</span></span><br><span class="line"><span class="string">&lt;/table&gt;</span></span><br><span class="line"><span class="string">&lt;/body&gt;</span></span><br><span class="line"><span class="string">&lt;/html&gt;</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line">send_html_email(<span class="string">&quot;QMT 交易报告&quot;</span>, html_content)</span><br></pre></td></tr></table></figure><h3 id="带附件的邮件"><a href="#带附件的邮件" class="headerlink" title="带附件的邮件"></a>带附件的邮件</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">send_email_with_attachment</span>(<span class="params">subject, content, attachment_path</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    发送带附件的邮件</span></span><br><span class="line"><span class="string">    :param subject: 邮件主题</span></span><br><span class="line"><span class="string">    :param content: 邮件内容</span></span><br><span class="line"><span class="string">    :param attachment_path: 附件路径</span></span><br><span class="line"><span class="string">    :return: 是否发送成功</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        message = MIMEMultipart()</span><br><span class="line">        message[<span class="string">&#x27;From&#x27;</span>] = Header(<span class="string">&quot;QMT 通知&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        message[<span class="string">&#x27;To&#x27;</span>] = Header(<span class="string">&quot;用户&quot;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        message[<span class="string">&#x27;Subject&#x27;</span>] = Header(subject, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 添加邮件正文</span></span><br><span class="line">        message.attach(MIMEText(content, <span class="string">&#x27;plain&#x27;</span>, <span class="string">&#x27;utf-8&#x27;</span>))</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 添加附件</span></span><br><span class="line">        <span class="keyword">with</span> <span class="built_in">open</span>(attachment_path, <span class="string">&#x27;rb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">            attachment = MIMEText(f.read(), <span class="string">&#x27;base64&#x27;</span>, <span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">            attachment[<span class="string">&#x27;Content-Type&#x27;</span>] = <span class="string">&#x27;application/octet-stream&#x27;</span></span><br><span class="line">            attachment[<span class="string">&#x27;Content-Disposition&#x27;</span>] = <span class="string">f&#x27;attachment; filename=&quot;<span class="subst">&#123;attachment_path.split(<span class="string">&quot;/&quot;</span>)[-<span class="number">1</span>]&#125;</span>&quot;&#x27;</span></span><br><span class="line">            message.attach(attachment)</span><br><span class="line">        </span><br><span class="line">        <span class="comment"># 发送邮件代码...</span></span><br><span class="line">        <span class="comment"># ...</span></span><br><span class="line">        </span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;邮件发送失败: <span class="subst">&#123;<span class="built_in">str</span>(e)&#125;</span>&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br></pre></td></tr></table></figure><h2 id="故障排除"><a href="#故障排除" class="headerlink" title="故障排除"></a>故障排除</h2><h3 id="常见问题及解决方案"><a href="#常见问题及解决方案" class="headerlink" title="常见问题及解决方案"></a>常见问题及解决方案</h3><ol><li><p><strong>SMTP 服务器连接失败</strong></p><ul><li>检查网络连接</li><li>确认 SMTP 服务器地址和端口是否正确</li><li>检查防火墙设置</li></ul></li><li><p><strong>认证失败</strong></p><ul><li>确认使用的是授权码而不是邮箱密码</li><li>确认授权码是否正确</li><li>检查邮箱账号是否被锁定</li></ul></li><li><p><strong>邮件被标记为垃圾邮件</strong></p><ul><li>优化邮件内容，避免使用垃圾邮件关键词</li><li>确保发件人信息完整</li><li>定期清理邮件发送记录</li></ul></li><li><p><strong>邮件发送延迟</strong></p><ul><li>检查网络状况</li><li>避免频繁发送邮件</li><li>考虑使用邮件队列</li></ul></li></ol><h2 id="最佳实践"><a href="#最佳实践" class="headerlink" title="最佳实践"></a>最佳实践</h2><ol><li><strong>合理设置邮件发送频率</strong>：避免频繁发送邮件，以免被邮箱服务提供商限制</li><li><strong>邮件内容简洁明了</strong>：重点突出，便于在手机上快速查看</li><li><strong>设置邮件主题前缀</strong>：如 “[QMT]”，便于识别和过滤</li><li><strong>定期测试邮件功能</strong>：确保在需要时能正常发送</li><li><strong>使用环境变量存储敏感信息</strong>：避免在代码中硬编码邮箱密码和授权码</li></ol><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>通过 Python 的 SMTP 模块，我们可以轻松实现 QMT 与手机的邮件通信，及时获取交易信号和系统状态。本文介绍了从邮箱设置到代码实现的完整流程，以及在 QMT 策略中的集成方法。</p><p>希望这篇文章对您有所帮助！如果您有任何问题或建议，欢迎在评论区留言。</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;QMT-邮件推送的重要性&quot;&gt;&lt;a href=&quot;#QMT-邮件推送的重要性&quot; class=&quot;headerlink&quot; title=&quot;QMT 邮件推送的重要性&quot;&gt;&lt;/a&gt;QMT 邮件推送的重要性&lt;/h2&gt;&lt;p&gt;在使用 QMT</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="邮件推送" scheme="https://invest.wtsolutions.cn/tags/%E9%82%AE%E4%BB%B6%E6%8E%A8%E9%80%81/"/>
    
    <category term="python" scheme="https://invest.wtsolutions.cn/tags/python/"/>
    
    <category term="smtp" scheme="https://invest.wtsolutions.cn/tags/smtp/"/>
    
    <category term="手机通信" scheme="https://invest.wtsolutions.cn/tags/%E6%89%8B%E6%9C%BA%E9%80%9A%E4%BF%A1/"/>
    
  </entry>
  
  <entry>
    <title>Wise 账户名称修改指南 - 如何将中文名改为拼音</title>
    <link href="https://invest.wtsolutions.cn/posts/wise-change-name-to-pinyin/"/>
    <id>https://invest.wtsolutions.cn/posts/wise-change-name-to-pinyin/</id>
    <published>2026-04-07T02:00:00.000Z</published>
    <updated>2026-04-07T03:12:28.724Z</updated>
    
    <content type="html"><![CDATA[<h2 id="为什么需要修改-Wise-账户名称为拼音？"><a href="#为什么需要修改-Wise-账户名称为拼音？" class="headerlink" title="为什么需要修改 Wise 账户名称为拼音？"></a>为什么需要修改 Wise 账户名称为拼音？</h2><p>在使用中国身份证开设 Wise 账户时，系统会默认使用中文姓名。然而，在某些情况下，使用拼音名称可能会更方便：</p><ul><li><strong>避免系统兼容性问题</strong>：部分国际平台可能无法正确显示中文字符</li><li><strong>减少转账错误</strong>：使用拼音可以降低收款方系统识别错误的风险</li><li><strong>符合国际惯例</strong>：在国际金融交易中，拼音名称更符合标准格式</li><li><strong>与其他国际账户保持一致</strong>：如果您同时使用其他国际金融服务（如 IBKR 等），统一使用拼音名称可以减少混淆</li></ul><h2 id="如何修改-Wise-账户名称为拼音"><a href="#如何修改-Wise-账户名称为拼音" class="headerlink" title="如何修改 Wise 账户名称为拼音"></a>如何修改 Wise 账户名称为拼音</h2><h3 id="前提条件"><a href="#前提条件" class="headerlink" title="前提条件"></a>前提条件</h3><p>在修改账户名称之前，请确保：</p><ol><li>您已经完成了 Wise 账户的实名认证</li><li>您的账户状态正常，没有任何限制</li><li>您准备好<strong>护照</strong></li></ol><h3 id="修改步骤"><a href="#修改步骤" class="headerlink" title="修改步骤"></a>修改步骤</h3><ol><li>访问Wise APP</li><li>点击左上角的姓名和头像</li><li>找到“帮助”</li><li>点击最下方的联系我们</li><li>更新信息</li><li>选择其他</li><li>选择中文，然后电子邮件</li><li>说明情况：使用内地身份证开户，所以账户名称是中文名称，想要更改成拼音的名称。</li><li>邮件发送后，等待回复。</li><li>正常情况下会让你提供护照扫描件，你按照要求提供护照扫描件。</li><li>正常情况下等待1个工作日。</li></ol><h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h2><ol><li><strong>修改频率限制</strong>：Wise 可能对账户名称修改有频率限制，请谨慎操作</li><li><strong>信息一致性</strong>：修改后的拼音名称应与您的身份证、护照信息一致</li><li><strong>影响范围</strong>：修改账户名称可能会影响您的银行账户关联、转账记录等，请确保您了解相关影响</li><li><strong>其他信息</strong>：除了姓名外，确保您的其他个人信息（如地址、联系方式等）也是准确的</li></ol><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-修改姓名后，我的银行账户关联会受影响吗？"><a href="#Q-修改姓名后，我的银行账户关联会受影响吗？" class="headerlink" title="Q: 修改姓名后，我的银行账户关联会受影响吗？"></a>Q: 修改姓名后，我的银行账户关联会受影响吗？</h3><p>A: 可能会。如果您之前已经关联了银行账户，修改姓名后可能需要重新验证银行账户信息。 建议开启Wise账户后，就立刻开始准备修改名称为拼音。</p><h3 id="Q-可以多次修改账户名称吗？"><a href="#Q-可以多次修改账户名称吗？" class="headerlink" title="Q: 可以多次修改账户名称吗？"></a>Q: 可以多次修改账户名称吗？</h3><p>A: Wise 对账户名称修改有一定限制，建议在确认需要修改后再进行操作。</p><h3 id="Q-修改姓名需要付费吗？"><a href="#Q-修改姓名需要付费吗？" class="headerlink" title="Q: 修改姓名需要付费吗？"></a>Q: 修改姓名需要付费吗？</h3><p>A: 不需要，Wise 账户名称修改是免费的。</p><h3 id="Q-审核需要多长时间？"><a href="#Q-审核需要多长时间？" class="headerlink" title="Q: 审核需要多长时间？"></a>Q: 审核需要多长时间？</h3><p>A: 通常需要 1-3 个工作日，大概率是1个工作日就能完成。具体时间可能因个人情况而异。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>将 Wise 账户名称修改为拼音是一个简单但重要的操作，可以帮助您更顺利地使用国际金融服务。按照上述步骤操作，您可以轻松完成姓名修改，享受更便捷的跨境金融体验。</p><p>如果您在修改过程中遇到任何问题，可以联系 Wise 客服寻求帮助。</p><p>希望这篇指南对您有所帮助！如果您有其他关于 Wise 账户的问题，欢迎查看我们的其他相关文章。</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;为什么需要修改-Wise-账户名称为拼音？&quot;&gt;&lt;a href=&quot;#为什么需要修改-Wise-账户名称为拼音？&quot; class=&quot;headerlink&quot; title=&quot;为什么需要修改 Wise 账户名称为拼音？&quot;&gt;&lt;/a&gt;为什么需要修改 Wise</summary>
        
      
    
    
    
    <category term="wise" scheme="https://invest.wtsolutions.cn/categories/wise/"/>
    
    
    <category term="海外账户" scheme="https://invest.wtsolutions.cn/tags/%E6%B5%B7%E5%A4%96%E8%B4%A6%E6%88%B7/"/>
    
    <category term="Wise" scheme="https://invest.wtsolutions.cn/tags/Wise/"/>
    
    <category term="账户设置" scheme="https://invest.wtsolutions.cn/tags/%E8%B4%A6%E6%88%B7%E8%AE%BE%E7%BD%AE/"/>
    
    <category term="名称修改" scheme="https://invest.wtsolutions.cn/tags/%E5%90%8D%E7%A7%B0%E4%BF%AE%E6%94%B9/"/>
    
  </entry>
  
  <entry>
    <title>QMT 知识库 XtQuant知识库 使用文档 pdf</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-knowledge-base/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-knowledge-base/</id>
    <published>2026-02-05T02:26:06.000Z</published>
    <updated>2026-04-07T07:33:04.109Z</updated>
    
    <content type="html"><![CDATA[<p>今天分享下，讯投QMT和XtQuant知识库的使用文档。你可以前往他们的官方网站查看最新的文档。</p><p>本次分享是我在20260205，前往他们的官网一页一页查看，然后另存为pdf格式的技术文档。</p><p>PDF格式，比较方便的地方是，你进行全文档搜索，也比较方便投喂给AI人工智能，让AI帮你解决在QMT使用过程中遇到的问题，甚至可以让AI帮你根据文档写量化交易的python代码。参考：使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><p>下载链接1：我用夸克网盘分享了「QMT XtQuant知识库」，点击链接保存到你的网盘，以防丢失。<br>链接：<a href="https://pan.quark.cn/s/a68a9e9ce7d7">https://pan.quark.cn/s/a68a9e9ce7d7</a></p><p>下载链接2: <a href="https://pan.xunlei.com/s/VOkg0EFYiG0G-L-pBebz2tEcA1?pwd=vhbz#">https://pan.xunlei.com/s/VOkg0EFYiG0G-L-pBebz2tEcA1?pwd=vhbz#</a> 迅雷云盘。</p><p>这个文件夹里面有1个zip压缩包，分别是：</p><ul><li>QMT知识库完整版.pdf （包含了整个知识库的所有内容，可以全文档搜索）</li><li>XtQuant知识库完整版.pdf （包含了整个知识库的所有内容，可以全文档搜索）</li><li>[文件夹]QMT知识库 - 分章节版本（包含了QMT知识库的所有内容，但是每个章节都单独保存为一个pdf文件）</li><li>[文件夹]XtQuant知识库 - 分章节版本（包含了XtQuant知识库的所有内容，但是每个章节都单独保存为一个pdf文件）</li></ul><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;今天分享下，讯投QMT和XtQuant知识库的使用文档。你可以前往他们的官方网站查看最新的文档。&lt;/p&gt;
&lt;p&gt;本次分享是我在20260205，前往他们的官网一页一页查看，然后另存为pdf格式的技术文档。&lt;/p&gt;
&lt;p&gt;PDF格式，比较方便的地方是，你进行全文档搜索，也比较</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="知识库" scheme="https://invest.wtsolutions.cn/tags/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    
    <category term="技术文档" scheme="https://invest.wtsolutions.cn/tags/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT量化交易系统-如何正确安装Python库</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-install-python-lib/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-install-python-lib/</id>
    <published>2026-01-15T02:00:00.000Z</published>
    <updated>2026-01-15T11:19:57.605Z</updated>
    
    <content type="html"><![CDATA[<h2 id="迅投QMT中如何正确安装Python库"><a href="#迅投QMT中如何正确安装Python库" class="headerlink" title="迅投QMT中如何正确安装Python库"></a>迅投QMT中如何正确安装Python库</h2><p>在使用讯投QMT编写量化策略时，我们经常需要使用一些Python库来辅助开发。但是QMT的Python环境比较特殊，直接使用pip安装可能会遇到问题。下面介绍两种正确的安装方法：</p><h3 id="自带库"><a href="#自带库" class="headerlink" title="自带库"></a>自带库</h3><p>讯投自带了如下的Python库：</p><table><thead><tr><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>NumPy</td><td>NumPy (Numeric Python) 提供了许多高级的数值编程工具，如：矩阵数据类型、矢量处理，以及精密的运算库。专为进行严格的数字处理而产生。</td></tr><tr><td>Pandas</td><td>Python Data Analysis Library 或 Pandas 是基于 NumPy 的一种工具，该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型，提供了高效地操作大型数据集所需的工具。Pandas 提供了大量能使我们快速便捷地处理数据的函数和方法。</td></tr><tr><td>Patsy</td><td>一个线性模型分析和构建工具库。</td></tr><tr><td>SciPy</td><td>SciPy 函数库在 NumPy 库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。</td></tr><tr><td>Statsmodels</td><td>Python 的统计建模和计量经济学工具包，包括一些描述统计、统计模型估计和推断。</td></tr><tr><td>TA_Lib</td><td>称作技术分析库，是一种广泛用在程序化交易中进行金融市场数据的技术分析的函数库。它提供了多种技术分析的函数，可以大大方便我们量化投资中编程工作，内容包括：多种指标，如 ADX, MACD, RSI, 布林轨道等；K 线形态识别，如黄昏之星，锤形线等等。</td></tr></tbody></table><h3 id="手动安装没有自带的库"><a href="#手动安装没有自带的库" class="headerlink" title="手动安装没有自带的库"></a>手动安装没有自带的库</h3><p>第三方库导入指引</p><ol><li><p>除迅投提供的标准 Python api 和集成的部分第三方库，用户也可自己在 Python 官网下载其他所需第三方库，使用方式如下：</p><ul><li><p>本地安装Python环境，下载python3.6，Python官网：<a href="https://www.python.org/downloads/release/python-360/">https://www.python.org/downloads/release/python-360/</a></p></li><li><p>安装位置：C:\Python36</p></li></ul></li><li><p>​新增环境变量：我的电脑–属性–高级系统设置–高级–环境变量—path：C:\Python36;C:\Python36\Scripts</p></li><li><p>安装第三方库</p><p> ​ - 执行 pip 更新命令 python -m pip install –upgrade pip</p><p> ​ - 安装三方库命令 pip install openpyxl -t E:\QMT交易端20962\bin.x64\Lib\site-packages<br> （具体安装位置根据个人电脑进行调整）</p></li><li><p>检查安装结果</p><p> ​ - 安装位置\bin.x64\Lib\site-packages检查安装库</p></li></ol><h2 id="安装第三方-Python-库报错"><a href="#安装第三方-Python-库报错" class="headerlink" title="安装第三方 Python 库报错"></a>安装第三方 Python 库报错</h2><p>问题描述：</p><p>“ImportError:Forbidden:Moduleopenpyxl not in whitelist!”</p><p>问题解答：</p><p>该报错是由于券商后台开启了 Python 库白名单，若您使用的是券商提供的QMT终端，请联系您的所属券商开通对应 Python 库白名单权限即可。</p><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ul><li>确保安装的库版本与QMT内置的Python 3.6兼容</li><li>不要在QMT运行时安装库，安装完成后请重启QMT</li><li>一些复杂的库（如TensorFlow）可能无法在QMT环境中正常运行</li></ul><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;迅投QMT中如何正确安装Python库&quot;&gt;&lt;a href=&quot;#迅投QMT中如何正确安装Python库&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="Python库" scheme="https://invest.wtsolutions.cn/tags/Python%E5%BA%93/"/>
    
  </entry>
  
  <entry>
    <title>无需出国！用中国身份证开设海外多币种账户 - Wise 开户指南</title>
    <link href="https://invest.wtsolutions.cn/posts/wise-account-guide/"/>
    <id>https://invest.wtsolutions.cn/posts/wise-account-guide/</id>
    <published>2025-12-23T01:00:00.000Z</published>
    <updated>2025-12-23T01:50:44.792Z</updated>
    
    <content type="html"><![CDATA[<h2 id="为什么需要一个海外多币种账户？"><a href="#为什么需要一个海外多币种账户？" class="headerlink" title="为什么需要一个海外多币种账户？"></a>为什么需要一个海外多币种账户？</h2><p>在全球化的今天，越来越多的人需要进行跨境交易：</p><ul><li>海外购物、海淘</li><li>跨境电商收款</li><li>海外投资（美股、港股等）IBKR等</li><li>出国留学、旅游</li><li>向海外亲友汇款</li></ul><p>然而，对于大多数人来说，前往国外开设银行账户并不现实。那么，有没有办法在国内使用中国身份证就能开设一个支持多种外币的海外账户呢？</p><h2 id="Wise-账户：国内身份证即可开设的海外多币种账户"><a href="#Wise-账户：国内身份证即可开设的海外多币种账户" class="headerlink" title="Wise 账户：国内身份证即可开设的海外多币种账户"></a>Wise 账户：国内身份证即可开设的海外多币种账户</h2><p>答案是肯定的！<strong>Wise</strong>（原 TransferWise）就是一个非常不错的选择。作为一家全球知名的金融科技公司，Wise 允许中国大陆用户使用居民身份证直接开设海外多币种账户。</p><h3 id="Wise-账户的优势"><a href="#Wise-账户的优势" class="headerlink" title="Wise 账户的优势"></a>Wise 账户的优势</h3><ol><li><p><strong>支持多种货币</strong></p><ul><li>美元（USD）</li><li>欧元（EUR）</li><li>港币（HKD）</li><li>英镑（GBP）</li><li>澳元（AUD）</li><li>加元（CAD）</li><li>日元（JPY）</li><li>新加坡元（SGD）</li><li>以及其他 50+ 种货币</li></ul></li><li><p><strong>开户便捷</strong></p><ul><li>仅需中国身份证</li><li>在线完成，无需前往银行</li><li>几分钟即可完成开户</li></ul></li><li><p><strong>费用透明</strong></p><ul><li>无月度管理费</li><li>转账费用透明，提前知晓费用</li></ul></li><li><p><strong>功能丰富</strong></p><ul><li>接收外币转账（如 PayPal、亚马逊等平台收款）</li><li>向海外汇款</li><li>支持绑定国际支付平台</li></ul></li></ol><h3 id="Wise-账户开户流程"><a href="#Wise-账户开户流程" class="headerlink" title="Wise 账户开户流程"></a>Wise 账户开户流程</h3><ol><li><p><strong>访问 Wise 官网</strong></p><ul><li>官网：<a href="https://wise.com/invite/ahpc/f0epglc">https://wise.com/invite/ahpc/f0epglc</a></li></ul></li><li><p><strong>注册账户</strong></p><ul><li>填写个人基本信息（姓名、邮箱、电话）</li><li>设置登录密码</li></ul></li><li><p><strong>身份验证</strong></p><ul><li>选择 “中国大陆” 作为居住国家</li><li>上传中国身份证正反面照片</li><li>完成人脸识别验证（部分用户可能需要）</li></ul></li><li><p><strong>选择账户类型</strong></p><ul><li>选择 “个人” 账户</li><li>填写职业和收入来源</li></ul></li><li><p><strong>激活账户</strong></p><ul><li>等待审核通过（通常几分钟内完成）</li><li>审核通过后，即可开始使用多币种账户</li></ul></li></ol><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ol><li><p><strong>入金限制</strong></p><ul><li>内地账户暂不支持直接使用人民币入金</li><li>需要通过其他方式（如外币转账）向 Wise 账户充值</li></ul></li><li><p><strong>使用场景</strong></p><ul><li>适合小额跨境交易</li><li>不适合大额资金存放</li><li>主要用于收款和付款，而非长期储蓄</li></ul></li><li><p><strong>费用说明</strong></p><ul><li>转账费用根据金额和币种而定</li><li>汇率采用中间汇率，无隐藏费用</li></ul></li></ol><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>如果你需要一个临时的海外账户进行收款付款，无法前往国外开户，那么 Wise 账户是一个非常不错的选择。仅需中国身份证，即可开设一个支持多种外币的海外账户，方便进行各种跨境交易。</p><p>无论是跨境电商收款、海外投资，还是出国留学、旅游，Wise 账户都能满足你的需求。其便捷的开户流程、透明的费用结构和丰富的功能，使其成为越来越多国内用户的选择。</p><p>如果你有跨境支付需求，不妨考虑开设一个 Wise 账户，体验便捷的全球金融服务！</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;为什么需要一个海外多币种账户？&quot;&gt;&lt;a href=&quot;#为什么需要一个海外多币种账户？&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="wise" scheme="https://invest.wtsolutions.cn/categories/wise/"/>
    
    
    <category term="海外账户" scheme="https://invest.wtsolutions.cn/tags/%E6%B5%B7%E5%A4%96%E8%B4%A6%E6%88%B7/"/>
    
    <category term="Wise" scheme="https://invest.wtsolutions.cn/tags/Wise/"/>
    
    <category term="跨境支付" scheme="https://invest.wtsolutions.cn/tags/%E8%B7%A8%E5%A2%83%E6%94%AF%E4%BB%98/"/>
    
    <category term="多币种" scheme="https://invest.wtsolutions.cn/tags/%E5%A4%9A%E5%B8%81%E7%A7%8D/"/>
    
  </entry>
  
  <entry>
    <title>讯投QMT使用小技巧: 公共代码的编写与引用</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-shared-code/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-shared-code/</id>
    <published>2025-12-17T02:28:06.000Z</published>
    <updated>2025-12-17T09:18:27.920Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>在量化交易策略开发过程中，特别是使用讯投QMT平台时，我们经常会遇到多个策略需要使用相同函数或工具类的情况。如果每个策略都单独实现这些功能，不仅会导致代码冗余，还会增加维护成本——当需要修改某个功能时，必须在所有使用该功能的策略中逐一更新。</p><p>本文将详细介绍如何在 QMT 中，自行创建和使用共享公共代码库，实现函数的复用，提高开发效率和代码质量。</p><h2 id="共享公共代码的优势"><a href="#共享公共代码的优势" class="headerlink" title="共享公共代码的优势"></a>共享公共代码的优势</h2><h3 id="1-减少代码冗余"><a href="#1-减少代码冗余" class="headerlink" title="1. 减少代码冗余"></a>1. 减少代码冗余</h3><p>将多个策略中重复使用的代码（如数据处理函数、指标计算方法、风险控制模块等）提取到单独的共享文件中，可以显著减少代码总量，使策略代码更加简洁。</p><h3 id="2-提高维护效率"><a href="#2-提高维护效率" class="headerlink" title="2. 提高维护效率"></a>2. 提高维护效率</h3><p>当需要修改某个功能时，只需在共享文件中更新一次，所有引用该功能的策略都会自动使用最新版本，避免了遗漏和不一致。</p><h3 id="3-统一代码风格和逻辑"><a href="#3-统一代码风格和逻辑" class="headerlink" title="3. 统一代码风格和逻辑"></a>3. 统一代码风格和逻辑</h3><p>共享代码库可以确保所有策略使用相同的函数实现和逻辑，提高代码的一致性和可预测性。</p><h3 id="4-加速新策略开发"><a href="#4-加速新策略开发" class="headerlink" title="4. 加速新策略开发"></a>4. 加速新策略开发</h3><p>新策略可以直接引用已有的共享函数，无需从零开始编写常用功能，加快开发速度。</p><h2 id="实现共享代码的方法"><a href="#实现共享代码的方法" class="headerlink" title="实现共享代码的方法"></a>实现共享代码的方法</h2><h3 id="1-创建共享代码文件"><a href="#1-创建共享代码文件" class="headerlink" title="1. 创建共享代码文件"></a>1. 创建共享代码文件</h3><h4 id="步骤-1：确定共享代码目录"><a href="#步骤-1：确定共享代码目录" class="headerlink" title="步骤 1：确定共享代码目录"></a>步骤 1：确定共享代码目录</h4><p>在 QMT 的策略目录结构中，找到安装目录下面的<code>python</code>目录。这个目录也是所有策略存放的位置。</p><p>示例目录结构：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">QMT交易客户端/</span><br><span class="line">├── python/</span><br><span class="line">│   ├── __init__.py</span><br><span class="line">│   ├── utils.py        # 公共代码工具函数</span><br><span class="line">│   ├── strategy-1.py   # 策略实现</span><br><span class="line">│   └── strategy-2.py   # 策略实现</span><br></pre></td></tr></table></figure><h4 id="步骤-2：编写共享代码"><a href="#步骤-2：编写共享代码" class="headerlink" title="步骤 2：编写共享代码"></a>步骤 2：编写共享代码</h4><p>在共享目录中创建 Python 文件，并实现需要共享的函数。例如，在 <code>utils.py</code> 中实现数据处理函数：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># utils.py</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">sayHello</span>():</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;Hello, QMT!&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">read_db</span>(<span class="params">data</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    从数据库读取数据</span></span><br><span class="line"><span class="string">    </span></span><br><span class="line"><span class="string">    参数：</span></span><br><span class="line"><span class="string">    data: str，数据库查询语句</span></span><br><span class="line"><span class="string">    </span></span><br><span class="line"><span class="string">    返回：</span></span><br><span class="line"><span class="string">    pd.DataFrame，查询结果</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line">    <span class="comment"># 假设 db_connection 是已建立的数据库连接对象</span></span><br><span class="line">    <span class="keyword">return</span> pd.read_sql(data, db_connection)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="2-在策略中引用共享代码"><a href="#2-在策略中引用共享代码" class="headerlink" title="2. 在策略中引用共享代码"></a>2. 在策略中引用共享代码</h3><h4 id="使用相对导入"><a href="#使用相对导入" class="headerlink" title="使用相对导入"></a>使用相对导入</h4><p>本方法中，策略文件和共享代码文件，在同一个文件夹<code>python</code>中。可以使用相对导入：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># strategy3.py</span></span><br><span class="line"><span class="keyword">from</span> utils <span class="keyword">import</span> sayHello</span><br><span class="line"><span class="keyword">from</span> utils <span class="keyword">import</span> read_db</span><br><span class="line"></span><br><span class="line"><span class="comment"># 策略逻辑...</span></span><br></pre></td></tr></table></figure><h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h2><h3 id="1-QMT-特定环境考虑"><a href="#1-QMT-特定环境考虑" class="headerlink" title="1. QMT 特定环境考虑"></a>1. QMT 特定环境考虑</h3><p>在 QMT 平台中使用共享代码时，需要注意：</p><ul><li>确保共享目录在 QMT 的 Python 路径中</li><li>了解 QMT 的策略执行环境，避免使用平台不支持的模块或功能</li><li>注意策略之间的独立性，避免共享状态导致的策略相互影响</li></ul><h3 id="2-性能考虑"><a href="#2-性能考虑" class="headerlink" title="2. 性能考虑"></a>2. 性能考虑</h3><p>虽然共享代码可以提高开发效率，但也要注意性能问题：</p><ul><li>避免在高频策略中使用过于复杂的共享函数</li><li>对于计算密集型的共享函数，可以考虑使用更高效的实现方式（如使用 NumPy 代替纯 Python）</li></ul><h3 id="3-安全性考虑"><a href="#3-安全性考虑" class="headerlink" title="3. 安全性考虑"></a>3. 安全性考虑</h3><ul><li>不要在共享代码中硬编码敏感信息（如 API 密钥、账户信息等）</li><li>对共享代码进行适当的权限控制，避免未经授权的修改</li></ul><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>在 QMT 策略开发中，合理使用共享代码可以显著提高开发效率和代码质量。通过创建专门的共享代码目录，将常用函数和类进行封装，并在策略中正确引用，我们可以实现代码的复用和统一管理。同时，遵循最佳实践和注意事项，可以确保共享代码的可靠性、性能和安全性。</p><p>采用本文介绍的方法，您可以构建一个高效、可维护的策略开发环境，让量化交易策略的开发和维护变得更加轻松。</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;概述&quot;&gt;&lt;a href=&quot;#概述&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="策略" scheme="https://invest.wtsolutions.cn/tags/%E7%AD%96%E7%95%A5/"/>
    
    <category term="公共代码" scheme="https://invest.wtsolutions.cn/tags/%E5%85%AC%E5%85%B1%E4%BB%A3%E7%A0%81/"/>
    
  </entry>
  
  <entry>
    <title>讯投QMT使用小技巧: trade client not found 无法找到trade client</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-trade-client-not-found/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-trade-client-not-found/</id>
    <published>2025-12-11T02:41:06.000Z</published>
    <updated>2025-12-17T04:36:21.314Z</updated>
    
    <content type="html"><![CDATA[<p>在QMT使用的过程中，我们有时会收到报错，trade client not found 无法找到trade client，我之前遇到这个情况的时候，qmt连续24小时运行，然后第二天的时候，会出现这类报错，导致qmt无法正常运行。</p><p>我目前没有找到非常有效的解决方案，我能做的就是， 在手机上收到报错提醒的时候，立刻人为干预，重新启动qmt，就可以正常运行了。我另外还做了尝试就是联系券商，让他们给我发一个最新版本的qmt安装程序，使用最新的版本，目前看这个问题在安装新版本之后解决了，但我也不确定是不是因为这个原因，但我会建议大家做一下这些尝试，看看有没有解决。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a><br>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;在QMT使用的过程中，我们有时会收到报错，trade client not found 无法找到trade</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="报错" scheme="https://invest.wtsolutions.cn/tags/%E6%8A%A5%E9%94%99/"/>
    
  </entry>
  
  <entry>
    <title>讯投QMT使用小技巧: 运行在云服务器时如何加密保护策略代码</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-strategy-code-protection/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-strategy-code-protection/</id>
    <published>2025-12-11T02:28:06.000Z</published>
    <updated>2025-12-17T04:36:04.854Z</updated>
    
    <content type="html"><![CDATA[<p>随着量化交易的普及，越来越多的投资者选择将讯投QMT的量化策略部署在云服务器上运行（有的券商支持，有的券商不支持）。这种方式不仅可以保证策略的24小时稳定运行，还能利用云服务器的高性能资源。然而，随之而来的一个重要问题是：如何保护自己辛苦编写的策略代码不被他人窃取或查看？</p><p>策略代码往往包含了投资者的核心交易思想和盈利逻辑，一旦泄露可能造成不可估量的损失。本文将介绍几种保护云服务器上QMT策略代码的有效方法，帮助您在享受云服务便利的同时，保障策略的安全性。</p><h2 id="代码加密保护"><a href="#代码加密保护" class="headerlink" title="代码加密保护"></a>代码加密保护</h2><p>代码加密是保护策略最直接有效的方法之一。通过加密处理，可以将可读的源代码转换为难以理解的形式，即使他人获得了文件，也无法轻易解读其中的逻辑。</p><h3 id="1-Python代码加密"><a href="#1-Python代码加密" class="headerlink" title="1. Python代码加密"></a>1. Python代码加密</h3><p>QMT的策略主要使用Python编写，我们可以使用以下工具对Python代码进行加密：</p><h4 id="PyInstaller打包加密"><a href="#PyInstaller打包加密" class="headerlink" title="PyInstaller打包加密"></a>PyInstaller打包加密</h4><p>PyInstaller可以将Python代码打包成可执行文件，隐藏原始代码：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装PyInstaller</span></span><br><span class="line">pip install pyinstaller</span><br><span class="line"></span><br><span class="line"><span class="comment"># 将策略文件打包成单文件可执行程序</span></span><br><span class="line">pyinstaller --onefile your_strategy.py</span><br></pre></td></tr></table></figure><p>打包完成后，会在dist目录下生成可执行文件，原始的.py代码不会被包含在其中。</p><h3 id="2-Python代码混淆"><a href="#2-Python代码混淆" class="headerlink" title="2. Python代码混淆"></a>2. Python代码混淆</h3><p>Python代码混淆工具可以将代码中的变量名、函数名等进行随机重命名，使代码难以理解，但这种方式并不是完全的安全，仅能提高阅读的难度。常用的混淆工具有：</p><ul><li>PyArmor</li><li>PyConfuse</li><li>PyObfuscate</li></ul><p>您可以根据自己的需求选择合适的工具进行混淆。</p><h3 id="3-QMT自带的策略加密功能"><a href="#3-QMT自带的策略加密功能" class="headerlink" title="3. QMT自带的策略加密功能"></a>3. QMT自带的策略加密功能</h3><p>部分版本的QMT提供了自带的策略加密功能，您可以在策略编辑界面中查找相关选项。使用官方提供的加密功能，通常可以更好地保证兼容性。</p><p>​</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a><br>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;随着量化交易的普及，越来越多的投资者选择将讯投QMT的量化策略部署在云服务器上运行（有的券商支持，有的券商不支持）。这种方式不仅可以保证策略的24小时稳定运行，还能利用云服务器的高性能资源。然而，随之而来的一个重要问题是：如何保护自己辛苦编写的策略代码不被他人窃取或查看？&lt;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="策略" scheme="https://invest.wtsolutions.cn/tags/%E7%AD%96%E7%95%A5/"/>
    
    <category term="加密" scheme="https://invest.wtsolutions.cn/tags/%E5%8A%A0%E5%AF%86/"/>
    
  </entry>
  
  <entry>
    <title>讯投QMT使用小技巧: account未定义 account not defined</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-account-not-defined/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-account-not-defined/</id>
    <published>2025-12-11T02:18:06.000Z</published>
    <updated>2025-12-17T04:35:00.183Z</updated>
    
    <content type="html"><![CDATA[<p>最近有朋友问我，为什么在使用QMT自带的一些策略进行回测或时候，会提示错误，比如account未定义，account未找到或者account not defined。</p><p>通常提出这些问题的朋友都是QMT刚刚入门的，对代码还并不熟悉。</p><p>以迅投QMT自带策略-双均线实盘示例PY策略为例，代码部分（节选）中：</p><p>#encoding:gbk<br>import pandas as pd<br>import numpy as np<br>import datetime</p><p>“””<br>示例说明：双均线实盘策略，通过计算快慢双均线，在金叉时买入，死叉时做卖出<br>“””</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">a</span>():</span><br><span class="line"><span class="keyword">pass</span></span><br><span class="line">A = a() <span class="comment">#创建空的类的实例 用来保存委托状态 </span></span><br><span class="line"><span class="comment">#ContextInfo对象在盘中每次handlebar调用前都会被深拷贝, 如果调用handlebar的分笔不是k线最后分笔 ContextInfo会被回退到深拷贝的内容 所以ContextInfo不能用来记录快速交易的信号</span></span><br><span class="line"> </span><br><span class="line"><span class="keyword">def</span> <span class="title function_">init</span>(<span class="params">C</span>):</span><br><span class="line">A.stock= C.stockcode + <span class="string">&#x27;.&#x27;</span> + C.market <span class="comment">#品种为模型交易界面选择品种</span></span><br><span class="line">A.acct= account <span class="comment">#账号为模型交易界面选择账号</span></span><br></pre></td></tr></table></figure><p>​<br>其中:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">A.acct = account</span><br></pre></td></tr></table></figure><p>出错就是在这一行。</p><p>account对于系统来说是没有定义的，不知道account具体是多少，所以系统会报错。</p><p>此处的account应该是你登录QMT软件的账号，你可以手动的把 account修改成你的实际账户，有的券商是纯数字，有的可能是带字母的，以券商提供给你的账户账号为准。</p><p>比如你的账户是888666333，那么你需要把account修改成带英文双引号的”888666333”，这样就可以了，修改后保存开启回测了。</p><p>​</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;最近有朋友问我，为什么在使用QMT自带的一些策略进行回测或时候，会提示错误，比如account未定义，account未找到或者account not</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="报错" scheme="https://invest.wtsolutions.cn/tags/%E6%8A%A5%E9%94%99/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT量化交易系统-开通量化交易系统账户</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-account-open/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-account-open/</id>
    <published>2025-12-10T02:36:06.000Z</published>
    <updated>2025-12-17T04:33:23.136Z</updated>
    
    <content type="html"><![CDATA[<h2 id="迅投QMT-开户-量化交易系统账户"><a href="#迅投QMT-开户-量化交易系统账户" class="headerlink" title="迅投QMT-开户-量化交易系统账户"></a>迅投QMT-开户-量化交易系统账户</h2><p>讯投QMT是一个量化交易系统，它提供了一个平台，让用户（比如散户）可以在上面进行量化交易&#x2F;程序化交易。</p><p>有一些证券公司的开户门槛很低，比如账户有十万元（可以先转入，开通qmt之后再转出），就可以开通讯投QMT的量化交易系统账户，他们也可以提供较低的佣金的证券账户（几乎是全市场最低的佣金）。如果有需要，可以通过下方微信与我联系。</p><h3 id="佣金"><a href="#佣金" class="headerlink" title="佣金"></a>佣金</h3><ul><li>股票 万0.854</li><li>两融 4%～5%</li><li>场内基金 万0.5</li><li>可转债 万0.5</li><li>港股通 万0.854</li><li>北交所 万3</li><li>国债逆回购 一折</li><li>期权 2元一张</li></ul><h3 id="开户福利"><a href="#开户福利" class="headerlink" title="开户福利"></a>开户福利</h3><ul><li>开户享受 6.66%利率理财</li><li>20万送level2行情</li><li>10万可开通讯投qmt，ptrade</li><li>19.30开启夜市委托</li></ul><h3 id="量化"><a href="#量化" class="headerlink" title="量化"></a>量化</h3><ul><li>大QMT，mini QMT， 恒生ptrade</li></ul><p>如果有需要，可以通过下方微信与我联系。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;迅投QMT-开户-量化交易系统账户&quot;&gt;&lt;a href=&quot;#迅投QMT-开户-量化交易系统账户&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="开通账户" scheme="https://invest.wtsolutions.cn/tags/%E5%BC%80%E9%80%9A%E8%B4%A6%E6%88%B7/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT量化交易系统-登录问题-无法登陆</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-can-not-login/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-can-not-login/</id>
    <published>2025-12-10T02:26:06.000Z</published>
    <updated>2025-12-17T04:35:07.032Z</updated>
    
    <content type="html"><![CDATA[<h2 id="迅投QMT登陆问题-无法登陆"><a href="#迅投QMT登陆问题-无法登陆" class="headerlink" title="迅投QMT登陆问题-无法登陆"></a>迅投QMT登陆问题-无法登陆</h2><p>如果你在登陆讯投QMT的时候，发现无法登陆。</p><p>首先我们要重新尝试登陆，确认账号密码是否正确。</p><p>如果确认账号密码正确，但是仍然无法登陆，那么很可能是因为你是在周五收盘后、周六、周日尝试进行登陆的。很多的证券公司，他们会在这个时间段进行系统测试，导致系统无法正常登陆。可以等待到周日晚一点时间或者周一尝试登陆。针对这这种情况，有一个解决办法，只要你电脑设备能一直开机，QMT一直处于打开且保持登陆的状态，那么QMT软件就一直可以使用的，这样你就可以在周末的时候进行回测，改策略等等。</p><p>如果还是不行，则需要联系自己的客户经理反馈问题了。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;迅投QMT登陆问题-无法登陆&quot;&gt;&lt;a href=&quot;#迅投QMT登陆问题-无法登陆&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="登录问题" scheme="https://invest.wtsolutions.cn/tags/%E7%99%BB%E5%BD%95%E9%97%AE%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>讯投 QMT 使用小技巧：判断当前时段是交易/非交易/竞价/盘后等时间段</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-is-now-a-trading-hour/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-is-now-a-trading-hour/</id>
    <published>2025-04-02T15:26:06.000Z</published>
    <updated>2025-12-17T04:35:19.739Z</updated>
    
    <content type="html"><![CDATA[<h2 id="A股的交易时间段"><a href="#A股的交易时间段" class="headerlink" title="A股的交易时间段"></a>A股的交易时间段</h2><p>A股的交易时段分为<strong>开盘集合竞价、连续竞价（早盘、午盘）和收盘集合竞价</strong>三个阶段，具体时间如下：</p><h2 id="1-交易日安排"><a href="#1-交易日安排" class="headerlink" title="1. 交易日安排"></a><strong>1. 交易日安排</strong></h2><ul><li><strong>周一至周五</strong>（法定节假日除外）</li><li><strong>不交易</strong>：周末（周六、周日）和法定节假日（如春节、国庆节等）。</li></ul><hr><h2 id="2-交易时段明细"><a href="#2-交易时段明细" class="headerlink" title="2. 交易时段明细"></a><strong>2. 交易时段明细</strong></h2><table><thead><tr><th>时段</th><th>时间</th><th>备注</th></tr></thead><tbody><tr><td><strong>开盘集合竞价</strong></td><td>9:15 - 9:25</td><td>- 9:15-9:20：可<strong>申报或撤单</strong>。<br>- 9:20-9:25：可<strong>申报，不可撤单</strong>。</td></tr><tr><td><strong>早盘连续竞价</strong></td><td>9:30 - 11:30</td><td>正常交易时段，可自由买卖。</td></tr><tr><td><strong>午间休市</strong></td><td>11:30 - 13:00</td><td>不接受委托，未成交的订单仍有效。</td></tr><tr><td><strong>午盘连续竞价</strong></td><td>13:00 - 14:57</td><td>正常交易时段。</td></tr><tr><td><strong>收盘集合竞价</strong></td><td>14:57 - 15:00</td><td>可<strong>申报，不可撤单</strong>，以最大成交量撮合收盘价。</td></tr></tbody></table><hr><h2 id="3-其他规则"><a href="#3-其他规则" class="headerlink" title="3. 其他规则"></a><strong>3. 其他规则</strong></h2><ul><li><strong>科创板（688开头） &amp; 创业板（300开头）</strong>：  <ul><li>新增<strong>盘后固定价格交易</strong>（15:05-15:30），按当日收盘价成交（需手动挂单）。</li></ul></li><li><strong>大宗交易</strong>：  <ul><li>通常为15:00-15:30，需满足最低交易数量或金额门槛。</li></ul></li></ul><h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a><strong>注意事项</strong></h2><ul><li><strong>非交易时段</strong>（如夜间）的委托单会被暂存，次日9:15进入系统。</li><li><strong>集合竞价</strong>的成交价格遵循“最大成交量”原则，所有交易按同一价格成交。</li></ul><h2 id="QMT中的函数判断"><a href="#QMT中的函数判断" class="headerlink" title="QMT中的函数判断"></a>QMT中的函数判断</h2><p>以下是一个 Python 函数，用于判断当前时间属于 A 股的哪个交易时段（包括科创板和创业板的盘后交易），如果不是交易时段则返回 <strong>“非交易时段”</strong>：  </p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> datetime</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_a_share_trading_period</span>():</span><br><span class="line">    now = datetime.datetime.now()</span><br><span class="line">    current_time = now.time()</span><br><span class="line">    weekday = now.weekday()  <span class="comment"># 0-4 是周一到周五</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 检查是否为交易日（周一至周五，非节假日）</span></span><br><span class="line">    <span class="keyword">if</span> weekday &gt;= <span class="number">5</span>:  <span class="comment"># 周六、周日</span></span><br><span class="line">        <span class="keyword">return</span> <span class="string">&quot;非交易时段（周末休市）&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 定义交易时段</span></span><br><span class="line">    trading_periods = [</span><br><span class="line">        &#123;<span class="string">&quot;name&quot;</span>: <span class="string">&quot;开盘集合竞价&quot;</span>, <span class="string">&quot;start&quot;</span>: <span class="string">&quot;09:15:00&quot;</span>, <span class="string">&quot;end&quot;</span>: <span class="string">&quot;09:25:00&quot;</span>, <span class="string">&quot;can_cancel&quot;</span>: <span class="literal">True</span>&#125;,</span><br><span class="line">        &#123;<span class="string">&quot;name&quot;</span>: <span class="string">&quot;早盘连续竞价&quot;</span>, <span class="string">&quot;start&quot;</span>: <span class="string">&quot;09:30:00&quot;</span>, <span class="string">&quot;end&quot;</span>: <span class="string">&quot;11:30:00&quot;</span>, <span class="string">&quot;can_cancel&quot;</span>: <span class="literal">True</span>&#125;,</span><br><span class="line">        &#123;<span class="string">&quot;name&quot;</span>: <span class="string">&quot;午间休市&quot;</span>, <span class="string">&quot;start&quot;</span>: <span class="string">&quot;11:30:00&quot;</span>, <span class="string">&quot;end&quot;</span>: <span class="string">&quot;13:00:00&quot;</span>, <span class="string">&quot;can_cancel&quot;</span>: <span class="literal">False</span>&#125;,</span><br><span class="line">        &#123;<span class="string">&quot;name&quot;</span>: <span class="string">&quot;午盘连续竞价&quot;</span>, <span class="string">&quot;start&quot;</span>: <span class="string">&quot;13:00:00&quot;</span>, <span class="string">&quot;end&quot;</span>: <span class="string">&quot;14:57:00&quot;</span>, <span class="string">&quot;can_cancel&quot;</span>: <span class="literal">True</span>&#125;,</span><br><span class="line">        &#123;<span class="string">&quot;name&quot;</span>: <span class="string">&quot;收盘集合竞价&quot;</span>, <span class="string">&quot;start&quot;</span>: <span class="string">&quot;14:57:00&quot;</span>, <span class="string">&quot;end&quot;</span>: <span class="string">&quot;15:00:00&quot;</span>, <span class="string">&quot;can_cancel&quot;</span>: <span class="literal">False</span>&#125;,</span><br><span class="line">    ]</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 科创板和创业板的盘后交易（15:05-15:30）</span></span><br><span class="line">    kechuang_cyb_period = &#123;<span class="string">&quot;name&quot;</span>: <span class="string">&quot;科创/创业板盘后交易&quot;</span>, <span class="string">&quot;start&quot;</span>: <span class="string">&quot;15:05:00&quot;</span>, <span class="string">&quot;end&quot;</span>: <span class="string">&quot;15:30:00&quot;</span>, <span class="string">&quot;can_cancel&quot;</span>: <span class="literal">False</span>&#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 检查当前是否在交易时段</span></span><br><span class="line">    <span class="keyword">for</span> period <span class="keyword">in</span> trading_periods:</span><br><span class="line">        start_time = datetime.datetime.strptime(period[<span class="string">&quot;start&quot;</span>], <span class="string">&quot;%H:%M:%S&quot;</span>).time()</span><br><span class="line">        end_time = datetime.datetime.strptime(period[<span class="string">&quot;end&quot;</span>], <span class="string">&quot;%H:%M:%S&quot;</span>).time()</span><br><span class="line">        <span class="keyword">if</span> start_time &lt;= current_time &lt;= end_time:</span><br><span class="line">            <span class="keyword">return</span> <span class="string">f&quot;<span class="subst">&#123;period[<span class="string">&#x27;name&#x27;</span>]&#125;</span>（可撤单: <span class="subst">&#123;<span class="string">&#x27;是&#x27;</span> <span class="keyword">if</span> period[<span class="string">&#x27;can_cancel&#x27;</span>] <span class="keyword">else</span> <span class="string">&#x27;否&#x27;</span>&#125;</span>）&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 检查是否在科创/创业板盘后交易时段</span></span><br><span class="line">    kechuang_start = datetime.datetime.strptime(kechuang_cyb_period[<span class="string">&quot;start&quot;</span>], <span class="string">&quot;%H:%M:%S&quot;</span>).time()</span><br><span class="line">    kechuang_end = datetime.datetime.strptime(kechuang_cyb_period[<span class="string">&quot;end&quot;</span>], <span class="string">&quot;%H:%M:%S&quot;</span>).time()</span><br><span class="line">    <span class="keyword">if</span> kechuang_start &lt;= current_time &lt;= kechuang_end:</span><br><span class="line">        <span class="keyword">return</span> <span class="string">f&quot;<span class="subst">&#123;kechuang_cyb_period[<span class="string">&#x27;name&#x27;</span>]&#125;</span>（按收盘价交易，不可撤单）&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 不在任何交易时段</span></span><br><span class="line">    <span class="keyword">return</span> <span class="string">&quot;非交易时段&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试</span></span><br><span class="line"><span class="built_in">print</span>(get_a_share_trading_period())</span><br></pre></td></tr></table></figure><h3 id="输出示例"><a href="#输出示例" class="headerlink" title="输出示例"></a><strong>输出示例</strong></h3><ul><li>如果当前时间是 <strong>09:20:00</strong>，返回：<br><code>开盘集合竞价（可撤单: 是）</code>  </li><li>如果当前时间是 <strong>12:30:00</strong>，返回：<br><code>午间休市（可撤单: 否）</code>  </li><li>如果当前时间是 <strong>15:15:00</strong>，返回：<br><code>科创/创业板盘后交易（按收盘价交易，不可撤单）</code>  </li><li>如果当前时间是 <strong>16:00:00</strong> 或周末，返回：<br><code>非交易时段</code></li></ul><h3 id="功能说明"><a href="#功能说明" class="headerlink" title="功能说明"></a><strong>功能说明</strong></h3><ol><li><strong>判断交易日</strong>：仅周一到周五有效，周末返回非交易时段。  </li><li><strong>标准交易时段</strong>：包括集合竞价、连续竞价和收盘竞价。  </li><li><strong>科创&#x2F;创业板盘后交易</strong>：15:05-15:30 额外判断。  </li><li><strong>撤单规则</strong>：集合竞价部分时段不可撤单（如 9:20-9:25）。</li></ol><p>如果需要进一步扩展（如节假日判断），当天是不是交易日，请阅读我们提供的另外一个讯投qmt使用小技巧： 如何判断今天是不是交易日 <a href="qmt-is-today-a-trading-day.md">开始阅读</a>。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a><br>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;A股的交易时间段&quot;&gt;&lt;a href=&quot;#A股的交易时间段&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="交易时段" scheme="https://invest.wtsolutions.cn/tags/%E4%BA%A4%E6%98%93%E6%97%B6%E6%AE%B5/"/>
    
  </entry>
  
  <entry>
    <title>讯投 QMT 使用小技巧 -如何判断今天是不是交易日</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-is-today-a-trading-day/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-is-today-a-trading-day/</id>
    <published>2025-04-02T14:26:06.000Z</published>
    <updated>2025-12-26T04:00:23.287Z</updated>
    
    <content type="html"><![CDATA[<p>在讯投QMT中判断今天是否为交易日</p><p>在讯投QMT平台中，你可以通过以下几种方法来判断当天是否为交易日：</p><h2 id="方法一：使用ContextInfo-get-trading-dates-函数"><a href="#方法一：使用ContextInfo-get-trading-dates-函数" class="headerlink" title="方法一：使用ContextInfo.get_trading_dates()函数"></a>方法一：使用ContextInfo.get_trading_dates()函数</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">is_trading_day</span>():</span><br><span class="line">    <span class="comment"># 获取最近一段时间的交易日历</span></span><br><span class="line">    trading_dates = ContextInfo.get_trading_dates(<span class="string">&#x27;SH&#x27;</span>, <span class="number">0</span>, <span class="number">10</span>)  <span class="comment"># 获取从今天开始的10个交易日</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 获取当前日期</span></span><br><span class="line">    today = datetime.datetime.now().strftime(<span class="string">&#x27;%Y%m%d&#x27;</span>)</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 判断今天是否在交易日列表中</span></span><br><span class="line">    <span class="keyword">return</span> today <span class="keyword">in</span> trading_dates</span><br></pre></td></tr></table></figure><h2 id="方法二：使用xtdata模块（如果可用）"><a href="#方法二：使用xtdata模块（如果可用）" class="headerlink" title="方法二：使用xtdata模块（如果可用）"></a>方法二：使用xtdata模块（如果可用）</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> xtdata</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">is_trading_day</span>():</span><br><span class="line">    <span class="comment"># 获取今天的日期</span></span><br><span class="line">    today = datetime.datetime.now().strftime(<span class="string">&#x27;%Y%m%d&#x27;</span>)</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 查询上证指数的交易日历</span></span><br><span class="line">    trading_dates = xtdata.get_trading_dates(<span class="string">&#x27;SH&#x27;</span>, today, today)</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">len</span>(trading_dates) &gt; <span class="number">0</span></span><br></pre></td></tr></table></figure><h2 id="方法三：使用系统时间函数"><a href="#方法三：使用系统时间函数" class="headerlink" title="方法三：使用系统时间函数"></a>方法三：使用系统时间函数</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">is_trading_day</span>():</span><br><span class="line">    <span class="comment"># 获取当前时间</span></span><br><span class="line">    now = datetime.datetime.now()</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 判断是否为工作日(周一到周五)</span></span><br><span class="line">    <span class="keyword">if</span> now.weekday() &gt;= <span class="number">5</span>:  <span class="comment"># 5=周六,6=周日</span></span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 进一步检查是否是节假日(需要维护节假日表)</span></span><br><span class="line">    <span class="comment"># 这里可以添加你的节假日判断逻辑</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="literal">True</span></span><br></pre></td></tr></table></figure><h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h2><ol><li>第一种方法是最可靠的，因为它直接从交易所获取交易日历</li><li>节假日需要特别处理，中国的节假日调休会导致非周末的工作日也可能不是交易日</li><li>建议在开盘前运行检查，因为有些函数在非交易时间可能返回不同结果</li><li>以上代码仅供参考，大家需要根据自己的实际情况判断这些代码是否满足自己的要求。</li></ol><p>你可以根据你的QMT版本和可用模块选择最适合的方法。第一种方法通常是首选，因为它直接查询交易所的交易日历。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>所有与QMT相关的文章<a href="https://invest.wtsolutions.cn/categories/qmt/">查看目录</a></p><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a><br>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;在讯投QMT中判断今天是否为交易日&lt;/p&gt;
&lt;p&gt;在讯投QMT平台中，你可以通过以下几种方法来判断当天是否为交易日：&lt;/p&gt;
&lt;h2 id=&quot;方法一：使用ContextInfo-get-trading-dates-函数&quot;&gt;&lt;a</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="交易日" scheme="https://invest.wtsolutions.cn/tags/%E4%BA%A4%E6%98%93%E6%97%A5/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT交易终端小技巧-为什么每天早晨QMT会退出登录/重新启动/自动初始化</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-restart-initialize/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-restart-initialize/</id>
    <published>2025-04-01T14:26:06.000Z</published>
    <updated>2025-12-17T04:35:43.472Z</updated>
    
    <content type="html"><![CDATA[<p>如果您的迅投QMT或者是券商QMT的交易终端，每天早晨8点9点会自动退出登录、自动重新启动或者自动初始化，通常是因为在<strong>系统设置</strong>里面，设置了在指定的时间自动初始化，如下图中的系统设置配置。</p><p><img src="/images/qmt_restart_settting.jpeg" alt="QMT系统设置界面-自动初始化设置"></p><p>如果我们不希望它自动初始化，就可以取消勾选这个选项。但，应确保在每个策略内，策略代码会把一些策略内的变量之类的，要每天初始化，以免当天交易的时候，还使用了上一个交易日的一些变量的数据。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;如果您的迅投QMT或者是券商QMT的交易终端，每天早晨8点9点会自动退出登录、自动重新启动或者自动初始化，通常是因为在&lt;strong&gt;系统设置&lt;/strong&gt;里面，设置了在指定的时间自动初始化，如下图中的系统设置配置。&lt;/p&gt;
&lt;p&gt;&lt;img</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="迅投" scheme="https://invest.wtsolutions.cn/tags/%E8%BF%85%E6%8A%95/"/>
    
    <category term="初始化" scheme="https://invest.wtsolutions.cn/tags/%E5%88%9D%E5%A7%8B%E5%8C%96/"/>
    
  </entry>
  
  <entry>
    <title>如何低成本选择讯投QMT 的服务器/电脑，低成本运行？</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-low-cost-ops/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-low-cost-ops/</id>
    <published>2025-03-27T14:26:06.000Z</published>
    <updated>2025-12-26T13:50:53.313Z</updated>
    
    <content type="html"><![CDATA[<p>今天分享下，我目前使用的讯投QMT的情况，是通过某券商开通的QMT的函数交易权限，基本没有什么门槛，大家都可以开，能交易大A的股票和可转债。ETF期权的开通，门槛比较高，且审核也比较繁琐，所以没有开。</p><p>在讯投QMT上同时有四个策略在同时运行，使用的是大QMT，也就是原装的QMT，不是极简版的。对于交易产品行情的获取，关注的数量一般在几十只预先选定的产品，不会全市场的实时扫全场的数据。交易的频率应该在几分钟甚至更长时间，也只是简单的采用一些TALIB带的一些指标分析的函数，所以对硬件的要求并不高。</p><p>最开始我使用的是我自己的笔记本电脑，也用过一段时间的云服务器，最后还是选择了一台小主机独立的去运行QMT。</p><p>最开始用自己的笔记本电脑的时候，和我日常使用笔记本电脑感觉有冲突，QMT会弹出提醒，对我在电脑上干别的有影响。另外，还会担心在笔记本上使用比较消耗性能、网速的程序的时候，会影响到QMT。还有就是，笔记本电脑开的时间长了，风扇会一直转，比较烦，就放弃了在笔记本上使用的想法。</p><p>后来选了云服务器，趁着某大厂的云服务器迎新大折扣的时候买了一年，其实感觉整体还是挺不错的。系统选的是 win server 版本，自己安装了QMT和我自己需要的数据库，就这样跑了差不多一年。云数据库比较好的点是因为有人管理，所以会不用担心断电、断网这些事情，但不好的点是策略是放在别人家的机器上的，也不知道安不安全。后来一年快到期的时候，续费的时候价格翻了好多倍，羊毛不让薅了，就没有续费了。</p><p>找了自己家里面的之前买的 mini 主机，买的时候我记得是 800 多，国产品牌，升级到了 win11，配置了配置就放到一个角落里面，让他 24 小时自己运行了，没有连接显示器，只插了一根网线，把声卡、用不到的USB口什么的禁用了，功率比较低在六～七瓦，一个月电费几块钱。只是六日的时候，会关机让他休息，平时就一直开着。这样也用了一年了吧，没出过什么问题，家里的电源和网络也是非常的稳定。其实主要还是因为是新手，策略下的交易量没有那么大，不是分分钟几万的那种，所以硬件上就没有那么好。我看他们专职做量化的，硬件配置相当的高，甚至还有UPS不间断电源，网速也要最快的那种。</p><p>以上，是我作为一个小散，新手，非专业量化从业者的给QMT配硬件的思路，觉得适合的人可以参考，不适合的也根据自己的情况去配置。毕竟大家的策略不同，交易量不同，票票的大小不同，对硬件的要求会有很大的区别。我这个分享呢，可能更适合那些刚开始做程序化交易的朋友。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;今天分享下，我目前使用的讯投QMT的情况，是通过某券商开通的QMT的函数交易权限，基本没有什么门槛，大家都可以开，能交易大A的股票和可转债。ETF期权的开通，门槛比较高，且审核也比较繁琐，所以没有开。&lt;/p&gt;
&lt;p&gt;在讯投QMT上同时有四个策略在同时运行，使用的是大QMT，</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="讯投" scheme="https://invest.wtsolutions.cn/tags/%E8%AE%AF%E6%8A%95/"/>
    
    <category term="服务器" scheme="https://invest.wtsolutions.cn/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT交易系统 延迟 委托/成交/持仓/账号信息延迟 get_trade_detail_data延迟</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-server-delay/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-server-delay/</id>
    <published>2025-02-25T14:26:06.000Z</published>
    <updated>2025-12-17T04:35:57.230Z</updated>
    
    <content type="html"><![CDATA[<p>很多朋友问过我，为什么感觉迅投的QMT有延迟：</p><ol><li>委托order数据延迟，order_callback() </li><li>成交deal数据延迟, deal_callback()</li><li>持仓position数据延迟, position_callback()</li><li>账号account数据延迟,  account_callback()</li></ol><h2 id="第一类原因："><a href="#第一类原因：" class="headerlink" title="第一类原因："></a>第一类原因：</h2><p><strong>官方给的提示如下：</strong></p><blockquote><p>委托&#x2F;成交&#x2F;持仓&#x2F;账号信息的更新, 是在客户端后台进行的, python策略中无法手动控制。</p></blockquote><p><strong>解释如下：</strong><br>python提供的取账号信息接口 get_trade_detail_data， 与四种交易回调函数（order_callback, deal_callback, position_callback等等）, 都是从客户端本地缓存中读取数据 &#x2F; 触发调用，不是调用时查询柜台再返回。</p><p>客户端本地缓存状态定期接收柜台推送刷新，有交易主推的柜台50ms一次，没有交易主推的柜台1-6秒一次。 </p><p>不能认为get_trade_detail_data查到的状态是与柜台完全一致的, 比如卖出委托后立刻查询, 不会查到对应委托, 可用资金也不会变多。</p><p>实盘策略需要设计盘中保存&#x2F;更新委托状态的机制。常见的做法是用全局变量字典保存委托状态, 给每一笔委托独立的投资备注作为字典的key，委托状态作为字典的value, 下单后默认设置为待报, 之后查到委托后更新状态。如果某品种股票存在待报状态委托, 暂停该品种后续报单, 防止发生超单的情况。(实现可以参考实盘示例7-调整至目标持仓Demo)</p><p><strong>简单来说：</strong><br>不同的券商下的QMT交易系统推送频率不同。从券商向你的QMT软件，有的券商50ms推送一次交易信息，有的是1-6秒才会推送一次信息。也就是说，你如果感觉到延迟，需要问你的券商，问他们所给你提供的QMT交易系统，是多久推送一次。如果是1-6秒，你肯定会感觉有延迟的。</p><p>推送之后，你的QMT软件，才会知道最新的信息，然后相应的给你各种callback。当然你自己使用get_trade_detail_data也是从你本地的QMT软件获取的信息，无法直接从券商那边直接获取信息，只能等券商那边给你的QMT软件推送最新的信息之后，你才能get到最新信息。</p><h2 id="第二类原因"><a href="#第二类原因" class="headerlink" title="第二类原因"></a>第二类原因</h2><p>就是你自己要在QMT软件右下角那块看行情&#x2F;交易连接的延迟，正常是ms级的延迟，如果你在连接行情&#x2F;交易服务器处就有很大的延迟，就可能是因为你的宽带连接质量不高，或者网速比较慢等原因。可以通过换成手机热点、换宽带等等各种方式排查一下，看看是不是用了其他的网络就能变好。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><p>本文更新于2025年2月25日</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;很多朋友问过我，为什么感觉迅投的QMT有延迟：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;委托order数据延迟，order_callback() &lt;/li&gt;
&lt;li&gt;成交deal数据延迟, deal_callback()&lt;/li&gt;
&lt;li&gt;持仓position数据延迟,</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="服务器" scheme="https://invest.wtsolutions.cn/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    
    <category term="迅投" scheme="https://invest.wtsolutions.cn/tags/%E8%BF%85%E6%8A%95/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT自带策略-双均线实盘示例PY策略-解读</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-strategy-mean-lines/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-strategy-mean-lines/</id>
    <published>2025-02-19T14:26:06.000Z</published>
    <updated>2025-12-17T04:36:15.043Z</updated>
    
    <content type="html"><![CDATA[<h2 id="首先po一下迅投QMT自带的策略，如下："><a href="#首先po一下迅投QMT自带的策略，如下：" class="headerlink" title="首先po一下迅投QMT自带的策略，如下："></a>首先po一下迅投QMT自带的策略，如下：</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="comment">#encoding:gbk</span></span><br><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">import</span> datetime</span><br><span class="line"> </span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">示例说明：双均线实盘策略，通过计算快慢双均线，在金叉时买入，死叉时做卖出</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"> </span><br><span class="line"><span class="keyword">class</span> <span class="title class_">a</span>():</span><br><span class="line"><span class="keyword">pass</span></span><br><span class="line">A = a() <span class="comment">#创建空的类的实例 用来保存委托状态 </span></span><br><span class="line"><span class="comment">#ContextInfo对象在盘中每次handlebar调用前都会被深拷贝, 如果调用handlebar的分笔不是k线最后分笔 ContextInfo会被回退到深拷贝的内容 所以ContextInfo不能用来记录快速交易的信号</span></span><br><span class="line"> </span><br><span class="line"><span class="keyword">def</span> <span class="title function_">init</span>(<span class="params">C</span>):</span><br><span class="line">A.stock= C.stockcode + <span class="string">&#x27;.&#x27;</span> + C.market <span class="comment">#品种为模型交易界面选择品种</span></span><br><span class="line">A.acct= account <span class="comment">#账号为模型交易界面选择账号</span></span><br><span class="line">A.acct_type= accountType <span class="comment">#账号类型为模型交易界面选择账号</span></span><br><span class="line">A.amount = <span class="number">10000</span> <span class="comment">#单笔买入金额 触发买入信号后买入指定金额</span></span><br><span class="line">A.line1=<span class="number">17</span>   <span class="comment">#快线周期</span></span><br><span class="line">A.line2=<span class="number">27</span>   <span class="comment">#慢线周期</span></span><br><span class="line">A.waiting_list = [] <span class="comment">#未查到委托列表 存在未查到委托情况暂停后续报单 防止超单</span></span><br><span class="line">A.buy_code = <span class="number">23</span> <span class="keyword">if</span> A.acct_type == <span class="string">&#x27;STOCK&#x27;</span> <span class="keyword">else</span> <span class="number">33</span> <span class="comment">#买卖代码 区分股票 与 两融账号</span></span><br><span class="line">A.sell_code = <span class="number">24</span> <span class="keyword">if</span> A.acct_type == <span class="string">&#x27;STOCK&#x27;</span> <span class="keyword">else</span> <span class="number">34</span></span><br><span class="line"><span class="comment">#设置股票池 订阅品种行情</span></span><br><span class="line">C.set_universe([A.stock])</span><br><span class="line"><span class="built_in">print</span>(<span class="string">f&#x27;双均线实盘示例<span class="subst">&#123;A.stock&#125;</span> <span class="subst">&#123;A.acct&#125;</span> <span class="subst">&#123;A.acct_type&#125;</span> 单笔买入金额<span class="subst">&#123;A.amount&#125;</span>&#x27;</span>)</span><br><span class="line"> </span><br><span class="line"><span class="keyword">def</span> <span class="title function_">handlebar</span>(<span class="params">C</span>):</span><br><span class="line"><span class="comment">#跳过历史k线</span></span><br><span class="line"><span class="keyword">if</span> <span class="keyword">not</span> C.is_last_bar():</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line">now = datetime.datetime.now()</span><br><span class="line">now_time = now.strftime(<span class="string">&#x27;%H%M%S&#x27;</span>)</span><br><span class="line"><span class="comment">#跳过非交易时间</span></span><br><span class="line"><span class="keyword">if</span> now_time &lt; <span class="string">&#x27;093000&#x27;</span> <span class="keyword">or</span> now_time &gt; <span class="string">&quot;150000&quot;</span>:</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line">account = get_trade_detail_data(A.acct, A.acct_type, <span class="string">&#x27;account&#x27;</span>)</span><br><span class="line"><span class="keyword">if</span> <span class="built_in">len</span>(account)==<span class="number">0</span>:</span><br><span class="line"><span class="built_in">print</span>(<span class="string">f&#x27;账号<span class="subst">&#123;A.acct&#125;</span> 未登录 请检查&#x27;</span>)</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line">account = account[<span class="number">0</span>]</span><br><span class="line">available_cash = <span class="built_in">int</span>(account.m_dAvailable)</span><br><span class="line"><span class="comment">#如果有未查到委托 查询委托</span></span><br><span class="line"><span class="keyword">if</span> A.waiting_list:</span><br><span class="line">found_list = []</span><br><span class="line">orders = get_trade_detail_data(A.acct, A.acct_type, <span class="string">&#x27;order&#x27;</span>)</span><br><span class="line"><span class="keyword">for</span> order <span class="keyword">in</span> orders:</span><br><span class="line"><span class="keyword">if</span> order.m_strRemark <span class="keyword">in</span> A.waiting_list:</span><br><span class="line">found_list.append(order.m_strRemark)</span><br><span class="line">A.waiting_list = [i <span class="keyword">for</span> i <span class="keyword">in</span> A.waiting_list <span class="keyword">if</span> i <span class="keyword">not</span> <span class="keyword">in</span> found_list]</span><br><span class="line"><span class="keyword">if</span> A.waiting_list:</span><br><span class="line"><span class="built_in">print</span>(<span class="string">f&quot;当前有未查到委托 <span class="subst">&#123;A.waiting_list&#125;</span> 暂停后续报单&quot;</span>)</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line">holdings = get_trade_detail_data(A.acct, A.acct_type, <span class="string">&#x27;position&#x27;</span>)</span><br><span class="line">holdings = &#123;i.m_strInstrumentID + <span class="string">&#x27;.&#x27;</span> + i.m_strExchangeID : i.m_nCanUseVolume <span class="keyword">for</span> i <span class="keyword">in</span> holdings&#125;</span><br><span class="line"><span class="comment">#获取行情数据</span></span><br><span class="line">data = C.get_history_data(<span class="built_in">max</span>(A.line1, A.line2)+<span class="number">1</span>, <span class="string">&#x27;1d&#x27;</span>, <span class="string">&#x27;close&#x27;</span>,dividend_type=<span class="string">&#x27;front_ratio&#x27;</span>)</span><br><span class="line">close_list = data[A.stock]</span><br><span class="line"><span class="keyword">if</span> <span class="built_in">len</span>(close_list) &lt; <span class="built_in">max</span>(A.line1, A.line2)+<span class="number">1</span>:</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;行情长度不足(新上市或最近有停牌) 跳过运行&#x27;</span>)</span><br><span class="line"><span class="keyword">return</span></span><br><span class="line">pre_line1 = np.mean(close_list[-A.line1-<span class="number">1</span>: -<span class="number">1</span>])</span><br><span class="line">pre_line2 = np.mean(close_list[-A.line2-<span class="number">1</span>: -<span class="number">1</span>])</span><br><span class="line">current_line1 = np.mean(close_list[-A.line1:])</span><br><span class="line">current_line2 = np.mean(close_list[-A.line2:])</span><br><span class="line"><span class="comment">#如果快线穿过慢线,则买入委托 当前无持仓 买入</span></span><br><span class="line">vol = <span class="built_in">int</span>(A.amount / close_list[-<span class="number">1</span>] / <span class="number">100</span>) * <span class="number">100</span> <span class="comment">#买入数量 向下取整到100的整数倍</span></span><br><span class="line"><span class="keyword">if</span> A.amount &lt; available_cash <span class="keyword">and</span> vol &gt;= <span class="number">100</span> <span class="keyword">and</span> A.stock <span class="keyword">not</span> <span class="keyword">in</span> holdings <span class="keyword">and</span> pre_line1 &lt; pre_line2 <span class="keyword">and</span> current_line1 &gt; current_line2:</span><br><span class="line"><span class="comment">#下单开仓 ，参数说明可搜索PY交易函数 passorder</span></span><br><span class="line">msg = <span class="string">f&quot;双均线实盘 <span class="subst">&#123;A.stock&#125;</span> 上穿均线 买入 <span class="subst">&#123;vol&#125;</span>股&quot;</span></span><br><span class="line">passorder(A.buy_code, <span class="number">1101</span>, A.acct, A.stock, <span class="number">14</span>, -<span class="number">1</span>, vol, <span class="string">&#x27;双均线实盘&#x27;</span>, <span class="number">1</span> , msg, C)</span><br><span class="line"><span class="built_in">print</span>(msg)</span><br><span class="line">A.waiting_list.append(msg)</span><br><span class="line"><span class="comment">#如果快线下穿慢线,则卖出委托</span></span><br><span class="line"><span class="keyword">if</span> A.stock <span class="keyword">in</span> holdings <span class="keyword">and</span> holdings[A.stock] &gt; <span class="number">0</span> <span class="keyword">and</span> pre_line1 &gt; pre_line2 <span class="keyword">and</span> current_line1 &lt; current_line2:</span><br><span class="line">msg = <span class="string">f&quot;双均线实盘 <span class="subst">&#123;A.stock&#125;</span> 下穿均线 卖出 <span class="subst">&#123;holdings[A.stock]&#125;</span>股&quot;</span></span><br><span class="line">passorder(A.sell_code, <span class="number">1101</span>, A.acct, A.stock, <span class="number">14</span>, -<span class="number">1</span>, holdings[A.stock], <span class="string">&#x27;双均线实盘&#x27;</span>, <span class="number">1</span> , msg, C)</span><br><span class="line"><span class="built_in">print</span>(msg)</span><br><span class="line">A.waiting_list.append(msg)</span><br></pre></td></tr></table></figure><h2 id="解读如下："><a href="#解读如下：" class="headerlink" title="解读如下："></a>解读如下：</h2><p>这个代码实现了一个基于双均线策略的量化交易系统。以下是代码的主要功能：</p><h3 id="1-策略概述"><a href="#1-策略概述" class="headerlink" title="1. 策略概述"></a>1. 策略概述</h3><p>双均线策略：该策略通过计算两个不同周期的移动平均线（快线和慢线），在快线从下方穿过慢线时（金叉）买入，在快线从上方穿过慢线时（死叉）卖出。</p><p>交易品种：代码中交易的品种是用户在模型交易界面选择的股票或融资融券品种。</p><p>交易账号：使用用户在模型交易界面选择的账号进行交易。</p><h3 id="2-代码结构"><a href="#2-代码结构" class="headerlink" title="2. 代码结构"></a>2. 代码结构</h3><p>init(C) 函数：初始化函数，设置交易品种、账号、交易金额、快慢线周期等参数，并订阅品种的行情数据。</p><p>handlebar(C) 函数：处理每个K线的函数，根据当前的市场行情和持仓情况，判断是否触发买入或卖出信号，并执行相应的交易操作。</p><h3 id="3-主要功能"><a href="#3-主要功能" class="headerlink" title="3. 主要功能"></a>3. 主要功能</h3><p>初始化：</p><p>设置交易品种、账号、交易金额、快慢线周期等参数。</p><p>订阅品种的行情数据。</p><p>行情数据处理：</p><p>获取历史收盘价数据，计算快线和慢线的移动平均值。</p><p>判断是否满足买入或卖出的条件。</p><p>交易执行：</p><p>买入条件：当快线从下方穿过慢线（金叉），且当前没有持仓时，执行买入操作。</p><p>卖出条件：当快线从上方穿过慢线（死叉），且当前有持仓时，执行卖出操作。</p><p>委托管理：</p><p>通过 A.waiting_list 管理未查到的委托，防止重复下单。</p><p>在每次交易后，将委托信息添加到 A.waiting_list 中，并在查询到委托后从列表中移除。</p><h3 id="4-交易逻辑"><a href="#4-交易逻辑" class="headerlink" title="4. 交易逻辑"></a>4. 交易逻辑</h3><p>买入逻辑：</p><p>检查账户可用资金是否足够。</p><p>计算买入数量（向下取整到100的整数倍）。</p><p>如果满足买入条件，执行买入操作，并记录委托信息。</p><p>卖出逻辑：</p><p>检查当前是否有持仓。</p><p>如果满足卖出条件，执行卖出操作，并记录委托信息。</p><h3 id="5-其他功能"><a href="#5-其他功能" class="headerlink" title="5. 其他功能"></a>5. 其他功能</h3><p>时间过滤：只在交易时间段（09:30:00 到 15:00:00）内执行交易逻辑。</p><p>历史K线过滤：跳过非最新的K线，只在最新的K线上执行交易逻辑。</p><p>委托查询：在每次交易前，查询是否有未查到的委托，防止重复下单。</p><h3 id="6-输出信息"><a href="#6-输出信息" class="headerlink" title="6. 输出信息"></a>6. 输出信息</h3><p>在初始化时，输出策略的基本信息（如交易品种、账号、交易金额等）。</p><p>在每次交易时，输出交易信息（如买入或卖出的股票数量、价格等）。</p><h3 id="7-依赖库"><a href="#7-依赖库" class="headerlink" title="7. 依赖库"></a>7. 依赖库</h3><p>pandas：用于数据处理。</p><p>numpy：用于计算移动平均线。</p><p>datetime：用于处理时间相关的操作。</p><p>总结<br>这个代码实现了一个基于双均线策略的量化交易系统，通过计算快慢均线的交叉点来判断买入和卖出的时机，并在满足条件时执行相应的交易操作。代码中还包含了委托管理、时间过滤、历史K线过滤等功能，以确保交易的准确性和安全性。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><p>本文更新于2025年2月19日</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;首先po一下迅投QMT自带的策略，如下：&quot;&gt;&lt;a href=&quot;#首先po一下迅投QMT自带的策略，如下：&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="迅投" scheme="https://invest.wtsolutions.cn/tags/%E8%BF%85%E6%8A%95/"/>
    
    <category term="策略" scheme="https://invest.wtsolutions.cn/tags/%E7%AD%96%E7%95%A5/"/>
    
    <category term="双均线" scheme="https://invest.wtsolutions.cn/tags/%E5%8F%8C%E5%9D%87%E7%BA%BF/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT量化交易系统-国债逆回购-闲钱理财</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-debt-reverse-repurchase/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-debt-reverse-repurchase/</id>
    <published>2025-02-12T15:26:06.000Z</published>
    <updated>2025-12-17T04:35:13.649Z</updated>
    
    <content type="html"><![CDATA[<h2 id="国债逆回购"><a href="#国债逆回购" class="headerlink" title="国债逆回购"></a>国债逆回购</h2><p>资金账户里面的闲钱，有时候我们希望可以购买国债逆回购。在QMT里面，我们可以通过代码定时实现国债逆回购。</p><h2 id="国债逆回购的代码"><a href="#国债逆回购的代码" class="headerlink" title="国债逆回购的代码"></a>国债逆回购的代码</h2><p>代码仅供参考，不构成投资建议，请谨慎操作。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">account = <span class="string">&#x27;xxxxx&#x27;</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">DRR</span>(<span class="params">ContextInfo</span>):</span><br><span class="line">afund = get_trade_detail_data(account,<span class="string">&#x27;stock&#x27;</span>,<span class="string">&#x27;account&#x27;</span>)[<span class="number">0</span>].m_dAvailable</span><br><span class="line">avolume = <span class="built_in">int</span>((afund )/<span class="number">1000</span>)*<span class="number">10</span></span><br><span class="line"><span class="keyword">if</span> avolume &gt;= <span class="number">10</span>:</span><br><span class="line">passorder(<span class="number">24</span>,<span class="number">1101</span>,account,<span class="string">&#x27;204001.SH&#x27;</span>,<span class="number">14</span>,-<span class="number">1</span>,avolume,<span class="string">&#x27;DRR&#x27;</span>,<span class="number">2</span>,<span class="string">&#x27;DRR&#x27;</span>,ContextInfo)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;DRR &#x27;</span> + <span class="built_in">str</span>(avolume) )</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;DRR skipped&#x27;</span>)</span><br></pre></td></tr></table></figure><p>如上定义了个DRR函数，通过定时函数，在盘中的14:57分运行。</p><p>2025.05.26更新：</p><p>这段代码中，使用的是对手价下单的，如果想要使用限价等其他形式，需要相应修改。<br>当采用对手价下单的时候，如果金额不多，通常在几万元的话，是可以立即成交的，如果金额多的话，考虑换其他下单类型。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a><br>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><h2 id="其他问题"><a href="#其他问题" class="headerlink" title="其他问题"></a>其他问题</h2><p>本文更新于2025年5月26日</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;国债逆回购&quot;&gt;&lt;a href=&quot;#国债逆回购&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="量化策略" scheme="https://invest.wtsolutions.cn/tags/%E9%87%8F%E5%8C%96%E7%AD%96%E7%95%A5/"/>
    
    <category term="国债逆回购" scheme="https://invest.wtsolutions.cn/tags/%E5%9B%BD%E5%80%BA%E9%80%86%E5%9B%9E%E8%B4%AD/"/>
    
    <category term="闲钱理财" scheme="https://invest.wtsolutions.cn/tags/%E9%97%B2%E9%92%B1%E7%90%86%E8%B4%A2/"/>
    
  </entry>
  
  <entry>
    <title>迅投QMT量化交易系统服务器连接 中断与再连接</title>
    <link href="https://invest.wtsolutions.cn/posts/qmt-server-connection/"/>
    <id>https://invest.wtsolutions.cn/posts/qmt-server-connection/</id>
    <published>2025-02-11T14:26:06.000Z</published>
    <updated>2025-12-17T04:35:50.555Z</updated>
    
    <content type="html"><![CDATA[<h2 id="行情和交易服务器的中断和再连接"><a href="#行情和交易服务器的中断和再连接" class="headerlink" title="行情和交易服务器的中断和再连接"></a>行情和交易服务器的中断和再连接</h2><p>在QMT程序化交易系统的右下角，能看到两个标签【行情】【交易】，如果是绿色的，则代表行情和交易服务器是连接正常的，如果变成了红色，则代表那个服务器连接中断了。<br>如果是红色的，则需要用鼠标点击红色部分，会弹出一个服务器的选择窗口，你需要手动的进行相应的切换，直到右下角的标签变成了绿色的。</p><h2 id="服务器再连接"><a href="#服务器再连接" class="headerlink" title="服务器再连接"></a>服务器再连接</h2><p>需要注意的是，有的券商的再连接发生时，当前的所有的交易数据，券商会完全再给你推送一次，所有的成交回报，所有的下单回报等等，大家一定要特别注意，不能相信券商给你推送的交易回报, 它可能是重复发送的（如deal_callback等等）。这个问题在我之前的新手指南的帖子里面已经讲解了解决办法。大家可以通过本文章顶端的博客专栏连接，进入我的专栏，查看其他的QMT相关的文章。</p><h2 id="服务器中断的识别"><a href="#服务器中断的识别" class="headerlink" title="服务器中断的识别"></a>服务器中断的识别</h2><p>很多时候，我们的QMT程序化交易系统是24小时运行的，那么我们其实希望能够识别到当前【行情】【交易】服务器连接是否正常。我自己所采用的方法比较简单，就是设置一个定时函数，在盘前的一个时间去通过获取行情来判断是否存在服务器中断。如果判断中断了，则给我发送一个消息。当然如果我在设定的时间完全没有收到任何消息的话，则说明整个QMT程序存在不正常运行的状况，需要人工干预。</p><p>我使用的方法非常简单，就是在9点15运行如下代码：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">DailySettings</span>(<span class="params">ContextInfo</span>):</span><br><span class="line"><span class="keyword">if</span> getLastClose(<span class="string">&#x27;510300.SH&#x27;</span>,ContextInfo) != <span class="literal">False</span>:</span><br><span class="line">sendMsg(<span class="string">&quot;morning&quot;</span>)</span><br><span class="line"><span class="keyword">def</span> <span class="title function_">getLastClose</span>(<span class="params">stock, ContextInfo</span>):</span><br><span class="line">stockList = [stock]</span><br><span class="line">tick = ContextInfo.get_full_tick(stock_code = stockList)</span><br><span class="line"><span class="keyword">if</span> stock <span class="keyword">in</span> tick:</span><br><span class="line"><span class="keyword">if</span> <span class="string">&quot;lastClose&quot;</span> <span class="keyword">in</span> tick[stock]:</span><br><span class="line"><span class="keyword">return</span> tick[stock][<span class="string">&quot;lastClose&quot;</span>]</span><br><span class="line">sendMsg(<span class="string">&quot;行情数据可能存在问题&quot;</span>)</span><br><span class="line"><span class="keyword">return</span> <span class="literal">False</span></span><br></pre></td></tr></table></figure><p>如果我收到了morning，则通常QMT行情服务器连接正常。<br>sendMsg函数，大家可以自定义，比如发送短信，发送邮件，发送飞书消息，自己能接收到就行。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a><br>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p><p>本文更新于2025年2月11日</p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;行情和交易服务器的中断和再连接&quot;&gt;&lt;a href=&quot;#行情和交易服务器的中断和再连接&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="新手指南" scheme="https://invest.wtsolutions.cn/tags/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/"/>
    
    <category term="服务器" scheme="https://invest.wtsolutions.cn/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    
    <category term="迅投" scheme="https://invest.wtsolutions.cn/tags/%E8%BF%85%E6%8A%95/"/>
    
  </entry>
  
  <entry>
    <title>量化交易策略中如何判断当前MACD是否达到最小值</title>
    <link href="https://invest.wtsolutions.cn/posts/minimum-MACD/"/>
    <id>https://invest.wtsolutions.cn/posts/minimum-MACD/</id>
    <published>2025-02-06T15:26:06.000Z</published>
    <updated>2025-12-17T04:36:37.199Z</updated>
    
    <content type="html"><![CDATA[<p>我的一个量化交易策略中，涉及到使用技术指标MACD，我就问了deepseek：</p><blockquote><p>在量化交易策略中，计算MACD，如何判断MACD是不是达到的最小值</p></blockquote><p>下面是deepseek给我的答案，着实是惊喜到了我，所以分享出来给大家，仅供参考，不构成任何建议。</p><hr><p>在量化交易策略中，判断MACD是否达到最小值是一个关键步骤。MACD的最小值通常是指MACD柱状图（MACD Histogram）的局部最小值。以下是判断MACD是否达到最小值的几种方法：</p><h3 id="1-简单局部最小值判断"><a href="#1-简单局部最小值判断" class="headerlink" title="1.简单局部最小值判断"></a>1.简单局部最小值判断</h3><p>通过比较当前MACD柱状图值与前后一段时间内的值，判断是否达到局部最小值。</p><p>实现方法：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">is_macd_min</span>(<span class="params">macd_histogram, current_index, window=<span class="number">5</span></span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    判断当前MACD柱状图是否达到局部最小值</span></span><br><span class="line"><span class="string">    :param macd_histogram: MACD柱状图数据（Pandas Series）</span></span><br><span class="line"><span class="string">    :param current_index: 当前索引</span></span><br><span class="line"><span class="string">    :param window: 前后窗口大小</span></span><br><span class="line"><span class="string">    :return: True（是最小值）或 False（不是最小值）</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="comment"># 获取当前窗口范围</span></span><br><span class="line">    start_index = <span class="built_in">max</span>(<span class="number">0</span>, current_index - window)</span><br><span class="line">    end_index = <span class="built_in">min</span>(<span class="built_in">len</span>(macd_histogram) - <span class="number">1</span>, current_index + window)</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 获取窗口内的MACD柱状图值</span></span><br><span class="line">    window_values = macd_histogram.iloc[start_index:end_index + <span class="number">1</span>]</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 判断当前值是否为窗口内的最小值</span></span><br><span class="line">    <span class="keyword">if</span> macd_histogram.iloc[current_index] == window_values.<span class="built_in">min</span>():</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">return</span> <span class="literal">False</span></span><br></pre></td></tr></table></figure><p>使用示例：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 假设 macd_histogram 是计算好的MACD柱状图数据</span></span><br><span class="line">current_index = <span class="built_in">len</span>(macd_histogram) - <span class="number">1</span>  <span class="comment"># 当前最新数据的索引</span></span><br><span class="line"><span class="keyword">if</span> is_macd_min(macd_histogram, current_index, window=<span class="number">5</span>):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;MACD达到局部最小值，可以考虑买入&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="2-平滑处理后的最小值判断"><a href="#2-平滑处理后的最小值判断" class="headerlink" title="2. 平滑处理后的最小值判断"></a>2. 平滑处理后的最小值判断</h3><p>MACD柱状图可能会有较多噪声，导致局部最小值频繁出现。可以通过平滑处理（如移动平均）来减少噪声，再判断最小值。</p><p>实现方法：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">smooth_macd_histogram</span>(<span class="params">macd_histogram, window=<span class="number">3</span></span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    对MACD柱状图进行平滑处理</span></span><br><span class="line"><span class="string">    :param macd_histogram: MACD柱状图数据（Pandas Series）</span></span><br><span class="line"><span class="string">    :param window: 平滑窗口大小</span></span><br><span class="line"><span class="string">    :return: 平滑后的MACD柱状图</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">return</span> macd_histogram.rolling(window=window, min_periods=<span class="number">1</span>).mean()</span><br><span class="line"></span><br><span class="line"><span class="comment"># 平滑处理</span></span><br><span class="line">smoothed_macd = smooth_macd_histogram(macd_histogram, window=<span class="number">3</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 判断最小值</span></span><br><span class="line"><span class="keyword">if</span> is_macd_min(smoothed_macd, current_index, window=<span class="number">5</span>):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;平滑后的MACD达到局部最小值，可以考虑买入&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="3-全局最小值判断"><a href="#3-全局最小值判断" class="headerlink" title="3. 全局最小值判断"></a>3. 全局最小值判断</h3><p>如果你希望判断MACD柱状图是否达到历史数据中的全局最小值，可以直接比较当前值与历史最小值。</p><p>实现方法：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">is_macd_global_min</span>(<span class="params">macd_histogram, current_index</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    判断当前MACD柱状图是否达到全局最小值</span></span><br><span class="line"><span class="string">    :param macd_histogram: MACD柱状图数据（Pandas Series）</span></span><br><span class="line"><span class="string">    :param current_index: 当前索引</span></span><br><span class="line"><span class="string">    :return: True（是全局最小值）或 False（不是全局最小值）</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">if</span> macd_histogram.iloc[current_index] == macd_histogram.<span class="built_in">min</span>():</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">    <span class="keyword">return</span> <span class="literal">False</span></span><br></pre></td></tr></table></figure><p>使用示例：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> is_macd_global_min(macd_histogram, current_index):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;MACD达到全局最小值，可以考虑买入&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="4-结合趋势判断"><a href="#4-结合趋势判断" class="headerlink" title="4. 结合趋势判断"></a>4. 结合趋势判断</h3><p>MACD柱状图的最小值可能出现在下降趋势中，此时买入可能并不合适。可以结合MACD线的趋势（如MACD线是否开始拐头向上）来进一步确认。</p><p>实现方法：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">is_macd_turning_up</span>(<span class="params">macd_line, current_index, window=<span class="number">3</span></span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    判断MACD线是否开始拐头向上</span></span><br><span class="line"><span class="string">    :param macd_line: MACD线数据（Pandas Series）</span></span><br><span class="line"><span class="string">    :param current_index: 当前索引</span></span><br><span class="line"><span class="string">    :param window: 窗口大小</span></span><br><span class="line"><span class="string">    :return: True（拐头向上）或 False（未拐头向上）</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">if</span> current_index &lt; window:</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line">    <span class="comment"># 判断当前MACD线是否高于前几根</span></span><br><span class="line">    <span class="keyword">return</span> macd_line.iloc[current_index] &gt; macd_line.iloc[current_index - window]</span><br><span class="line"></span><br><span class="line"><span class="comment"># 结合MACD最小值和趋势判断</span></span><br><span class="line"><span class="keyword">if</span> is_macd_min(macd_histogram, current_index, window=<span class="number">5</span>) <span class="keyword">and</span> is_macd_turning_up(macd_line, current_index, window=<span class="number">3</span>):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;MACD达到局部最小值且趋势拐头向上，可以考虑买入&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="5-动态阈值判断"><a href="#5-动态阈值判断" class="headerlink" title="5. 动态阈值判断"></a>5. 动态阈值判断</h3><p>如果MACD柱状图的最小值波动较大，可以设置一个动态阈值（如历史最小值的某个百分比），当当前值低于该阈值时认为达到最小值。</p><p>实现方法：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">is_macd_below_threshold</span>(<span class="params">macd_histogram, current_index, threshold_ratio=<span class="number">0.1</span></span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">    判断当前MACD柱状图是否低于动态阈值</span></span><br><span class="line"><span class="string">    :param macd_histogram: MACD柱状图数据（Pandas Series）</span></span><br><span class="line"><span class="string">    :param current_index: 当前索引</span></span><br><span class="line"><span class="string">    :param threshold_ratio: 阈值比例（例如历史最小值的10%）</span></span><br><span class="line"><span class="string">    :return: True（低于阈值）或 False（高于阈值）</span></span><br><span class="line"><span class="string">    &quot;&quot;&quot;</span></span><br><span class="line">    historical_min = macd_histogram.<span class="built_in">min</span>()</span><br><span class="line">    threshold = historical_min * (<span class="number">1</span> + threshold_ratio)</span><br><span class="line">    <span class="keyword">return</span> macd_histogram.iloc[current_index] &lt; threshold</span><br></pre></td></tr></table></figure><p>使用示例：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> is_macd_below_threshold(macd_histogram, current_index, threshold_ratio=<span class="number">0.1</span>):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;MACD低于动态阈值，可以考虑买入&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>判断MACD是否达到最小值的方法有多种，具体选择哪种方法取决于你的策略需求：</p><ul><li>局部最小值：适合短期交易策略。</li><li>全局最小值：适合长期趋势判断。</li><li>平滑处理：减少噪声干扰。</li><li>结合趋势：提高信号的可靠性。</li><li>动态阈值：适应市场波动。</li></ul><p>在实际应用中，建议结合多种方法进行综合判断，并通过历史数据回测验证策略的有效性。</p><h2 id="小技巧，我的其他关于qmt的文章"><a href="#小技巧，我的其他关于qmt的文章" class="headerlink" title="小技巧，我的其他关于qmt的文章"></a>小技巧，我的其他关于qmt的文章</h2><p>QMT使用指南 <a href="../qmt-guide">开始阅读</a></p><p>国债逆回购-闲钱理财 <a href="../qmt-debt-reverse-repurchase">开始阅读</a></p><p>开户qmt <a href="../qmt-account-open">开始阅读</a></p><p>判断当前时段是交易&#x2F;非交易&#x2F;竞价&#x2F;盘后等时间段 <a href="../qmt-is-now-a-trading-hour">开始阅读</a></p><p>如何判断今天是不是交易日 <a href="../qmt-is-today-a-trading-day">开始阅读</a></p><p>如何低成本选择讯投QMT 的服务器&#x2F;电脑，低成本运行？ <a href="../qmt-low-cost-ops">开始阅读</a></p><p>为什么每天早晨QMT会退出登录&#x2F;重新启动&#x2F;自动初始化 <a href="../qmt-restart-initialize">开始阅读</a></p><p>迅投QMT量化交易系统服务器连接 中断与再连接 <a href="../qmt-server-connection">开始阅读</a></p><p>迅投QMT交易系统 延迟 委托&#x2F;成交&#x2F;持仓&#x2F;账号信息延迟 get_trade_detail_data延迟 <a href="../qmt-server-delay">开始阅读</a></p><p>量化交易策略中如何判断当前MACD是否达到最小值 <a href="../minimum-MACD">开始阅读</a></p><p>迅投QMT自带策略-双均线实盘示例PY策略-解读 <a href="../qmt-strategy-mean-lines">开始阅读</a></p><p>使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码 <a href="../write-qmt-code-with-Deepseek">开始阅读</a></p>]]></content>
    
    
      
      
        
        
    <summary type="html">&lt;p&gt;我的一个量化交易策略中，涉及到使用技术指标MACD，我就问了deepseek：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在量化交易策略中，计算MACD，如何判断MACD是不是达到的最小值&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面是deepseek给我的答案，着实是惊喜</summary>
        
      
    
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/categories/qmt/"/>
    
    
    <category term="qmt" scheme="https://invest.wtsolutions.cn/tags/qmt/"/>
    
    <category term="量化策略" scheme="https://invest.wtsolutions.cn/tags/%E9%87%8F%E5%8C%96%E7%AD%96%E7%95%A5/"/>
    
    <category term="MACD" scheme="https://invest.wtsolutions.cn/tags/MACD/"/>
    
    <category term="AI" scheme="https://invest.wtsolutions.cn/tags/AI/"/>
    
  </entry>
  
</feed>
