<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>投资 on 格物堂</title><link>https://gewutang.cn/tags/%E6%8A%95%E8%B5%84/</link><description>Recent content in 投资 on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 15 May 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/%E6%8A%95%E8%B5%84/index.xml" rel="self" type="application/rss+xml"/><item><title>用R实现滚动单因子模型</title><link>https://gewutang.cn/2025/05/15/roll-smf/</link><pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2025/05/15/roll-smf/</guid><description>&#10;&#10;&#10;&lt;div id="引言" class="section level2"&gt;&#10;&lt;h2&gt;引言&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div id="单因子模型" class="section level2"&gt;&#10;&lt;h2&gt;单因子模型&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div id="滚动单因子模型的-r-代码" class="section level2"&gt;&#10;&lt;h2&gt;滚动单因子模型的 R 代码&lt;/h2&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取最新市场数据(2024-01-01至2025-05-15)&#10;getSymbols(c(&amp;quot;TSLA&amp;quot;, &amp;quot;^IXIC&amp;quot;), from=&amp;quot;2024-01-01&amp;quot;, src=&amp;quot;yahoo&amp;quot;)&#10;tsla_ret &amp;lt;- dailyReturn(Ad(TSLA))&#10;nasdaq_ret &amp;lt;- dailyReturn(Ad(IXIC))&#10;&#10;# 改进版滚动SFM函数&#10;# 高效版滚动SFM函数&#10;rollSFM &amp;lt;- function(Ra, Rb, window = 60) {&#10; # 输入验证&#10; n &amp;lt;- length(Ra)&#10; if (n != length(Rb)) stop(&amp;quot;Ra和Rb的长度必须相同&amp;quot;)&#10; if (n &amp;lt; window) stop(&amp;quot;数据长度必须大于或等于窗口大小&amp;quot;)&#10; &#10; # 预计算累积量用于快速计算&#10; cum_sum_x &amp;lt;- cumsum(Rb)&#10; cum_sum_y &amp;lt;- cumsum(Ra)&#10; cum_sum_xy &amp;lt;- cumsum(Ra * Rb)&#10; cum_sum_x2 &amp;lt;- cumsum(Rb^2)&#10; &#10; # 初始化结果向量&#10; result_size &amp;lt;- n - window + 1&#10; alpha &amp;lt;- numeric(result_size)&#10; beta &amp;lt;- numeric(result_size)&#10; r_squared &amp;lt;- numeric(result_size)&#10; &#10; # 计算每个窗口的统计量&#10; for (i in 1:result_size) {&#10; end_idx &amp;lt;- i + window - 1&#10; start_idx &amp;lt;- end_idx - window + 1&#10; &#10; # 快速计算窗口内的统计量&#10; sum_x &amp;lt;- cum_sum_x[end_idx] - if(start_idx &amp;gt; 1) cum_sum_x[start_idx - 1] else 0&#10; sum_y &amp;lt;- cum_sum_y[end_idx] - if(start_idx &amp;gt; 1) cum_sum_y[start_idx - 1] else 0&#10; sum_xy &amp;lt;- cum_sum_xy[end_idx] - if(start_idx &amp;gt; 1) cum_sum_xy[start_idx - 1] else 0&#10; sum_x2 &amp;lt;- cum_sum_x2[end_idx] - if(start_idx &amp;gt; 1) cum_sum_x2[start_idx - 1] else 0&#10; &#10; # 计算均值&#10; mean_x &amp;lt;- sum_x / window&#10; mean_y &amp;lt;- sum_y / window&#10; &#10; # 计算回归系数&#10; numerator &amp;lt;- sum_xy - sum_x * mean_y&#10; denominator &amp;lt;- sum_x2 - sum_x * mean_x&#10; &#10; # 避免除以零&#10; if (denominator == 0) {&#10; beta[i] &amp;lt;- NA&#10; alpha[i] &amp;lt;- NA&#10; r_squared[i] &amp;lt;- NA&#10; } else {&#10; beta[i] &amp;lt;- numerator / denominator&#10; alpha[i] &amp;lt;- mean_y - beta[i] * mean_x&#10; &#10; # 计算R²&#10; pred_y &amp;lt;- alpha[i] + beta[i] * Rb[start_idx:end_idx]&#10; ss_total &amp;lt;- sum((Ra[start_idx:end_idx] - mean_y)^2)&#10; ss_residual &amp;lt;- sum((Ra[start_idx:end_idx] - pred_y)^2)&#10; r_squared[i] &amp;lt;- 1 - (ss_residual / ss_total)&#10; }&#10; }&#10; &#10; # 返回结果数据框&#10; data.frame(&#10; Date = if(is.ts(Ra) || is.zoo(Ra)) index(Ra)[window:n] else window:n,&#10; Alpha = alpha,&#10; Beta = beta,&#10; R_squared = r_squared&#10; )&#10;}&#10;&#10;# 计算滚动参数&#10;results &amp;lt;- rollSFM(tsla_ret, nasdaq_ret)&#10;tail(results) # 查看最近6个窗口结果&#10;&#10;&#10;&#10;# 创建绘图主题&#10;finance_theme &amp;lt;- theme_minimal() +&#10; theme(&#10; plot.title = element_text(size=14, face=&amp;quot;bold&amp;quot;),&#10; axis.title = element_text(size=12),&#10; panel.grid.minor = element_blank(),&#10; legend.position = &amp;quot;top&amp;quot;&#10; )&#10;&#10;# Beta系数时序图&#10;ggplot(results, aes(x=Date, y=Beta)) +&#10; geom_line(color=&amp;quot;#2b8cbe&amp;quot;, size=1) +&#10; geom_hline(yintercept=1, linetype=&amp;quot;dashed&amp;quot;, color=&amp;quot;#e34a33&amp;quot;) +&#10; labs(title=&amp;quot;TSLA相对NASDAQ的60日滚动Beta系数&amp;quot;,&#10; x=&amp;quot;日期&amp;quot;, y=&amp;quot;Beta系数&amp;quot;) +&#10; scale_x_date(labels=date_format(&amp;quot;%Y-%m&amp;quot;)) +&#10; finance_theme&#10;&#10;# Alpha-Beta联合分布图&#10;ggplot(results, aes(x=Beta, y=Alpha)) +&#10; geom_point(aes(color=R_squared), size=3) +&#10; scale_color_gradient(low=&amp;quot;#fee8c8&amp;quot;, high=&amp;quot;#e34a33&amp;quot;, &#10; name=&amp;quot;R平方值&amp;quot;) +&#10; geom_vline(xintercept=1, linetype=&amp;quot;dotted&amp;quot;) +&#10; geom_hline(yintercept=0, linetype=&amp;quot;dotted&amp;quot;) +&#10; labs(title=&amp;quot;TSLA Alpha-Beta分布（60日窗口）&amp;quot;,&#10; x=&amp;quot;系统性风险(Beta)&amp;quot;, y=&amp;quot;超额收益(Alpha)&amp;quot;) +&#10; finance_theme&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>从历史数据看今日股市</title><link>https://gewutang.cn/2012/11/27/historical-data-and-todays-stock-market/</link><pubDate>Tue, 27 Nov 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/11/27/historical-data-and-todays-stock-market/</guid><description>&lt;p&gt;在股市发展史上，人性的贪婪和恐惧总是交替出现的。如果我们假设股市存在一个潜在的合理增长线，那么，贪婪和恐惧则周期性地驱动着股市围绕潜在合理增长线上下波动。在这个假设下，找到潜在的合理增长线、最大偏离幅度及偏离持续期对于我们进行投资就显得很有意义。&lt;/p&gt;&#10;&lt;p&gt;观察一下1999年-2012年中国股市数据的直方图和经验累积分布函数图。我将大于&lt;code&gt;quantile(ssec,p=0.9)&lt;/code&gt;的数据定义为异常值（下图中的黑点部分）。剔除异常值数据之后，拟合出股市的潜在合理增长线（蓝色线）&#10;。&#10;图形显示，中国股市已经步入低估时代（恐惧驱动的时代）一段时间了，然而，还没有见底。未来的底部可能偏离潜在合理增长线在1.5倍标准差附近。&lt;/p&gt;&#10;&lt;p&gt;相关R代码为：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod)&#10;getSymbols(&amp;quot;^SSEC&amp;quot;,from=&amp;quot;1991-01-01&amp;quot;)&#10;ssec=coredata(Cl(SSEC))&#10;&#10;layout(m=matrix(c(1,2,&#10; 3,3),nc=2,byrow=T))&#10;&#10;hist(ssec,prob=T)&#10;lines(density(ssec))&#10;&#10;plot(ecdf(ssec))&#10;abline(h=0.9,lty=2)&#10;abline(v=quantile(ssec,0.9),lty=2)&#10;&#10;plot(ssec,pch=20)&#10;points((1:length(ssec))[ssec&amp;lt; =quantile(ssec,0.9)],ssec[ssec&amp;lt;=quantile(ssec,0.9)],col=&amp;quot;red&amp;quot;,pch=20)&#10;l=lm(ssec[ssec&amp;lt;=quantile(ssec,0.9)]~(1:length(ssec))[ssec&amp;lt;=quantile(ssec,0.9)])&#10;abline(l,col=&amp;quot;blue&amp;quot;)&#10;&#10;h=fitted(l)+2*sd(residuals(l))&#10;lines((1:length(ssec))[ssec&amp;lt;=quantile(ssec,0.9)],h,col=&amp;quot;green&amp;quot;)&#10;&#10;h=fitted(l)-2*sd(residuals(l))&#10;lines((1:length(ssec))[ssec&amp;lt;=quantile(ssec,0.9)],h,col=&amp;quot;green&amp;quot;)&#10;dev.off()&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item><item><title>R与量化投资分析入门书单（更新....）</title><link>https://gewutang.cn/2011/05/31/books-on-quantative-investment/</link><pubDate>Tue, 31 May 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/05/31/books-on-quantative-investment/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;David Ruppert：Statistics and Data Analysis for Financial Engineering&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Stefano M. Iacus：Option Pricing and Estimation of Financial Models with R&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Jon Danielsson：Financial Risk Forecasting: The Theory and Practice of Forecasting Market Risk with Implementation in R and Matlab&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Ngai Hang Chan：Time Series: Applications to Finance with R and S-Plus(R)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>