<?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/%E8%82%A1%E5%B8%82%E6%8B%90%E7%82%B9/</link><description>Recent content in 股市拐点 on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 06 Sep 2011 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/%E8%82%A1%E5%B8%82%E6%8B%90%E7%82%B9/index.xml" rel="self" type="application/rss+xml"/><item><title>NASDAQ有泡沫吗</title><link>https://gewutang.cn/2011/09/06/demo-about-lppl/</link><pubDate>Tue, 06 Sep 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/09/06/demo-about-lppl/</guid><description>&lt;h2 id="lppl模型是什么"&gt;&lt;a href="#lppl%e6%a8%a1%e5%9e%8b%e6%98%af%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;LPPL模型是什么&#10;&lt;/h2&gt;&lt;p&gt;LPPL（对数周期性幂律）模型是由Didier Sornette等学者提出的金融市场泡沫检测模型，用于识别资产价格在崩盘前的非线性加速增长模式。该模型结合了幂律增长和对数周期性振荡，被广泛应用于金融泡沫预警和临界点预测。&lt;/p&gt;&#10;&lt;p&gt;模型的核心是资产价格演化方程：&lt;/p&gt;&#10;&lt;p&gt;$$&#10;\ln p(t) = A + B(t_c - t)^\beta \left[1 + C\cos\left(\omega \ln(t_c - t) + \phi\right)\right]&#10;$$&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(t_c\)&lt;/code&gt; 是临界时间（预测的崩盘时间）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\beta\)&lt;/code&gt; 是幂律指数&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\omega\)&lt;/code&gt; 是振荡频率（典型值5-15）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(C\)&lt;/code&gt; 是振荡幅度&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\phi\)&lt;/code&gt; 是相位参数&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;其中： &lt;code&gt;\(0 \lt \beta \lt 1\)&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;LPPL模型具有如下特征：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;价格加速增长&#10;&lt;ul&gt;&#10;&lt;li&gt;幂律项 &lt;code&gt;\((t_c - t)^\beta\)&lt;/code&gt; 描述价格超指数增长。&lt;/li&gt;&#10;&lt;li&gt;典型泡沫阶段 &lt;code&gt;\(\beta \in (0,1)\)&lt;/code&gt;，反映增长速率随时间递增。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;对数周期振荡&#10;&lt;ul&gt;&#10;&lt;li&gt;其中 &lt;code&gt;\(cos\left[\omega\ln\left(t_{c}-t\right)\right]\)&lt;/code&gt; 反映投资者博弈产生的离散尺度不变性。&lt;/li&gt;&#10;&lt;li&gt;震荡幅度随 &lt;code&gt;\(t\to t_{c}\)&lt;/code&gt; 增大，体现市场分歧加剧。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;临界时间特性&#10;&lt;ul&gt;&#10;&lt;li&gt;当 &lt;code&gt;\(t\to t_{c}\)&lt;/code&gt; 时模型预测系统失稳。&lt;/li&gt;&#10;&lt;li&gt;实际崩盘可能发生在 &lt;code&gt;\(t_{c}\)&lt;/code&gt; 前6个月内。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="拟合模型"&gt;&lt;a href="#%e6%8b%9f%e5%90%88%e6%a8%a1%e5%9e%8b" class="header-anchor"&gt;&lt;/a&gt;拟合模型&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载依赖包&#10;library(quantmod)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：xts&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'zoo'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## as.Date, as.Date.numeric&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：TTR&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by 'quantmod':&#10;## method from&#10;## as.zoo.data.frame zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(DEoptim)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：parallel&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## DEoptim package&#10;## Differential Evolution algorithm in R&#10;## Authors: D. Ardia, K. Mullen, B. Peterson and J. Ulrich&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(ggplot2)&#10;&#10;# 获取纳斯达克指数数据（2010-01-01至2011-08-30）&#10;getSymbols(&amp;quot;^IXIC&amp;quot;, src = &amp;quot;yahoo&amp;quot;, from = &amp;quot;2010-01-01&amp;quot;, to = &amp;quot;2011-08-30&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;IXIC&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;nasdaq &amp;lt;- data.frame(&#10; t = 1:nrow(IXIC), &#10; ln_p = log(Ad(IXIC))&#10;)&#10;&#10;colnames(nasdaq)=c(&amp;quot;t&amp;quot;,&amp;quot;ln_p&amp;quot;)&#10;# 数据降噪（7日移动平均）&#10;nasdaq$ln_p_smooth &amp;lt;- stats::filter(nasdaq$ln_p, rep(1/7, 7), sides = 2)&#10;nasdaq &amp;lt;- na.omit(nasdaq) # 剔除NA值&#10;&#10;&#10;# 定义LPPL模型函数&#10;lppl_model &amp;lt;- function(params, t) {&#10; A &amp;lt;- params[&amp;quot;A&amp;quot;]; B &amp;lt;- params[&amp;quot;B&amp;quot;]; tc &amp;lt;- params[&amp;quot;tc&amp;quot;]&#10; beta &amp;lt;- params[&amp;quot;beta&amp;quot;]; C &amp;lt;- params[&amp;quot;C&amp;quot;]; omega &amp;lt;- params[&amp;quot;omega&amp;quot;]; phi &amp;lt;- params[&amp;quot;phi&amp;quot;]&#10; term &amp;lt;- pmax(tc - t, 1e-6) # 防止出现负数&#10; A + B * term^beta + C * term^beta * cos(omega * log(term) + phi)&#10;}&#10;&#10;# 定义损失函数（均方误差）&#10;loss &amp;lt;- function(params) {&#10; pred &amp;lt;- lppl_model(params, nasdaq$t)&#10; if (any(is.na(pred))) return(Inf)&#10; mean((pred - nasdaq$ln_p_smooth)^2, na.rm = TRUE)&#10;}&#10;&#10;# 参数约束范围&#10;lower &amp;lt;- c(&#10; A = min(nasdaq$ln_p_smooth), &#10; B = -2, &#10; tc = max(nasdaq$t) + 1, &#10; beta = 0.01, &#10; C = 0, &#10; omega = 6, &#10; phi = 0&#10;)&#10;&#10;upper &amp;lt;- c(&#10; A = max(nasdaq$ln_p_smooth), &#10; B = 0, &#10; tc = max(nasdaq$t) * 1.2, &#10; beta = 0.99, &#10; C = 0.5, &#10; omega = 13, &#10; phi = 2 * pi&#10;)&#10;&#10;&#10;# 全局优化（差分进化算法）&#10;set.seed(123)&#10;de_result &amp;lt;- DEoptim(&#10; fn = loss, &#10; lower = lower, &#10; upper = upper, &#10; control = list(&#10; itermax = 500, &#10; NP = 100, &#10; trace = FALSE&#10; )&#10;)&#10;&#10;# 局部优化（L-BFGS-B）&#10;final_params &amp;lt;- optim(&#10; de_result$optim$bestmem, &#10; fn = loss, &#10; method = &amp;quot;L-BFGS-B&amp;quot;,&#10; lower = lower, &#10; upper = upper&#10;)$par&#10;&#10;# 输出参数估计结果&#10;cat(&amp;quot;LPPL模型参数估计结果：\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## LPPL模型参数估计结果：&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;print(round(final_params, 4))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## A B tc beta C omega phi &#10;## 7.9574 -0.0009 459.8781 0.9167 0.0000 7.7609 5.3808&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="结果解读"&gt;&lt;a href="#%e7%bb%93%e6%9e%9c%e8%a7%a3%e8%af%bb" class="header-anchor"&gt;&lt;/a&gt;结果解读&#10;&lt;/h2&gt;&lt;p&gt;从模型结果可以看出：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;临界时间：$t_c$若输出值为&lt;code&gt; round(final_params,4)$tc&lt;/code&gt;，需结合市场背景评估泡沫风险；&lt;/li&gt;&#10;&lt;li&gt;震荡频率：$\omega$介于6-13区间符合典型泡沫特征；&lt;/li&gt;&#10;&lt;li&gt;衰减指数: &lt;code&gt;\(\beta\)&lt;/code&gt; 接近&lt;code&gt; round(final_params,4)$beta&lt;/code&gt;表明价格波动趋于临界点时分歧加大。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="模型结果可视化"&gt;&lt;a href="#%e6%a8%a1%e5%9e%8b%e7%bb%93%e6%9e%9c%e5%8f%af%e8%a7%86%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;模型结果可视化&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 生成预测值&#10;nasdaq$pred &amp;lt;- lppl_model(final_params, nasdaq$t)&#10;&#10;# 绘制拟合曲线&#10;ggplot(nasdaq, aes(x = t)) +&#10; geom_line(aes(y = ln_p, color = &amp;quot;原始对数价格&amp;quot;), alpha = 0.5) +&#10; geom_line(aes(y = ln_p_smooth, color = &amp;quot;平滑序列&amp;quot;), linetype = &amp;quot;dashed&amp;quot;) +&#10; geom_line(aes(y = pred, color = &amp;quot;LPPL拟合&amp;quot;), linewidth = 1) +&#10; scale_color_manual(values = c(&amp;quot;原始对数价格&amp;quot; = &amp;quot;grey&amp;quot;, &amp;quot;平滑序列&amp;quot; = &amp;quot;blue&amp;quot;, &amp;quot;LPPL拟合&amp;quot; = &amp;quot;red&amp;quot;)) +&#10; labs(&#10; title = &amp;quot;纳斯达克指数LPPL模型拟合效果（2020-2025）&amp;quot;,&#10; x = &amp;quot;交易日序数&amp;quot;, &#10; y = &amp;quot;对数价格&amp;quot;&#10; ) +&#10; theme_minimal() +&#10; theme(legend.position = &amp;quot;top&amp;quot;, plot.title = element_text(hjust = 0.5))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2011/09/06/demo-about-lppl/index_files/figure-html/unnamed-chunk-2-1.png" width="672" /&gt;&#10;</description></item></channel></rss>