<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Quantmod on 格物堂</title><link>https://gewutang.cn/tags/quantmod/</link><description>Recent content in Quantmod on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 25 May 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/quantmod/index.xml" rel="self" type="application/rss+xml"/><item><title>五分钟搞定 SMA 指标的量化策略开发和回测</title><link>https://gewutang.cn/2025/05/25/sma/</link><pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2025/05/25/sma/</guid><description>&#10;&#10;&#10;&lt;p&gt;常有人问我能用几分钟时间写一段代码进行一个简易的量化投资策略的开发和回测吗，答案是当然可以。对于量化投资而言，门槛永远不是编程和代码，而是投资思路和模型解读。下面我们用五分钟左右的时间来开发一个基于 SMA 指标的量化投资策略并进行回测。&lt;/p&gt;&#10;&lt;div id="引言" class="section level1"&gt;&#10;&lt;h1&gt;引言&lt;/h1&gt;&#10;&lt;p&gt;本文的代码基于&lt;a href="https://r-project.org"&gt;R&lt;/a&gt;软件和 &lt;a href="https://posit.co"&gt;Rstuido&lt;/a&gt; 软件运行，如果未安装上述软件，请自行安装。&lt;/p&gt;&#10;&lt;p&gt;策略开发还需要基于以下 R 包来实现，可以运行如下代码安装并加载相关 R 包。&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 安装依赖包，如果未安装&#10;install.packages(c(&amp;quot;quantstrat&amp;quot;, &amp;quot;Tushare&amp;quot;, &amp;quot;xts&amp;quot;, &amp;quot;dplyr&amp;quot;, &amp;quot;showtext&amp;quot;, &amp;quot;zoo&amp;quot;,&amp;quot;PerformanceAnalytics&amp;quot;,&amp;quot;tidyverse&amp;quot;))&#10;# 加载软件包&#10;suppressMessages({&#10; library(quantmod)&#10; library(quantstrat)&#10; library(PerformanceAnalytics)&#10; library(Tushare)&#10; library(xts)&#10; library(dplyr)&#10; library(zoo)&#10; library(tidyverse)&#10;})&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="清理环境" class="section level1"&gt;&#10;&lt;h1&gt;清理环境&lt;/h1&gt;&#10;&lt;p&gt;第一步，先清理历史环境，避免历史环境的干扰。&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 清理历史环境&#10;rm(list=ls(.blotter), envir=.blotter)&#10;rm(list=ls(.strategy), envir=.strategy)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="策略开发" class="section level1"&gt;&#10;&lt;h1&gt;策略开发&lt;/h1&gt;&#10;&lt;p&gt;下面进入正式开发流程。&lt;/p&gt;&#10;&lt;div id="初始化设置" class="section level2"&gt;&#10;&lt;h2&gt;初始化设置&lt;/h2&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 参数设置&#10;initDate &amp;lt;- &amp;quot;2009-12-31&amp;quot;&#10;fromDate &amp;lt;- &amp;quot;2010-01-01&amp;quot;&#10;endDate &amp;lt;- Sys.Date()&#10;symbol &amp;lt;- &amp;quot;600519.SS&amp;quot;&#10;initEq &amp;lt;- 100000&#10;fastMA &amp;lt;- 5&#10;slowMA &amp;lt;- 20&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="获取数据" class="section level2"&gt;&#10;&lt;h2&gt;获取数据&lt;/h2&gt;&#10;&lt;p&gt;使用quantmod获取贵州茅台数据&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取数据&#10;getSymbols(symbol, from=fromDate, to=endDate, src=&amp;quot;yahoo&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;600519.SS&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;maotai &amp;lt;- `600519.SS`&#10;colnames(maotai) &amp;lt;- c(&amp;quot;Open&amp;quot;,&amp;quot;High&amp;quot;,&amp;quot;Low&amp;quot;,&amp;quot;Close&amp;quot;,&amp;quot;Volume&amp;quot;,&amp;quot;Adjusted&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="初始化策略" class="section level2"&gt;&#10;&lt;h2&gt;初始化策略&lt;/h2&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;currency(&amp;quot;RMB&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;RMB&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;stock(symbol, currency=&amp;quot;RMB&amp;quot;, multiplier=1)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;X600519.SS&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;strategy.st &amp;lt;- &amp;quot;maotai_sma&amp;quot;&#10;portfolio.st &amp;lt;- &amp;quot;maotai_portfolio&amp;quot;&#10;account.st &amp;lt;- &amp;quot;maotai_account&amp;quot;&#10;&#10;# 清除旧策略(如果存在)&#10;if(exists(&amp;quot;strategy.st&amp;quot;, where=.strategy)) {&#10; rm.strat(strategy.st)&#10;}&#10;&#10;# 创建组合/账户/策略&#10;initPortf(portfolio.st, symbols=symbol, initDate=initDate)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_portfolio&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;initAcct(account.st, portfolios=portfolio.st, initDate=initDate, initEq=initEq)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_account&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;initOrders(portfolio.st, initDate=initDate)&#10;strategy(strategy.st, store=TRUE)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="添加指标" class="section level2"&gt;&#10;&lt;h2&gt;添加指标&lt;/h2&gt;&#10;&lt;p&gt;这里添加的简单移动平均线(SMA)：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 添加指标&#10;add.indicator(&#10; strategy.st,&#10; name=&amp;quot;SMA&amp;quot;,&#10; arguments=list(x=quote(Cl(mktdata)), n=fastMA),&#10; label=&amp;quot;fastMA&amp;quot;&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_sma&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;add.indicator(&#10; strategy.st,&#10; name=&amp;quot;SMA&amp;quot;,&#10; arguments=list(x=quote(Cl(mktdata)), n=slowMA),&#10; label=&amp;quot;slowMA&amp;quot;&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_sma&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="添加信号---金叉死叉" class="section level2"&gt;&#10;&lt;h2&gt;添加信号 - 金叉死叉&lt;/h2&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 添加信号&#10;add.signal(&#10; strategy.st,&#10; name=&amp;quot;sigCrossover&amp;quot;,&#10; arguments=list(columns=c(&amp;quot;fastMA&amp;quot;,&amp;quot;slowMA&amp;quot;), relationship=&amp;quot;gt&amp;quot;),&#10; label=&amp;quot;fast.gt.slow&amp;quot;&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_sma&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;add.signal(&#10; strategy.st,&#10; name=&amp;quot;sigCrossover&amp;quot;,&#10; arguments=list(columns=c(&amp;quot;fastMA&amp;quot;,&amp;quot;slowMA&amp;quot;), relationship=&amp;quot;lt&amp;quot;),&#10; label=&amp;quot;fast.lt.slow&amp;quot;&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_sma&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="添加交易规则" class="section level2"&gt;&#10;&lt;h2&gt;添加交易规则&lt;/h2&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;add.rule(&#10; strategy.st,&#10; name=&amp;quot;ruleSignal&amp;quot;,&#10; arguments=list(&#10; sigcol=&amp;quot;fast.gt.slow&amp;quot;,&#10; sigval=TRUE,&#10; orderqty=100,&#10; ordertype=&amp;quot;market&amp;quot;,&#10; orderside=&amp;quot;long&amp;quot;,&#10; replace=FALSE&#10; ),&#10; type=&amp;quot;enter&amp;quot;,&#10; label=&amp;quot;EnterLONG&amp;quot;&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_sma&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;add.rule(&#10; strategy.st,&#10; name=&amp;quot;ruleSignal&amp;quot;,&#10; arguments=list(&#10; sigcol=&amp;quot;fast.lt.slow&amp;quot;,&#10; sigval=TRUE,&#10; orderqty=&amp;quot;all&amp;quot;,&#10; ordertype=&amp;quot;market&amp;quot;,&#10; orderside=&amp;quot;long&amp;quot;,&#10; replace=FALSE&#10; ),&#10; type=&amp;quot;exit&amp;quot;,&#10; label=&amp;quot;ExitLONG&amp;quot;&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_sma&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="策略回测" class="section level1"&gt;&#10;&lt;h1&gt;策略回测&lt;/h1&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;applyStrategy(strategy.st, &#10; portfolios=portfolio.st)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;2010-05-25 00:00:00 600519.SS 100 @ 98.6100692749023&amp;quot;&#10;## [1] &amp;quot;2010-06-01 00:00:00 600519.SS -100 @ 99.6468811035156&amp;quot;&#10;## [1] &amp;quot;2010-06-03 00:00:00 600519.SS 100 @ 101.450035095215&amp;quot;&#10;## [1] &amp;quot;2010-06-23 00:00:00 600519.SS -100 @ 98.9481582641602&amp;quot;&#10;## [1] &amp;quot;2010-07-15 00:00:00 600519.SS 100 @ 99.0458297729492&amp;quot;&#10;## [1] &amp;quot;2010-10-15 00:00:00 600519.SS -100 @ 120.195343017578&amp;quot;&#10;## [1] &amp;quot;2010-10-25 00:00:00 600519.SS 100 @ 129.977462768555&amp;quot;&#10;## [1] &amp;quot;2010-11-02 00:00:00 600519.SS -100 @ 122.216377258301&amp;quot;&#10;## [1] &amp;quot;2010-11-11 00:00:00 600519.SS 100 @ 132.171295166016&amp;quot;&#10;## [1] &amp;quot;2010-12-23 00:00:00 600519.SS -100 @ 143.283248901367&amp;quot;&#10;## [1] &amp;quot;2011-02-11 00:00:00 600519.SS 100 @ 138.940643310547&amp;quot;&#10;## [1] &amp;quot;2011-03-02 00:00:00 600519.SS -100 @ 133.140487670898&amp;quot;&#10;## [1] &amp;quot;2011-03-16 00:00:00 600519.SS 100 @ 136.619079589844&amp;quot;&#10;## [1] &amp;quot;2011-03-31 00:00:00 600519.SS -100 @ 135.123962402344&amp;quot;&#10;## [1] &amp;quot;2011-04-27 00:00:00 600519.SS 100 @ 136.100677490234&amp;quot;&#10;## [1] &amp;quot;2011-08-25 00:00:00 600519.SS -100 @ 171.421493530273&amp;quot;&#10;## [1] &amp;quot;2011-08-29 00:00:00 600519.SS 100 @ 177.909088134766&amp;quot;&#10;## [1] &amp;quot;2011-09-07 00:00:00 600519.SS -100 @ 171.561981201172&amp;quot;&#10;## [1] &amp;quot;2011-10-20 00:00:00 600519.SS 100 @ 157.933883666992&amp;quot;&#10;## [1] &amp;quot;2011-11-18 00:00:00 600519.SS -100 @ 165.760330200195&amp;quot;&#10;## [1] &amp;quot;2011-11-28 00:00:00 600519.SS 100 @ 176.752059936523&amp;quot;&#10;## [1] &amp;quot;2011-12-09 00:00:00 600519.SS -100 @ 165.140487670898&amp;quot;&#10;## [1] &amp;quot;2012-02-07 00:00:00 600519.SS 100 @ 153.603302001953&amp;quot;&#10;## [1] &amp;quot;2012-04-06 00:00:00 600519.SS -100 @ 171.876037597656&amp;quot;&#10;## [1] &amp;quot;2012-04-10 00:00:00 600519.SS 100 @ 171.991729736328&amp;quot;&#10;## [1] &amp;quot;2012-05-21 00:00:00 600519.SS -100 @ 184.454544067383&amp;quot;&#10;## [1] &amp;quot;2012-06-01 00:00:00 600519.SS 100 @ 198.652893066406&amp;quot;&#10;## [1] &amp;quot;2012-06-29 00:00:00 600519.SS -100 @ 197.644622802734&amp;quot;&#10;## [1] &amp;quot;2012-07-04 00:00:00 600519.SS 100 @ 213.768600463867&amp;quot;&#10;## [1] &amp;quot;2012-07-24 00:00:00 600519.SS -100 @ 206.099166870117&amp;quot;&#10;## [1] &amp;quot;2012-08-10 00:00:00 600519.SS 100 @ 205.132232666016&amp;quot;&#10;## [1] &amp;quot;2012-08-17 00:00:00 600519.SS -100 @ 189.768600463867&amp;quot;&#10;## [1] &amp;quot;2012-09-10 00:00:00 600519.SS 100 @ 199.735534667969&amp;quot;&#10;## [1] &amp;quot;2012-09-26 00:00:00 600519.SS -100 @ 194.933883666992&amp;quot;&#10;## [1] &amp;quot;2012-09-28 00:00:00 600519.SS 100 @ 203.140487670898&amp;quot;&#10;## [1] &amp;quot;2012-10-30 00:00:00 600519.SS -100 @ 202.132232666016&amp;quot;&#10;## [1] &amp;quot;2012-11-05 00:00:00 600519.SS 100 @ 200.760330200195&amp;quot;&#10;## [1] &amp;quot;2012-11-07 00:00:00 600519.SS -100 @ 196.256195068359&amp;quot;&#10;## [1] &amp;quot;2012-12-19 00:00:00 600519.SS 100 @ 181.363632202148&amp;quot;&#10;## [1] &amp;quot;2013-01-17 00:00:00 600519.SS -100 @ 169.528930664062&amp;quot;&#10;## [1] &amp;quot;2013-03-12 00:00:00 600519.SS 100 @ 150.561981201172&amp;quot;&#10;## [1] &amp;quot;2013-03-19 00:00:00 600519.SS -100 @ 136.512390136719&amp;quot;&#10;## [1] &amp;quot;2013-04-16 00:00:00 600519.SS 100 @ 143.107437133789&amp;quot;&#10;## [1] &amp;quot;2013-06-17 00:00:00 600519.SS -100 @ 156.59504699707&amp;quot;&#10;## [1] &amp;quot;2013-07-04 00:00:00 600519.SS 100 @ 162.495864868164&amp;quot;&#10;## [1] &amp;quot;2013-07-16 00:00:00 600519.SS -100 @ 157.809921264648&amp;quot;&#10;## [1] &amp;quot;2013-08-14 00:00:00 600519.SS 100 @ 147.677688598633&amp;quot;&#10;## [1] &amp;quot;2013-08-23 00:00:00 600519.SS -100 @ 142.966949462891&amp;quot;&#10;## [1] &amp;quot;2013-10-18 00:00:00 600519.SS 100 @ 118.16529083252&amp;quot;&#10;## [1] &amp;quot;2013-10-30 00:00:00 600519.SS -100 @ 109.578514099121&amp;quot;&#10;## [1] &amp;quot;2013-11-13 00:00:00 600519.SS 100 @ 119.603302001953&amp;quot;&#10;## [1] &amp;quot;2013-11-28 00:00:00 600519.SS -100 @ 117.214874267578&amp;quot;&#10;## [1] &amp;quot;2013-12-02 00:00:00 600519.SS 100 @ 113.041320800781&amp;quot;&#10;## [1] &amp;quot;2013-12-03 00:00:00 600519.SS -100 @ 113.702476501465&amp;quot;&#10;## [1] &amp;quot;2014-01-23 00:00:00 600519.SS 100 @ 110.818183898926&amp;quot;&#10;## [1] &amp;quot;2014-03-31 00:00:00 600519.SS -100 @ 127.85124206543&amp;quot;&#10;## [1] &amp;quot;2014-04-09 00:00:00 600519.SS 100 @ 135&amp;quot;&#10;## [1] &amp;quot;2014-04-30 00:00:00 600519.SS -100 @ 135.438018798828&amp;quot;&#10;## [1] &amp;quot;2014-06-11 00:00:00 600519.SS 100 @ 127.223136901855&amp;quot;&#10;## [1] &amp;quot;2014-08-14 00:00:00 600519.SS -100 @ 146.781814575195&amp;quot;&#10;## [1] &amp;quot;2014-09-05 00:00:00 600519.SS 100 @ 152.281814575195&amp;quot;&#10;## [1] &amp;quot;2014-09-18 00:00:00 600519.SS -100 @ 144.772720336914&amp;quot;&#10;## [1] &amp;quot;2014-10-08 00:00:00 600519.SS 100 @ 146.118179321289&amp;quot;&#10;## [1] &amp;quot;2014-10-13 00:00:00 600519.SS -100 @ 141.909088134766&amp;quot;&#10;## [1] &amp;quot;2014-11-18 00:00:00 600519.SS 100 @ 141.5&amp;quot;&#10;## [1] &amp;quot;2014-11-25 00:00:00 600519.SS -100 @ 140.581817626953&amp;quot;&#10;## [1] &amp;quot;2014-11-27 00:00:00 600519.SS 100 @ 142.43635559082&amp;quot;&#10;## [1] &amp;quot;2015-01-16 00:00:00 600519.SS -100 @ 169.190902709961&amp;quot;&#10;## [1] &amp;quot;2015-02-12 00:00:00 600519.SS 100 @ 166.881820678711&amp;quot;&#10;## [1] &amp;quot;2015-05-19 00:00:00 600519.SS -100 @ 227.309097290039&amp;quot;&#10;## [1] &amp;quot;2015-05-25 00:00:00 600519.SS 100 @ 260.754547119141&amp;quot;&#10;## [1] &amp;quot;2015-06-09 00:00:00 600519.SS -100 @ 235.481811523438&amp;quot;&#10;## [1] &amp;quot;2015-07-07 00:00:00 600519.SS 100 @ 221.981811523438&amp;quot;&#10;## [1] &amp;quot;2015-07-08 00:00:00 600519.SS -100 @ 215.327270507812&amp;quot;&#10;## [1] &amp;quot;2015-07-14 00:00:00 600519.SS 100 @ 226.409088134766&amp;quot;&#10;## [1] &amp;quot;2015-07-21 00:00:00 600519.SS -100 @ 221.660003662109&amp;quot;&#10;## [1] &amp;quot;2015-09-15 00:00:00 600519.SS 100 @ 202&amp;quot;&#10;## [1] &amp;quot;2015-09-29 00:00:00 600519.SS -100 @ 190.169998168945&amp;quot;&#10;## [1] &amp;quot;2015-10-15 00:00:00 600519.SS 100 @ 199.990005493164&amp;quot;&#10;## [1] &amp;quot;2015-11-20 00:00:00 600519.SS -100 @ 213.720001220703&amp;quot;&#10;## [1] &amp;quot;2015-12-07 00:00:00 600519.SS 100 @ 214.509994506836&amp;quot;&#10;## [1] &amp;quot;2015-12-11 00:00:00 600519.SS -100 @ 211.410003662109&amp;quot;&#10;## [1] &amp;quot;2015-12-21 00:00:00 600519.SS 100 @ 227.029998779297&amp;quot;&#10;## [1] &amp;quot;2016-01-05 00:00:00 600519.SS -100 @ 212.820007324219&amp;quot;&#10;## [1] &amp;quot;2016-02-05 00:00:00 600519.SS 100 @ 203.869995117188&amp;quot;&#10;## [1] &amp;quot;2016-04-18 00:00:00 600519.SS -100 @ 243.679992675781&amp;quot;&#10;## [1] &amp;quot;2016-05-03 00:00:00 600519.SS 100 @ 260&amp;quot;&#10;## [1] &amp;quot;2016-05-20 00:00:00 600519.SS -100 @ 251.259994506836&amp;quot;&#10;## [1] &amp;quot;2016-05-27 00:00:00 600519.SS 100 @ 252.440002441406&amp;quot;&#10;## [1] &amp;quot;2016-08-03 00:00:00 600519.SS -100 @ 306.820007324219&amp;quot;&#10;## [1] &amp;quot;2016-08-12 00:00:00 600519.SS 100 @ 316.970001220703&amp;quot;&#10;## [1] &amp;quot;2016-08-22 00:00:00 600519.SS -100 @ 307.320007324219&amp;quot;&#10;## [1] &amp;quot;2016-10-13 00:00:00 600519.SS 100 @ 303.890014648438&amp;quot;&#10;## [1] &amp;quot;2016-11-18 00:00:00 600519.SS -100 @ 310&amp;quot;&#10;## [1] &amp;quot;2016-11-29 00:00:00 600519.SS 100 @ 323.959991455078&amp;quot;&#10;## [1] &amp;quot;2016-12-26 00:00:00 600519.SS -100 @ 324.480010986328&amp;quot;&#10;## [1] &amp;quot;2017-01-04 00:00:00 600519.SS 100 @ 351.910003662109&amp;quot;&#10;## [1] &amp;quot;2017-02-07 00:00:00 600519.SS -100 @ 343.579986572266&amp;quot;&#10;## [1] &amp;quot;2017-02-16 00:00:00 600519.SS 100 @ 348.089996337891&amp;quot;&#10;## [1] &amp;quot;2017-07-05 00:00:00 600519.SS -100 @ 460.130004882812&amp;quot;&#10;## [1] &amp;quot;2017-07-25 00:00:00 600519.SS 100 @ 477.959991455078&amp;quot;&#10;## [1] &amp;quot;2017-09-07 00:00:00 600519.SS -100 @ 481.269989013672&amp;quot;&#10;## [1] &amp;quot;2017-09-19 00:00:00 600519.SS 100 @ 496.950012207031&amp;quot;&#10;## [1] &amp;quot;2017-11-27 00:00:00 600519.SS -100 @ 621.289978027344&amp;quot;&#10;## [1] &amp;quot;2017-12-15 00:00:00 600519.SS 100 @ 653.789978027344&amp;quot;&#10;## [1] &amp;quot;2018-01-31 00:00:00 600519.SS -100 @ 764.539978027344&amp;quot;&#10;## [1] &amp;quot;2018-02-28 00:00:00 600519.SS 100 @ 725.619995117188&amp;quot;&#10;## [1] &amp;quot;2018-03-14 00:00:00 600519.SS -100 @ 726.880004882812&amp;quot;&#10;## [1] &amp;quot;2018-03-15 00:00:00 600519.SS 100 @ 746.469970703125&amp;quot;&#10;## [1] &amp;quot;2018-03-27 00:00:00 600519.SS -100 @ 714.739990234375&amp;quot;&#10;## [1] &amp;quot;2018-05-10 00:00:00 600519.SS 100 @ 714.190002441406&amp;quot;&#10;## [1] &amp;quot;2018-06-25 00:00:00 600519.SS -100 @ 765.559997558594&amp;quot;&#10;## [1] &amp;quot;2018-07-17 00:00:00 600519.SS 100 @ 742.429992675781&amp;quot;&#10;## [1] &amp;quot;2018-08-02 00:00:00 600519.SS -100 @ 695.840026855469&amp;quot;&#10;## [1] &amp;quot;2018-08-30 00:00:00 600519.SS 100 @ 680.400024414062&amp;quot;&#10;## [1] &amp;quot;2018-09-06 00:00:00 600519.SS -100 @ 644&amp;quot;&#10;## [1] &amp;quot;2018-09-21 00:00:00 600519.SS 100 @ 700.010009765625&amp;quot;&#10;## [1] &amp;quot;2018-10-16 00:00:00 600519.SS -100 @ 667.140014648438&amp;quot;&#10;## [1] &amp;quot;2018-12-04 00:00:00 600519.SS 100 @ 602.22998046875&amp;quot;&#10;## [1] &amp;quot;2018-12-24 00:00:00 600519.SS -100 @ 568&amp;quot;&#10;## [1] &amp;quot;2019-01-07 00:00:00 600519.SS 100 @ 605.489990234375&amp;quot;&#10;## [1] &amp;quot;2019-05-09 00:00:00 600519.SS -100 @ 858.809997558594&amp;quot;&#10;## [1] &amp;quot;2019-06-03 00:00:00 600519.SS 100 @ 892&amp;quot;&#10;## [1] &amp;quot;2019-06-06 00:00:00 600519.SS -100 @ 862.130004882812&amp;quot;&#10;## [1] &amp;quot;2019-06-14 00:00:00 600519.SS 100 @ 913&amp;quot;&#10;## [1] &amp;quot;2019-07-16 00:00:00 600519.SS -100 @ 968&amp;quot;&#10;## [1] &amp;quot;2019-08-01 00:00:00 600519.SS 100 @ 959.299987792969&amp;quot;&#10;## [1] &amp;quot;2019-08-06 00:00:00 600519.SS -100 @ 946.299987792969&amp;quot;&#10;## [1] &amp;quot;2019-08-13 00:00:00 600519.SS 100 @ 1017.95001220703&amp;quot;&#10;## [1] &amp;quot;2019-09-17 00:00:00 600519.SS -100 @ 1094.01000976562&amp;quot;&#10;## [1] &amp;quot;2019-09-23 00:00:00 600519.SS 100 @ 1149&amp;quot;&#10;## [1] &amp;quot;2019-10-25 00:00:00 600519.SS -100 @ 1171.34997558594&amp;quot;&#10;## [1] &amp;quot;2019-10-31 00:00:00 600519.SS 100 @ 1180.01000976562&amp;quot;&#10;## [1] &amp;quot;2019-11-27 00:00:00 600519.SS -100 @ 1189.94995117188&amp;quot;&#10;## [1] &amp;quot;2019-12-20 00:00:00 600519.SS 100 @ 1146.30004882812&amp;quot;&#10;## [1] &amp;quot;2019-12-26 00:00:00 600519.SS -100 @ 1135.09997558594&amp;quot;&#10;## [1] &amp;quot;2019-12-31 00:00:00 600519.SS 100 @ 1183&amp;quot;&#10;## [1] &amp;quot;2020-01-06 00:00:00 600519.SS -100 @ 1077.98999023438&amp;quot;&#10;## [1] &amp;quot;2020-02-14 00:00:00 600519.SS 100 @ 1088&amp;quot;&#10;## [1] &amp;quot;2020-03-02 00:00:00 600519.SS -100 @ 1086.01000976562&amp;quot;&#10;## [1] &amp;quot;2020-03-05 00:00:00 600519.SS 100 @ 1171&amp;quot;&#10;## [1] &amp;quot;2020-03-18 00:00:00 600519.SS -100 @ 1007.98999023438&amp;quot;&#10;## [1] &amp;quot;2020-04-03 00:00:00 600519.SS 100 @ 1139.7900390625&amp;quot;&#10;## [1] &amp;quot;2020-07-29 00:00:00 600519.SS -100 @ 1672&amp;quot;&#10;## [1] &amp;quot;2020-08-19 00:00:00 600519.SS 100 @ 1687&amp;quot;&#10;## [1] &amp;quot;2020-09-11 00:00:00 600519.SS -100 @ 1733&amp;quot;&#10;## [1] &amp;quot;2020-09-17 00:00:00 600519.SS 100 @ 1670.52001953125&amp;quot;&#10;## [1] &amp;quot;2020-09-18 00:00:00 600519.SS -100 @ 1695&amp;quot;&#10;## [1] &amp;quot;2020-10-14 00:00:00 600519.SS 100 @ 1729&amp;quot;&#10;## [1] &amp;quot;2020-10-29 00:00:00 600519.SS -100 @ 1676&amp;quot;&#10;## [1] &amp;quot;2020-11-10 00:00:00 600519.SS 100 @ 1745&amp;quot;&#10;## [1] &amp;quot;2021-03-01 00:00:00 600519.SS -100 @ 2158&amp;quot;&#10;## [1] &amp;quot;2021-04-01 00:00:00 600519.SS 100 @ 2044.5&amp;quot;&#10;## [1] &amp;quot;2021-04-15 00:00:00 600519.SS -100 @ 2015.59997558594&amp;quot;&#10;## [1] &amp;quot;2021-04-20 00:00:00 600519.SS 100 @ 2094.80004882812&amp;quot;&#10;## [1] &amp;quot;2021-05-06 00:00:00 600519.SS -100 @ 1959&amp;quot;&#10;## [1] &amp;quot;2021-05-20 00:00:00 600519.SS 100 @ 2058.8798828125&amp;quot;&#10;## [1] &amp;quot;2021-06-18 00:00:00 600519.SS -100 @ 2090.93994140625&amp;quot;&#10;## [1] &amp;quot;2021-09-08 00:00:00 600519.SS 100 @ 1633.09997558594&amp;quot;&#10;## [1] &amp;quot;2021-11-01 00:00:00 600519.SS -100 @ 1803&amp;quot;&#10;## [1] &amp;quot;2021-11-23 00:00:00 600519.SS 100 @ 1896.43005371094&amp;quot;&#10;## [1] &amp;quot;2022-01-05 00:00:00 600519.SS -100 @ 2024&amp;quot;&#10;## [1] &amp;quot;2022-01-28 00:00:00 600519.SS 100 @ 1887&amp;quot;&#10;## [1] &amp;quot;2022-02-07 00:00:00 600519.SS -100 @ 1867.9599609375&amp;quot;&#10;## [1] &amp;quot;2022-04-07 00:00:00 600519.SS 100 @ 1765&amp;quot;&#10;## [1] &amp;quot;2022-04-28 00:00:00 600519.SS -100 @ 1835&amp;quot;&#10;## [1] &amp;quot;2022-05-05 00:00:00 600519.SS 100 @ 1837&amp;quot;&#10;## [1] &amp;quot;2022-05-13 00:00:00 600519.SS -100 @ 1778.23999023438&amp;quot;&#10;## [1] &amp;quot;2022-06-02 00:00:00 600519.SS 100 @ 1786&amp;quot;&#10;## [1] &amp;quot;2022-07-14 00:00:00 600519.SS -100 @ 1953&amp;quot;&#10;## [1] &amp;quot;2022-08-18 00:00:00 600519.SS 100 @ 1895.5&amp;quot;&#10;## [1] &amp;quot;2022-08-23 00:00:00 600519.SS -100 @ 1870.01000976562&amp;quot;&#10;## [1] &amp;quot;2022-09-20 00:00:00 600519.SS 100 @ 1878&amp;quot;&#10;## [1] &amp;quot;2022-09-23 00:00:00 600519.SS -100 @ 1834.43005371094&amp;quot;&#10;## [1] &amp;quot;2022-09-30 00:00:00 600519.SS 100 @ 1872.5&amp;quot;&#10;## [1] &amp;quot;2022-10-12 00:00:00 600519.SS -100 @ 1760&amp;quot;&#10;## [1] &amp;quot;2022-11-16 00:00:00 600519.SS 100 @ 1585.25&amp;quot;&#10;## [1] &amp;quot;2023-01-03 00:00:00 600519.SS -100 @ 1730.01000976562&amp;quot;&#10;## [1] &amp;quot;2023-01-09 00:00:00 600519.SS 100 @ 1841.19995117188&amp;quot;&#10;## [1] &amp;quot;2023-02-07 00:00:00 600519.SS -100 @ 1797&amp;quot;&#10;## [1] &amp;quot;2023-02-21 00:00:00 600519.SS 100 @ 1867&amp;quot;&#10;## [1] &amp;quot;2023-02-28 00:00:00 600519.SS -100 @ 1813.73999023438&amp;quot;&#10;## [1] &amp;quot;2023-03-30 00:00:00 600519.SS 100 @ 1800&amp;quot;&#10;## [1] &amp;quot;2023-04-13 00:00:00 600519.SS -100 @ 1723&amp;quot;&#10;## [1] &amp;quot;2023-05-08 00:00:00 600519.SS 100 @ 1720.52001953125&amp;quot;&#10;## [1] &amp;quot;2023-05-10 00:00:00 600519.SS -100 @ 1725&amp;quot;&#10;## [1] &amp;quot;2023-06-15 00:00:00 600519.SS 100 @ 1755&amp;quot;&#10;## [1] &amp;quot;2023-07-07 00:00:00 600519.SS -100 @ 1690.03002929688&amp;quot;&#10;## [1] &amp;quot;2023-07-18 00:00:00 600519.SS 100 @ 1722.80004882812&amp;quot;&#10;## [1] &amp;quot;2023-08-17 00:00:00 600519.SS -100 @ 1828.05004882812&amp;quot;&#10;## [1] &amp;quot;2023-09-01 00:00:00 600519.SS 100 @ 1851.05004882812&amp;quot;&#10;## [1] &amp;quot;2023-09-14 00:00:00 600519.SS -100 @ 1818.68994140625&amp;quot;&#10;## [1] &amp;quot;2023-11-03 00:00:00 600519.SS 100 @ 1811.23999023438&amp;quot;&#10;## [1] &amp;quot;2023-11-29 00:00:00 600519.SS -100 @ 1774.7099609375&amp;quot;&#10;## [1] &amp;quot;2024-01-02 00:00:00 600519.SS 100 @ 1685.01000976562&amp;quot;&#10;## [1] &amp;quot;2024-01-09 00:00:00 600519.SS -100 @ 1641&amp;quot;&#10;## [1] &amp;quot;2024-02-08 00:00:00 600519.SS 100 @ 1706&amp;quot;&#10;## [1] &amp;quot;2024-03-11 00:00:00 600519.SS -100 @ 1694.48999023438&amp;quot;&#10;## [1] &amp;quot;2024-03-14 00:00:00 600519.SS 100 @ 1716.63000488281&amp;quot;&#10;## [1] &amp;quot;2024-03-29 00:00:00 600519.SS -100 @ 1702.90002441406&amp;quot;&#10;## [1] &amp;quot;2024-04-02 00:00:00 600519.SS 100 @ 1713.98999023438&amp;quot;&#10;## [1] &amp;quot;2024-04-09 00:00:00 600519.SS -100 @ 1662.21997070312&amp;quot;&#10;## [1] &amp;quot;2024-04-26 00:00:00 600519.SS 100 @ 1709.43005371094&amp;quot;&#10;## [1] &amp;quot;2024-05-20 00:00:00 600519.SS -100 @ 1709&amp;quot;&#10;## [1] &amp;quot;2024-07-18 00:00:00 600519.SS 100 @ 1497.51000976562&amp;quot;&#10;## [1] &amp;quot;2024-07-26 00:00:00 600519.SS -100 @ 1422.18994140625&amp;quot;&#10;## [1] &amp;quot;2024-08-16 00:00:00 600519.SS 100 @ 1431.19995117188&amp;quot;&#10;## [1] &amp;quot;2024-08-28 00:00:00 600519.SS -100 @ 1389&amp;quot;&#10;## [1] &amp;quot;2024-09-30 00:00:00 600519.SS 100 @ 1748&amp;quot;&#10;## [1] &amp;quot;2024-10-29 00:00:00 600519.SS -100 @ 1531.61999511719&amp;quot;&#10;## [1] &amp;quot;2024-11-08 00:00:00 600519.SS 100 @ 1609.96997070312&amp;quot;&#10;## [1] &amp;quot;2024-11-20 00:00:00 600519.SS -100 @ 1544.81005859375&amp;quot;&#10;## [1] &amp;quot;2024-12-13 00:00:00 600519.SS 100 @ 1519&amp;quot;&#10;## [1] &amp;quot;2024-12-27 00:00:00 600519.SS -100 @ 1528.96997070312&amp;quot;&#10;## [1] &amp;quot;2025-02-17 00:00:00 600519.SS 100 @ 1471.61999511719&amp;quot;&#10;## [1] &amp;quot;2025-04-03 00:00:00 600519.SS -100 @ 1568.88000488281&amp;quot;&#10;## [1] &amp;quot;2025-04-22 00:00:00 600519.SS 100 @ 1548.80004882812&amp;quot;&#10;## [1] &amp;quot;2025-04-25 00:00:00 600519.SS -100 @ 1550&amp;quot;&#10;## [1] &amp;quot;2025-05-09 00:00:00 600519.SS 100 @ 1591.18005371094&amp;quot;&#10;## [1] &amp;quot;2025-05-27 00:00:00 600519.SS -100 @ 1543.90002441406&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="更新组合和账户" class="section level1"&gt;&#10;&lt;h1&gt;更新组合和账户&lt;/h1&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;updatePortf(portfolio.st)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_portfolio&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;updateAcct(account.st)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_account&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;updateEndEq(account.st)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;maotai_account&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="分析结果" class="section level1"&gt;&#10;&lt;h1&gt;分析结果&lt;/h1&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取交易数据&#10;trades &amp;lt;- getTxns(Portfolio = portfolio.st, Symbol = symbol)&#10;print(trades)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Txn.Qty Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost&#10;## 2009-12-31 00:00:00 0 0.00000 0 0.000 0.00000&#10;## 2010-05-25 08:00:00 100 98.61007 0 9861.007 98.61007&#10;## 2010-06-01 08:00:00 -100 99.64688 0 -9964.688 99.64688&#10;## 2010-06-03 08:00:00 100 101.45004 0 10145.004 101.45004&#10;## 2010-06-23 08:00:00 -100 98.94816 0 -9894.816 98.94816&#10;## 2010-07-15 08:00:00 100 99.04583 0 9904.583 99.04583&#10;## 2010-10-15 08:00:00 -100 120.19534 0 -12019.534 120.19534&#10;## 2010-10-25 08:00:00 100 129.97746 0 12997.746 129.97746&#10;## 2010-11-02 08:00:00 -100 122.21638 0 -12221.638 122.21638&#10;## 2010-11-11 08:00:00 100 132.17130 0 13217.130 132.17130&#10;## ... &#10;## 2024-11-08 08:00:00 100 1609.96997 0 160996.997 1609.96997&#10;## 2024-11-20 08:00:00 -100 1544.81006 0 -154481.006 1544.81006&#10;## 2024-12-13 08:00:00 100 1519.00000 0 151900.000 1519.00000&#10;## 2024-12-27 08:00:00 -100 1528.96997 0 -152896.997 1528.96997&#10;## 2025-02-17 08:00:00 100 1471.62000 0 147162.000 1471.62000&#10;## 2025-04-03 08:00:00 -100 1568.88000 0 -156888.000 1568.88000&#10;## 2025-04-22 08:00:00 100 1548.80005 0 154880.005 1548.80005&#10;## 2025-04-25 08:00:00 -100 1550.00000 0 -155000.000 1550.00000&#10;## 2025-05-09 08:00:00 100 1591.18005 0 159118.005 1591.18005&#10;## 2025-05-27 08:00:00 -100 1543.90002 0 -154390.002 1543.90002&#10;## Net.Txn.Realized.PL&#10;## 2009-12-31 00:00:00 0.0000&#10;## 2010-05-25 08:00:00 0.0000&#10;## 2010-06-01 08:00:00 103.6812&#10;## 2010-06-03 08:00:00 0.0000&#10;## 2010-06-23 08:00:00 -250.1877&#10;## 2010-07-15 08:00:00 0.0000&#10;## 2010-10-15 08:00:00 2114.9513&#10;## 2010-10-25 08:00:00 0.0000&#10;## 2010-11-02 08:00:00 -776.1086&#10;## 2010-11-11 08:00:00 0.0000&#10;## ... &#10;## 2024-11-08 08:00:00 0.0000&#10;## 2024-11-20 08:00:00 -6515.9912&#10;## 2024-12-13 08:00:00 0.0000&#10;## 2024-12-27 08:00:00 996.9971&#10;## 2025-02-17 08:00:00 0.0000&#10;## 2025-04-03 08:00:00 9726.0010&#10;## 2025-04-22 08:00:00 0.0000&#10;## 2025-04-25 08:00:00 119.9951&#10;## 2025-05-09 08:00:00 0.0000&#10;## 2025-05-27 08:00:00 -4728.0029&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取交易统计数据&#10;tstats &amp;lt;- tradeStats(portfolio.st)&#10;print(tstats)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Portfolio Symbol Num.Txns Num.Trades Net.Trading.PL&#10;## 600519.SS maotai_portfolio 600519.SS 220 110 104460&#10;## Avg.Trade.PL Med.Trade.PL Largest.Winner Largest.Loser Gross.Profits&#10;## 600519.SS 949.6362 -435.6613 53221 -21638 312497.1&#10;## Gross.Losses Std.Dev.Trade.PL Std.Err.Trade.PL Percent.Positive&#10;## 600519.SS -208037.1 8924.596 850.9269 40.90909&#10;## Percent.Negative Profit.Factor Avg.Win.Trade Med.Win.Trade&#10;## 600519.SS 59.09091 1.502122 6944.381 2675.455&#10;## Avg.Losing.Trade Med.Losing.Trade Avg.Daily.PL Med.Daily.PL&#10;## 600519.SS -3200.571 -1404.959 949.6362 -435.6613&#10;## Std.Dev.Daily.PL Std.Err.Daily.PL Ann.Sharpe Max.Drawdown&#10;## 600519.SS 8924.596 850.9269 1.689153 -88252.01&#10;## Profit.To.Max.Draw Avg.WinLoss.Ratio Med.WinLoss.Ratio Max.Equity&#10;## 600519.SS 1.183656 2.169731 1.904294 185832&#10;## Min.Equity End.Equity&#10;## 600519.SS -146.5065 104460&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 查看持仓情况&#10;positions &amp;lt;- getPos(Portfolio = portfolio.st, Symbol = symbol, Date = &amp;quot;2020-12-31&amp;quot;)&#10;print(positions)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Pos.Qty Pos.Avg.Cost&#10;## 2020-11-10 08:00:00 100 1745&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取投资组合的收益率&#10;returns &amp;lt;- PortfReturns(Account = account.st)&#10;&#10;# 计算夏普比率，假设无风险利率为0.02&#10;sharpe_ratio &amp;lt;- SharpeRatio(returns, Rf = 0.02)&#10;&#10;# 计算最大回撤&#10;max_drawdown &amp;lt;- maxDrawdown(returns)&#10;&#10;print(paste0(&amp;quot;夏普比率: &amp;quot;, sharpe_ratio))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;夏普比率: -1.37222406503698&amp;quot; &amp;quot;夏普比率: -1.45706193297599&amp;quot;&#10;## [3] &amp;quot;夏普比率: -1.45706193297599&amp;quot; &amp;quot;夏普比率: -1.41395097373399&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;print(paste0(&amp;quot;最大回撤: &amp;quot;, max_drawdown))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;最大回撤: 0.66676665654044&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取策略对象&#10;strategyObj &amp;lt;- getStrategy(strategy.st)&#10;&#10;str(strategyObj)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## List of 10&#10;## $ name : chr &amp;quot;maotai_sma&amp;quot;&#10;## $ assets : NULL&#10;## $ indicators :List of 2&#10;## ..$ fastMA:List of 5&#10;## .. ..$ name : chr &amp;quot;SMA&amp;quot;&#10;## .. ..$ label : chr &amp;quot;fastMA&amp;quot;&#10;## .. ..$ enabled : logi TRUE&#10;## .. ..$ arguments:List of 2&#10;## .. .. ..$ x: language Cl(mktdata)&#10;## .. .. ..$ n: num 5&#10;## .. ..$ call : language add.indicator(strategy = strategy.st, name = &amp;quot;SMA&amp;quot;, arguments = list(x = quote(Cl(mktdata)), n = fastMA), label = &amp;quot;fastMA&amp;quot;)&#10;## .. ..- attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;strat_indicator&amp;quot;&#10;## ..$ slowMA:List of 5&#10;## .. ..$ name : chr &amp;quot;SMA&amp;quot;&#10;## .. ..$ label : chr &amp;quot;slowMA&amp;quot;&#10;## .. ..$ enabled : logi TRUE&#10;## .. ..$ arguments:List of 2&#10;## .. .. ..$ x: language Cl(mktdata)&#10;## .. .. ..$ n: num 20&#10;## .. ..$ call : language add.indicator(strategy = strategy.st, name = &amp;quot;SMA&amp;quot;, arguments = list(x = quote(Cl(mktdata)), n = slowMA), label = &amp;quot;slowMA&amp;quot;)&#10;## .. ..- attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;strat_indicator&amp;quot;&#10;## $ signals :List of 2&#10;## ..$ :List of 5&#10;## .. ..$ name : chr &amp;quot;sigCrossover&amp;quot;&#10;## .. ..$ label : chr &amp;quot;fast.gt.slow&amp;quot;&#10;## .. ..$ enabled : logi TRUE&#10;## .. ..$ arguments:List of 3&#10;## .. .. ..$ columns : chr [1:2] &amp;quot;fastMA&amp;quot; &amp;quot;slowMA&amp;quot;&#10;## .. .. ..$ relationship: chr &amp;quot;gt&amp;quot;&#10;## .. .. ..$ label : chr &amp;quot;fast.gt.slow&amp;quot;&#10;## .. ..$ call : language add.signal(strategy = strategy.st, name = &amp;quot;sigCrossover&amp;quot;, arguments = list(columns = c(&amp;quot;fastMA&amp;quot;, &amp;quot;slowMA&amp;quot;), | __truncated__&#10;## .. ..- attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;strat_signal&amp;quot;&#10;## ..$ :List of 5&#10;## .. ..$ name : chr &amp;quot;sigCrossover&amp;quot;&#10;## .. ..$ label : chr &amp;quot;fast.lt.slow&amp;quot;&#10;## .. ..$ enabled : logi TRUE&#10;## .. ..$ arguments:List of 3&#10;## .. .. ..$ columns : chr [1:2] &amp;quot;fastMA&amp;quot; &amp;quot;slowMA&amp;quot;&#10;## .. .. ..$ relationship: chr &amp;quot;lt&amp;quot;&#10;## .. .. ..$ label : chr &amp;quot;fast.lt.slow&amp;quot;&#10;## .. ..$ call : language add.signal(strategy = strategy.st, name = &amp;quot;sigCrossover&amp;quot;, arguments = list(columns = c(&amp;quot;fastMA&amp;quot;, &amp;quot;slowMA&amp;quot;), | __truncated__&#10;## .. ..- attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;strat_signal&amp;quot;&#10;## $ rules :List of 3&#10;## ..$ order: list()&#10;## ..$ enter:List of 1&#10;## .. ..$ :List of 7&#10;## .. .. ..$ name :function (mktdata = mktdata, timestamp, sigcol, sigval, orderqty = 0, ordertype, &#10;## orderside = NULL, orderset = NULL, threshold = NULL, tmult = FALSE, &#10;## replace = TRUE, delay = 1e-04, osFUN = &amp;quot;osNoOp&amp;quot;, pricemethod = c(&amp;quot;market&amp;quot;, &#10;## &amp;quot;opside&amp;quot;, &amp;quot;active&amp;quot;), portfolio, symbol, ..., ruletype, TxnFees = 0, &#10;## prefer = NULL, sethold = FALSE, label = &amp;quot;&amp;quot;, order.price = NULL, chain.price = NULL, &#10;## time.in.force = &amp;quot;&amp;quot;) &#10;## .. .. ..$ type : chr &amp;quot;enter&amp;quot;&#10;## .. .. ..$ enabled : logi TRUE&#10;## .. .. ..$ label : chr &amp;quot;EnterLONG&amp;quot;&#10;## .. .. ..$ arguments:List of 6&#10;## .. .. .. ..$ sigcol : chr &amp;quot;fast.gt.slow&amp;quot;&#10;## .. .. .. ..$ sigval : logi TRUE&#10;## .. .. .. ..$ orderqty : num 100&#10;## .. .. .. ..$ ordertype: chr &amp;quot;market&amp;quot;&#10;## .. .. .. ..$ orderside: chr &amp;quot;long&amp;quot;&#10;## .. .. .. ..$ replace : logi FALSE&#10;## .. .. ..$ path.dep : logi TRUE&#10;## .. .. ..$ call : language add.rule(strategy = strategy.st, name = &amp;quot;ruleSignal&amp;quot;, arguments = list(sigcol = &amp;quot;fast.gt.slow&amp;quot;, sigval = TRU| __truncated__ ...&#10;## .. .. ..- attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;trade_rule&amp;quot;&#10;## ..$ exit :List of 1&#10;## .. ..$ :List of 7&#10;## .. .. ..$ name :function (mktdata = mktdata, timestamp, sigcol, sigval, orderqty = 0, ordertype, &#10;## orderside = NULL, orderset = NULL, threshold = NULL, tmult = FALSE, &#10;## replace = TRUE, delay = 1e-04, osFUN = &amp;quot;osNoOp&amp;quot;, pricemethod = c(&amp;quot;market&amp;quot;, &#10;## &amp;quot;opside&amp;quot;, &amp;quot;active&amp;quot;), portfolio, symbol, ..., ruletype, TxnFees = 0, &#10;## prefer = NULL, sethold = FALSE, label = &amp;quot;&amp;quot;, order.price = NULL, chain.price = NULL, &#10;## time.in.force = &amp;quot;&amp;quot;) &#10;## .. .. ..$ type : chr &amp;quot;exit&amp;quot;&#10;## .. .. ..$ enabled : logi TRUE&#10;## .. .. ..$ label : chr &amp;quot;ExitLONG&amp;quot;&#10;## .. .. ..$ arguments:List of 6&#10;## .. .. .. ..$ sigcol : chr &amp;quot;fast.lt.slow&amp;quot;&#10;## .. .. .. ..$ sigval : logi TRUE&#10;## .. .. .. ..$ orderqty : chr &amp;quot;all&amp;quot;&#10;## .. .. .. ..$ ordertype: chr &amp;quot;market&amp;quot;&#10;## .. .. .. ..$ orderside: chr &amp;quot;long&amp;quot;&#10;## .. .. .. ..$ replace : logi FALSE&#10;## .. .. ..$ path.dep : logi TRUE&#10;## .. .. ..$ call : language add.rule(strategy = strategy.st, name = &amp;quot;ruleSignal&amp;quot;, arguments = list(sigcol = &amp;quot;fast.lt.slow&amp;quot;, sigval = TRU| __truncated__ ...&#10;## .. .. ..- attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;trade_rule&amp;quot;&#10;## $ constraints: NULL&#10;## $ init : list()&#10;## $ wrapup : list()&#10;## $ trials : num 6&#10;## $ call : language strategy(name = strategy.st, store = TRUE)&#10;## - attr(*, &amp;quot;class&amp;quot;)= chr &amp;quot;strategy&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 查看指标数据&#10;indicator_data &amp;lt;- strategyObj$indicators&#10;print(indicator_data)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## $fastMA&#10;## $name&#10;## [1] &amp;quot;SMA&amp;quot;&#10;## &#10;## $label&#10;## [1] &amp;quot;fastMA&amp;quot;&#10;## &#10;## $enabled&#10;## [1] TRUE&#10;## &#10;## $arguments&#10;## $arguments$x&#10;## Cl(mktdata)&#10;## &#10;## $arguments$n&#10;## [1] 5&#10;## &#10;## &#10;## $call&#10;## add.indicator(strategy = strategy.st, name = &amp;quot;SMA&amp;quot;, arguments = list(x = quote(Cl(mktdata)), &#10;## n = fastMA), label = &amp;quot;fastMA&amp;quot;)&#10;## &#10;## attr(,&amp;quot;class&amp;quot;)&#10;## [1] &amp;quot;strat_indicator&amp;quot;&#10;## &#10;## $slowMA&#10;## $name&#10;## [1] &amp;quot;SMA&amp;quot;&#10;## &#10;## $label&#10;## [1] &amp;quot;slowMA&amp;quot;&#10;## &#10;## $enabled&#10;## [1] TRUE&#10;## &#10;## $arguments&#10;## $arguments$x&#10;## Cl(mktdata)&#10;## &#10;## $arguments$n&#10;## [1] 20&#10;## &#10;## &#10;## $call&#10;## add.indicator(strategy = strategy.st, name = &amp;quot;SMA&amp;quot;, arguments = list(x = quote(Cl(mktdata)), &#10;## n = slowMA), label = &amp;quot;slowMA&amp;quot;)&#10;## &#10;## attr(,&amp;quot;class&amp;quot;)&#10;## [1] &amp;quot;strat_indicator&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 查看信号数据&#10;signal_data &amp;lt;- strategyObj$signals&#10;print(signal_data)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [[1]]&#10;## $name&#10;## [1] &amp;quot;sigCrossover&amp;quot;&#10;## &#10;## $label&#10;## [1] &amp;quot;fast.gt.slow&amp;quot;&#10;## &#10;## $enabled&#10;## [1] TRUE&#10;## &#10;## $arguments&#10;## $arguments$columns&#10;## [1] &amp;quot;fastMA&amp;quot; &amp;quot;slowMA&amp;quot;&#10;## &#10;## $arguments$relationship&#10;## [1] &amp;quot;gt&amp;quot;&#10;## &#10;## $arguments$label&#10;## [1] &amp;quot;fast.gt.slow&amp;quot;&#10;## &#10;## &#10;## $call&#10;## add.signal(strategy = strategy.st, name = &amp;quot;sigCrossover&amp;quot;, arguments = list(columns = c(&amp;quot;fastMA&amp;quot;, &#10;## &amp;quot;slowMA&amp;quot;), relationship = &amp;quot;gt&amp;quot;), label = &amp;quot;fast.gt.slow&amp;quot;)&#10;## &#10;## attr(,&amp;quot;class&amp;quot;)&#10;## [1] &amp;quot;strat_signal&amp;quot;&#10;## &#10;## [[2]]&#10;## $name&#10;## [1] &amp;quot;sigCrossover&amp;quot;&#10;## &#10;## $label&#10;## [1] &amp;quot;fast.lt.slow&amp;quot;&#10;## &#10;## $enabled&#10;## [1] TRUE&#10;## &#10;## $arguments&#10;## $arguments$columns&#10;## [1] &amp;quot;fastMA&amp;quot; &amp;quot;slowMA&amp;quot;&#10;## &#10;## $arguments$relationship&#10;## [1] &amp;quot;lt&amp;quot;&#10;## &#10;## $arguments$label&#10;## [1] &amp;quot;fast.lt.slow&amp;quot;&#10;## &#10;## &#10;## $call&#10;## add.signal(strategy = strategy.st, name = &amp;quot;sigCrossover&amp;quot;, arguments = list(columns = c(&amp;quot;fastMA&amp;quot;, &#10;## &amp;quot;slowMA&amp;quot;), relationship = &amp;quot;lt&amp;quot;), label = &amp;quot;fast.lt.slow&amp;quot;)&#10;## &#10;## attr(,&amp;quot;class&amp;quot;)&#10;## [1] &amp;quot;strat_signal&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 绘制权益曲线&#10;equity &amp;lt;- getAccount(account.st)$summary$End.Eq&#10;plot(equity, main=&amp;quot;Strategy Equity Curve&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2025/05/25/sma/index_files/figure-html/ana-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 绘制持仓和交易图表&#10;chart.Posn(portfolio.st, Symbol=symbol, TA=&amp;quot;add_SMA(n=fastMA,col=&amp;#39;blue&amp;#39;);add_SMA(n=slowMA,col=&amp;#39;red&amp;#39;)&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2025/05/25/sma/index_files/figure-html/ana-2.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="结语" class="section level1"&gt;&#10;&lt;h1&gt;结语&lt;/h1&gt;&#10;&lt;p&gt;基于 R 软件进行量化回测一件极度舒适的事情。但由于本文未对回测指标（即 SMA ）的参数做优化，因此，本文仅供技术探讨，不构成策略或投资建议。&lt;/p&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>时空数据可视化</title><link>https://gewutang.cn/2013/07/28/the-visualization-of-spatual-temporal-data/</link><pubDate>Sun, 28 Jul 2013 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2013/07/28/the-visualization-of-spatual-temporal-data/</guid><description>&lt;p&gt;这几天北京有点热，穿着汗衫都觉得浑身冒烟儿，做啥都没有激情，只能赖在家里或者躲进图书馆和博物馆。没什么紧要的事情都懒得往外面走，但一月一次的“COS数据分析沙龙”是个例外。没有紧要的事儿，都得抽出时间去参加，偶尔还得客串一下主持人。&lt;/p&gt;&#10;&lt;p&gt;这次沙龙的主题是“时空数据的可视化”，分享嘉宾是来自中科院地理所的王江浩（@沐洲），整个沙龙内容真的令人震撼。&lt;/p&gt;&#10;&lt;p&gt;我第一次对江浩有印象是在微博上。二〇一三年三月，上海爆发H9N7疫情，之后不久江苏、浙江等省份相继出现疫情。一时间全国上下议论纷纷，专家、民众都担心这次疫情会酿成第二次SARS（非典型性肺炎）。很多人都开始关注H9N7的疫情趋势，就在这个时候，江浩的微博开始贴出H9N7疫情的可视化图，且被大量转发。&lt;/p&gt;&#10;&lt;p&gt;再不久，雅安发生地震，江浩根据网上抓取的地震相关数据，对雅安周边的地区震级做了相当经典的可视化，从地图上标注了雅安周边地区各个县、乡的地震成度。让人对当地情况一目了然。我也是第一次感觉到了时空数据可视化的重要性。&lt;/p&gt;&#10;&lt;p&gt;细想之下，何止地震和疫情呢？交通情况也是时空数据可视化中的重点。此外，还有经济学中的时空经济学，也可以研究经济体在时空中的发展变化。我感觉，时空数据可视化对于国家宏观管理意义非凡。&lt;/p&gt;&#10;</description></item><item><title>修改chartSeries绘图结果的x轴标签</title><link>https://gewutang.cn/2013/06/26/change-xlabels-in-chartseries/</link><pubDate>Wed, 26 Jun 2013 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2013/06/26/change-xlabels-in-chartseries/</guid><description>&lt;p&gt;用quantmod包中的chartSeries绘图时，x轴标签会默认为中文汉字，看起来不太美观。想要修改制图结果吧，chartSeries函数中没有提供可设置x.labels的参数。原来chartSeries函数会自动识别系统语言并根据系统语言生成x.labels。这样的话，只要我们把自己的系统语言更改为英语，就应该显示为更为整洁的英文了。&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;require(quantmod)&#10;getSymbols(&amp;quot;AAPL&amp;quot;)&#10;chartSeries(AAPL,theme=&amp;quot;white&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;Sys.setlocale(&amp;quot;LC_TIME&amp;quot;,&amp;quot;english&amp;quot;)&#10;chartSeries(AAPL,theme=&amp;quot;white&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;不过，这个好像不怎么重要吧？&lt;/p&gt;&#10;</description></item><item><title>R中的金融分析包：quantmod学习笔记补充版</title><link>https://gewutang.cn/2013/06/12/notes-on-quantmod/</link><pubDate>Wed, 12 Jun 2013 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2013/06/12/notes-on-quantmod/</guid><description>&lt;p&gt;很久之前在&lt;a class="link" href="http://cos.name" target="_blank" rel="noopener"&#10; &gt;统计之都&lt;/a&gt;&lt;a class="link" href="http://cos.name/cn" target="_blank" rel="noopener"&#10; &gt;论坛&lt;/a&gt; 发了一个&lt;code&gt;quantmod&lt;/code&gt;包的学习笔记。听说后来流传很广泛。因为当时我也是初学&lt;code&gt;quantmod&lt;/code&gt;，所以，该版本笔记中有很多错漏之处，同时笔记的叙述结构也不太合理。一直我都想修订一版出来作为补充。修订的版本现在在&lt;a class="link" href="https://github.com/dengyishuo/Notes/tree/master/quantmod" target="_blank" rel="noopener"&#10; &gt;这里&lt;/a&gt;可以看到。&lt;/p&gt;&#10;&lt;p&gt;供大家参考，如果有什么建议和意见，请不吝指正。&lt;/p&gt;&#10;</description></item><item><title>quantmod:R中的金融分析包（学习笔记）</title><link>https://gewutang.cn/2012/02/06/notes-on-quantmod-2/</link><pubDate>Mon, 06 Feb 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/02/06/notes-on-quantmod-2/</guid><description>&lt;p&gt;很久之前随手写了一份quantmod学习笔记，本来只是随手涂鸦，后来竟然出乎意料地广泛流传。因为那个册子格式混乱，结构也没有筹划，因此一直想着重新写一份。目前还没写完，但已经大致可以看了，先发出来，共需要的人来看，也便于大家提些意见。&lt;/p&gt;&#10;&lt;p&gt;下载：&lt;a class="link" href="https://github.com/dengyishuo/Notes/tree/master/quantmod" target="_blank" rel="noopener"&#10; &gt;notes on quantmod&lt;/a&gt;。&lt;/p&gt;&#10;</description></item><item><title>从股票代码到公司名</title><link>https://gewutang.cn/2011/12/12/from-symbol-to-company-name/</link><pubDate>Mon, 12 Dec 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/12/12/from-symbol-to-company-name/</guid><description>&lt;p&gt;Ruser也有Ruser的恶习，经常弄的什么事情都想用R来完成：用R玩儿扫雷、用R玩汉诺塔、用R玩儿黑白棋、用R获取股票数据、用R获取财务数据。&lt;/p&gt;&#10;&lt;p&gt;现在想的是，如果已经知道一个股票代码，比如上交所的000061，如何知道其对应的公司名称呢？如果能找到一个数据库，其包含公司名称、公司股票代码、公司简称就可以完成这样的事情了。&lt;/p&gt;&#10;&lt;p&gt;最典型的金融数据库有什么呢？google?yahoo? yahoo是可以的。代码：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod)&#10;paste(getQuote(&amp;quot;000061.ss&amp;quot;, what=yahooQF(&amp;quot;Name&amp;quot;))[,2])&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;返回结果如下：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[1] &amp;quot;SSE CORPORATE BON&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item><item><title>setSymbolLookup</title><link>https://gewutang.cn/2011/06/02/setsymbollookup/</link><pubDate>Thu, 02 Jun 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/06/02/setsymbollookup/</guid><description>&lt;p&gt;用quantmod获取OHLC数据时，如果不知道所有获取的股票的简称，在使用数据时可能会遇到一些麻烦，比如：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod)&#10;getSymbols(&amp;quot;000065.SS&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;获取数据后，敲入:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;000065.SS&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;结果是无法返回所获取的数据。不过，不用着急，这个问题可以用setSymbolLookup来解决：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;setSymbolLookup(myname=list(name=&amp;quot;000065.SS&amp;quot;, src=&amp;quot;yahoo&amp;quot;)) &#10;getSymbols(&amp;quot;myname&amp;quot;) &#10;MYNAME #这里是大写字母&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item><item><title>R获取股票数据</title><link>https://gewutang.cn/2011/04/14/use-r-to-get-trading-data/</link><pubDate>Thu, 14 Apr 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/04/14/use-r-to-get-trading-data/</guid><description>&lt;p&gt;R中有多个包都提供了从线上数据库获取股票数据的方法。如果非得在其中找出一个最好的，quantmod当之无愧。譬如下载沪市大盘数据，代码可以是：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod) &#10;SSE &amp;lt;- getSymbols(&amp;quot;000001.SS&amp;quot;,auto.assign=FALSE) &#10;head(SSE) &#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;或者：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod) &#10;setSymbolLookup(SSE=list(name=&amp;quot;000001.SS&amp;quot;, src=&amp;quot;yahoo&amp;quot;)) &#10;getSymbols(&amp;quot;SSE&amp;quot;) &#10;head(SSE) &#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;以上是Jeff Ryan（quantmod作者）推荐过的方法。不过，后来JoshuaUlrich在他的邮件中给出了一个更简洁的方法：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod) &#10;getSymbols(&amp;quot;^SSEC&amp;quot;) &#10;head(SSEC) &#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;虽然quantmod的包出自Jeff Ryan之手，显而易见，在这一点上Joshua Ulrich是青出于蓝而胜于蓝。&lt;/p&gt;&#10;</description></item><item><title>quantmod：R中的金融分析包</title><link>https://gewutang.cn/2011/04/10/notes-about-quantmod/</link><pubDate>Sun, 10 Apr 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/04/10/notes-about-quantmod/</guid><description>&lt;p&gt;大概两年前，写了一份quantmod的读书笔记。当时只是草草完成，不足之处很多。于是，一直以来都有修缮之心，思忖良久，前段时间终于开始着手，目前大致确定了内容。先将完成的部分记在&lt;a class="link" href="https://github.com/dengyishuo/Notes/tree/master/quantmod" target="_blank" rel="noopener"&#10; &gt;这里&lt;/a&gt;。&lt;/p&gt;&#10;</description></item></channel></rss>