<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Luxor on 格物堂</title><link>https://gewutang.cn/tags/luxor/</link><description>Recent content in Luxor on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 10 Oct 2017 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/luxor/index.xml" rel="self" type="application/rss+xml"/><item><title>前进测试可视化策略评估的重要工具</title><link>https://gewutang.cn/2017/10/10/luxor-sample-walk-forward/</link><pubDate>Tue, 10 Oct 2017 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2017/10/10/luxor-sample-walk-forward/</guid><description>&#10;&#10;&#10;&lt;p&gt;在量化交易中，理解指标的内涵与策略的稳健性同样重要。MACD（移动平均收敛散度）作为经典的趋势动量指标，其核心价值在于通过短期与长期价格趋势的差异，捕捉市场的潜在转折与动量变化。&lt;/p&gt;&#10;&lt;p&gt;MACD 由四个部分构成：快速 EMA（通常为 12 日）、慢速 EMA（通常为 26 日）、MACD 线（快速 EMA 与慢速 EMA 的差值）以及信号线（MACD 线的 9 日 EMA）。其主要用途包括：判断趋势方向（MACD 线在零轴上方为多头趋势，下方为空头趋势）、识别趋势强度（MACD 线与价格的背离暗示动量衰竭）、确认交易信号（信号线与 MACD 线的交叉或与零轴的交叉）。&lt;/p&gt;&#10;&lt;p&gt;而前进测试（Walk Forward Testing）则是评估策略稳健性的关键方法，它通过将历史数据划分为连续的训练期与测试期，滚动优化参数并验证效果，有效降低过拟合风险。本文解析的代码便聚焦于前进测试结果的可视化，以直观呈现策略在训练期的表现，为策略评估提供依据。&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;#&#10;# 基于Jaekle &amp;amp; Tamasini所著《A new approach to system development and portfolio optimisation》&#10;#&#10;# 前进测试图表示例&#10;&#10;# 加载quantstrat包，该包提供量化策略开发、回测及可视化工具&#10;require(&amp;#39;quantstrat&amp;#39;)&#10;&#10;# 构建完整路径&#10;data_path &amp;lt;- paste0(path.package(&amp;quot;quantstrat&amp;quot;), &amp;#39;/data/luxor.wfa.ples.RData&amp;#39;)&#10;&#10;# 加载数据文件&#10;if (file.exists(data_path)) {&#10; load(data_path) # 加载文件中的审计环境数据（如策略参数、绩效记录等）&#10; ls() # 查看加载的对象（通常包含前进测试的审计信息）&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;data_path&amp;quot; &amp;quot;luxoraudit&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 绘制前进测试训练期的图表&#10;# 数据来源为quantstrat包内置的Luxor系统前进测试示例数据（luxor.wfa.ples.RData）&#10;chart.forward.training(luxoraudit)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2017/10/10/luxor-sample-walk-forward/index_files/figure-html/WalkForward-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;p&gt;这段代码的核心意图是通过可视化方式展示前进测试中训练期的策略表现，为策略评估提供直观依据。代码首先加载 quantstrat 包，该包是量化策略开发的核心工具，提供了从策略构建到回测可视化的完整功能。随后，代码指定了前进测试结果数据的路径 ——luxor.wfa.ples.RData，该数据源自《A new approach to system development and portfolio optimisation》一书中的 Luxor 系统，包含了前进测试的关键结果（如不同训练期的参数、收益、风险指标等）。&lt;/p&gt;&#10;&lt;p&gt;通过调用chart.forward.training函数，代码将加载的数据转化为直观的图表。前进测试的核心是 “滚动训练与验证”，即把历史数据划分为多个连续的训练期（用于优化策略参数）和测试期（用于验证参数有效性）。该函数专注于训练期的可视化，可能展示不同训练阶段的参数表现、收益曲线或风险指标分布，帮助交易者判断策略参数在不同市场环境下的稳定性，识别是否存在过拟合（如某训练期参数表现极好但其他时期失效）。&lt;/p&gt;&#10;&lt;p&gt;前进测试作为策略评估工具，优势在于通过滚动验证减少过拟合风险 —— 策略参数需在多个独立测试期表现稳定，而非仅适配单一历史区间，更贴近实盘环境。但其劣势在于计算成本较高，尤其是参数范围较广时，需反复训练与验证；此外，训练期与测试期的划分（如周期长度、滚动方式）可能影响结果，主观选择不当仍可能引入偏差。&lt;/p&gt;&#10;&lt;p&gt;对于前进测试本身，可探索动态周期划分（如根据市场波动率调整训练期长度），或引入更严格的统计检验（如夏普比率的显著性测试），进一步提升评估可靠性。通过指标优化与评估方法改进的结合，可构建更稳健的量化交易系统。&lt;/p&gt;&#10;</description></item><item><title>日内时间窗口绩效分析与可视化</title><link>https://gewutang.cn/2015/10/10/luxor-sample-trade-graphs-timespan/</link><pubDate>Sat, 10 Oct 2015 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2015/10/10/luxor-sample-trade-graphs-timespan/</guid><description>&#10;&#10;&#10;&lt;p&gt;在量化交易中，分析交易策略在不同时间窗口的绩效表现至关重要，因为金融市场具有显著的日内周期性特征。不同时段的市场参与者结构、流动性水平、信息传递效率差异明显，导致同一策略在日内不同时间段的表现可能大相径庭。例如，美股市场开盘后的 30 分钟通常伴随着高波动率和大量订单流，趋势策略可能在此期间更有效；而午盘时段交投清淡，震荡策略或许更适用。通过系统地扫描不同时间窗口的绩效，交易者可以识别策略的 “最佳生效时段”，优化交易执行时间，减少无效信号干扰，提高资金使用效率。&lt;/p&gt;&#10;&lt;p&gt;此外，这种分析还能揭示策略的潜在弱点，例如仅在特定时段有效的策略可能存在过拟合风险，或对特定市场环境过度依赖，为策略的改进与风险控制提供依据。&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 基于Jaekle &amp;amp; Tamasini所著《A new approach to system development and portfolio optimisation》&#10;#&#10;# 3D时间跨度图表示例&#10;&#10;# 加载必要的包：quantstrat用于量化策略分析，rgl用于3D图形绘制&#10;require(quantstrat)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: quantstrat&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: quantmod&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: xts&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: zoo&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## Attaching package: &amp;#39;zoo&amp;#39;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from &amp;#39;package:base&amp;#39;:&#10;## &#10;## as.Date, as.Date.numeric&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: TTR&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by &amp;#39;quantmod&amp;#39;:&#10;## method from&#10;## as.zoo.data.frame zoo&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: blotter&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: FinancialInstrument&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: PerformanceAnalytics&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## Attaching package: &amp;#39;PerformanceAnalytics&amp;#39;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following object is masked from &amp;#39;package:graphics&amp;#39;:&#10;## &#10;## legend&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: foreach&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;require(rgl)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: rgl&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 加载Luxor策略的时间跨度数据：包含2002-2008年24x24时间窗口的测试结果&#10;# 数据路径为quantstrat包安装目录下的data文件夹&#10;load(paste0(&#10; path.package(&amp;#39;quantstrat&amp;#39;), # 获取quantstrat包的安装路径&#10; &amp;#39;/data/luxor.timespan.24x24.2002-2008.RData&amp;#39;) # 拼接数据文件完整路径&#10;)&#10;&#10;# 数据预处理：将stats数据框中存储参数的列重命名为&amp;quot;timespan&amp;quot;，便于后续处理&#10;names(stats)[names(stats)==&amp;#39;testPackListPRL[[k]]$parameters&amp;#39;] &amp;lt;- &amp;#39;timespan&amp;#39;&#10;&#10;# 分割timespan列：timespan格式可能为&amp;quot;开始时间/结束时间&amp;quot;，用strsplit分割为列表&#10;stats$tmp = strsplit(as.character(stats$timespan), &amp;#39;/&amp;#39;)&#10;&#10;# 从分割后的列表中提取&amp;quot;from&amp;quot;（开始时间）和&amp;quot;to&amp;quot;（结束时间），存储为新列&#10;stats$from &amp;lt;- sapply(stats$tmp, FUN = &amp;#39;[&amp;#39;, 1) # 提取列表中第一个元素作为开始时间&#10;stats$to &amp;lt;- sapply(stats$tmp, FUN = &amp;#39;[&amp;#39;, 2) # 提取列表中第二个元素作为结束时间&#10;&#10;# 从开始时间和结束时间中提取小时数：假设时间格式含&amp;quot;T小时:分钟&amp;quot;，用gsub匹配并提取小时&#10;stats$start &amp;lt;- as.numeric(gsub(&amp;#39;T([0-9]+):[0-9]+&amp;#39;, x = stats$from, &amp;#39;\\1&amp;#39;)) # 提取开始小时&#10;stats$stop &amp;lt;- (as.numeric(gsub(&amp;#39;T([0-9]+):[0-9]+&amp;#39;, x = stats$to, &amp;#39;\\1&amp;#39;)) + 1) %% 24 # 提取结束小时并调整（+1取整，%%24确保在0-23范围内）&#10;&#10;# 注释部分：交易数据为EST时区（GMT-4），可将小时数加4转换为GMT时区（按需启用）&#10;# stats$start&amp;lt;-(stats$start+4)%%24&#10;# stats$stop&amp;lt;-(stats$stop+4)%%24&#10;&#10;# 生成3D可视化图形：展示不同时间窗口（start和stop）与绩效指标的关系&#10;tradeGraphs(&#10;&#9;stats, # 输入数据框&#10;&#9;free.params = c(&amp;#39;start&amp;#39;, &amp;#39;stop&amp;#39;), # 自由参数：时间窗口的开始和结束小时&#10;&#9;statistics = c(&amp;#39;Net.Trading.PL&amp;#39;, &amp;#39;maxDrawdown&amp;#39;, &amp;quot;Avg.Trade.PL&amp;quot;, &amp;#39;Num.Trades&amp;#39;, &amp;quot;Profit.Factor&amp;quot;), # 需展示的绩效指标：净交易收益、最大回撤、平均每笔收益、交易次数、盈利因子&#10;&#9;title = &amp;#39;Luxor Intraday TimeWindow Scan&amp;#39; # 图形标题：Luxor日内时间窗口扫描&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;这段代码的核心思路是通过量化分析与 3D 可视化，探究 Luxor 日内交易策略在不同时间窗口（即日内交易的开始与结束小时）下的绩效表现。&lt;/p&gt;&#10;&lt;p&gt;其核心逻辑是：先加载包含策略在 2002-2008 年不同时间窗口测试结果的数据，再对数据进行预处理（提取时间窗口的开始与结束小时），最后通过 3D 图形直观展示不同时间窗口与关键绩效指标（如净收益、最大回撤等）的关系，从而识别出最优的日内交易时段。这种分析有助于理解策略在日内不同时段的适应性，为优化交易执行时间提供依据。&lt;/p&gt;&#10;&lt;p&gt;这段代码为日内时间窗口的绩效分析提供了一个基础性框架，但仍然有优化空间。我们可以考虑加入统计显著性检验，通过 t 检验或 bootstrap 方法验证不同时间窗口绩效差异是否偶然，避免因随机波动误判最优窗口。其次，可扩展时间窗口的粒度，例如从小时级细化到 15 分钟级，更精准捕捉日内波动特征。此外，结合市场环境变量（如波动率、成交量）进行条件分析，探究不同市场状态下最优时间窗口的差异，能提升策略的适应性。&lt;/p&gt;&#10;&lt;p&gt;在可视化方面，可增加交互功能（如鼠标悬停显示具体数值、动态筛选指标），并加入基准线（如全时段平均绩效），使对比更直观。最后，引入交易成本（如滑点、手续费）对绩效的影响分析，能让结果更贴近实盘场景，为实际交易决策提供更可靠的参考。&lt;/p&gt;&#10;</description></item></channel></rss>