使用 SDK 2.0 优化策略参数(逐步说明)

From FxCodeBaseWiki
Jump to: navigation, search

简介

本文将逐步指导您使用 Indicore SDK 2.0 对策略参数进行回溯测试和优化。

本文将以汇图宝中标准的 MA_Advisor(移动平均线策略)为例,但任何其他的标准或自定义策略也可以按照同样的方法进行回溯测试/优化。

关于回溯测试报告的特别说明

假设或模拟的表现结果存在某些局限性。与实际表现记录不同,模拟的结果并不代表实际交易表现。并且,由于未执行交易,如果存在某些市场因素(如缺少流动性)的影响,测试结果可能会对这种影响进行过少或过多的补偿。此外,模拟的交易程序一般是从事后分析的角度设计的,并不表示任何帐户将来或目前可能发生与所示情况类似的盈亏。

准备测试环境

Indicore SDK

下载和安装最新版的 Indicore SDK。使用默认安装文件夹。

您可通过以下链接下载最新版本:

下载 SDK 2.0 测试版

下载价格数据

您可以从 CodeBase 价格存档下载价格文件,或者使用来自报价管理器服务器的数据。

价格存档

为了使用 CodeBase 价格存档中的数据,您需要先下载和安装 7-Zip 压缩软件。该应用程序用于解压缩从 http://fxcodebase.com 下载的价格数据。

您可通过以下链接下载最新版本:

32 位版

64 位版

然后下载和安装价格数据:

  • 打开 CodeBase 价格存档页面,并将您需要优化策略的商品的数据保存至计算机上的某个文件夹中。
  • 打开该文件夹,找到下载的文件。对于 2010 年 EUR/USD 历史数据,存档文件的名称为 EURUSD-2010.7z。右键单击文件,在弹出菜单中,指向7-zip,然后单击 Extract Files(解压缩文件)
Backtest sbs1.png
  • 将会打开 7zip 压缩软件。在压缩软件窗口,选择 C:\Gehtsoft\IndicoreSDK\data 来解压缩文件并单击 OK (确定)
Backtest sbs2.png

报价管理器

您可以使用报价管理器服务器下载选定商品在所选时间周期内的 1 分钟报价数据。数据下载速度足够快。加载某种商品的全年 1 分钟数据(约 30 万根蜡烛线)通常不到 30 秒。

要从报价管理器中下载数据:

  1. 运行 Lua Strategy Debugger 应用程序(位于开始菜单的 Indicore SDK 应用程序组中)。
  2. Tools(工具)菜单中,选择 Load Quotes(加载报价)
    Optimize Load Quotes.png
  3. 将会出现 Load Quotes(加载报价)对话框。选择您想要下载价格数据的商品及其年份,并单击 OK(确定)
    Luadebugging6-2.PNG
  4. 加载数据时请稍候片刻:
    Luadebugging6-3.PNG

相关介绍就是这些。现在,您可以使用这些下载的数据,为所选的商品和时间周期进行优化。

准备在调试器内运行策略

使用 Lua Strategy Debugger 来安装策略

自 2011 年 4 月 26 日起,Indicore SDK 2.0(测试更新版 2)发布了一个新的命令:引进了 File(文件)->Install Custom Strategy(安装自定义策略)。现在,您可以在任何文件夹中保存策略,然后使用该命令将策略安装至正确位置。

SDK 2.0 安装完毕时,没有任何既有策略。您必须在调试前建立或安装一个策略:

Dbg s install step1.png

单击调试器的 File(文件)菜单下的 Install Custom Strategy(安装自定义策略):

Dbg s install step2.png

将会出现打开文件对话框。选择您想要进行调试/回溯测试/优化的 Lua 策略文件,并单击“打开”:

Dbg s install step3.png

相关介绍就是这些。现在,策略安装完毕。选择您想要执行的操作,可选择所安装的策略:

Dbg s install step4.png

手动安装策略

您也可以只将文件复制至适当位置。

将您想要优化的策略复制至下述文件夹:C:\Gehtsoft\IndicoreSDK\strategies。我们将要优化标准的汇图宝 MA_Advisor(移动平均线策略),因此:

  • 在资源管理器中打开以下任一文件夹:C:\Gehtsoft\IndicoreSDK\strategies\standard 或者 C:\Program Files\Candleworks\FXTS2.Dev\Strategies\Standard\
  • 找到下列文件:ma_advisor.luama_advisor.lua.rc
  • 复制这两个文件。
  • 在资源管理器中打开以下文件夹:C:\Gehtsoft\IndicoreSDK\strategies
  • 粘贴这两个文件。

复制 Fxcodebase 策略

如果想对来自 http://fxcodebase.com 的策略进行回溯测试/优化,请:

  • 将策略保存至 C:\Gehtsoft\IndicoreSDK\strategies
  • 如果策略需要一个或多个自定义指标,将所有指标保存至 C:\Gehtsoft\IndicoreSDK\indicators

运行调试器

现在运行 Lua Strategy Debugger 应用程序(位于开始菜单的 Indicore SDK 应用程序组中)。

对策略进行回溯测试

为什么要先进行回溯测试?

首先,您应该检查策略运行速度是否足以让您成功完成优化。它还将使您了解优化该特定策略的效果。

配置回溯测试

  • 在调试器中,单击 Tools(工具)->Check Performance/Backtest(检查性能/回溯测试)。将会出现策略列表。
  • 选择您想进行回溯测试的策略(在我们的示例中即为 MA_ADVISOR),然后单击 OK(确定)。将会出现回溯测试配置对话框。
Backtest sbs3.png
  • 首先,指定模拟参数。我们的策略仅针对一种商品,因此我们将仅配置 First Instrument Price Source(第一种商品的价格来源)参数。将光标放在参数值字段中,并单击省略号 (...) 按钮。您将看到 Choose Price Source(选择价格来源)对话框。
    Luadebugging6-1.png
    您可以单击 File(文件)并选择之前保存的价格文件,或者单击 Quotes Manager(报价管理器)以使用之前从报价管理器下载的数据。然后单击 OK(确定)
  • 其余模拟参数保持默认值。默认参数设置与使用无对冲设置的英国微型账户一致。
    • 要模拟对冲账户,请将 Are closing orders allowed?(是否允许平仓单?)Is hedging allowed?(是否允许对冲?)均设为 Yes(是)
    • 要模拟 FIFO(先进先出)账户,请将 Are closing orders allowed?(是否允许平仓单?)Is hedging allowed?(是否允许对冲?)均设为 No(否)
    • 要模拟微型账户,请将 MMR(维持保证金要求)设为 1Lot Size(每手大小)设为 100

配置策略参数

指定模拟参数后,还需要配置策略参数。为此,

  • Parameters(参数)对话框中,找到 Indicator Parameters(Price)(指标参数[价格])组,并将 Timeframe(时间框架)设为H1(1 小时)。以移动平均线为基础的策略在这样的时间框架内效果更好。
  • 然后找到 Indicator Parameters(Trading Parameters)(指标参数[交易参数])组,并将 Allow trading(允许交易)设为 Yes(是)。否则,该策略将不会交易。
Backtest sbs4.png

我是否可以对 1 分钟时间框架进行回溯测试?

可以。但是,在这种情况下,您需要配置图表视图。默认情况下,显示的是 1 小时报价。对 1 分钟策略而言,由于每根棒线都有许多交易,这样的图表可能不太方便。要配置图表视图,在 Parameters(参数)对话框中,找到 Chart Parameters(图表参数)组,并将 Timeframe(时间框架)设为 m1(1 分钟)。

开始回溯测试

要开始回溯测试,您应如上所述配置所有参数,并单击 OK(确定)

运行回溯测试

一旦开始回溯测试,可能会显示更多下载历史数据的提示。当策略需要交易历史(在我们的示例中即为 1 小时历史数据)时,即会出现这些提示。

Backtest sbs5.png

如果您要对全年范围的 H1 或更小时间框架的数据进行回溯测试,只需单击 Empty History(清空历史数据)。这种情况下,回溯测试器会使用模拟的分笔成交点收集历史数据。

如果使用更长的时间框架(日、周,等),单击 Empty History(清空历史数据)可能会导致策略启动交易延迟,因为要等回溯测试器收集完足够数据。这种情况下,您可以使用报价管理器服务器。在对话框中选择 Quotes Manager(报价管理器),单击 OK(确定),即可加载所需数据。

读取回溯测试结果

输出

首先,看一下调试器的 Output(输出)选项卡上的信息。

  • 自上一次启动后必须没有错误。
  • 策略必须没有调试输出,因为这会严重减缓优化速度。
  • 检查性能报告。使用 3.0GHz 处理器,回溯测试的时间不应超过 10 秒钟。否则优化的时间将会非常长。如果回溯测试时间超过了 10 秒钟,应先优化策略性能。请联系策略开发人员,如果您是开发人员,请先阅读以下文章:策略优化
Backtest sbs8.png

总体统计

然后,您可以通过 Statistics(统计)选项卡,检查策略的总体表现。

Backtest sbs9.png

成绩并不是非常好。该策略在一年中盈利 576 美元,但这一年最大亏损额达到了 2082.60 美元(参见最大余额跌幅)。

图表

最后,您可以通过检查 Chart(图表)选项卡,查看净值和余额曲线。

Backtest sbs10.png

净值曲线有涨有跌,因此策略盈利与否的机会均等。

结论

正如您所见,策略运行速度很快,足以在优化器中使用,而策略也确实需要优化。

优化策略参数

配置优化器

  • 在调试器中,单击 Tools(工具)->Optimize(优化)。将会出现策略列表。
  • 选择您想优化的策略(在我们的示例中即为 MA_ADVISOR),并单击 OK(确定)。将会出现优化配置。
  • 按照配置回溯测试参数的方法来配置这些模拟参数。
  • Profit Factor(盈利因素)设为默认优化参数。
Backtest sbs11.png

注意:要了解什么是 Method(方法)参数,请参阅优化策略参数

注意:如果您的计算机上正在执行对时间要求很高的应用程序(例如,用真实账户操作交易平台),请在 Agents number(代理数量)参数中指定一个较小的值。这将对优化进程的速度有些影响,但可以为处理器留出处理其他应用程序需要的时间。

注意:我们强烈推荐使用四核处理器(i5、i7)来优化策略。

配置策略参数

  • 首先,要决定必须优化哪些参数。在我们的示例中,有两个参数要优化:快速移动平均线的时间周期数和慢速移动平均线的时间周期数。从不同来源看,快速移动平均线的参数值范围在 3 至 12,慢速移动平均线的参数值范围在 13 至 30。让我们看一下其中哪个参数可以让 EUR/USD 在 2010 年获得最优结果。

请注意,可以优化的参数左边都有一个加号。单击该符号可以设定最小和最大值来搜索最优参数。

Backtest sbs12.png
  • 不要忘记将 Timeframe(时间框架)设为 H1(1 小时),并将 Allow Trading(允许交易)设为 Yes(是)

运行优化器

与回溯测试一样(#运行回溯测试),优化器同样会要求您提供历史数据。单击 Empty History(清空历史数据),或者按照回溯测试的操作选择历史数据。

优化的时间取决于:

  • 策略运行的速度;
  • 您选择进行优化的参数数量;
  • 需要优化的值的范围。

若使用单颗英特尔酷睿 i7 3GHz(8 核)处理器,对指定参数进行优化只需约 1 分钟。

读取优化结果

输出

Output(输出)显示的是内部优化参数和显示了最优结果的参数集的编号。

Backtest sbs13.png

结果表

优化结果表显示了所有经测试的参数集和每个参数集的统计信息。最优集合以绿色高亮显示,而那些完全没有盈利的参数集则用红色高亮显示。

Backtest sbs14.png

结果图

结果图显示优化结果。经过优化的任意两个参数均可作为轴。绿色的单元格显示了能够盈利的结果,红色单元格则用来显示无盈利的结果。您可以使用此图为另一轮遗传或穷举优化寻找更小的模式。

右键单击该图可配置视图。

双击单元格可在结果表内查找参数集。

Backtest sbs15.png

重测优化结果

使用最优参数对相同价格进行回溯测试

再次启动回溯测试,但这次在参数栏内输入 3 和 27(通过优化器找到的最优参数集)。

Backtest sbs16.png

让我们看一下 2010 年净值曲线的结果。

Backtest sbs17.png

是不是好多了呢?没有下跌,净值曲线稳步上扬。

无预约优化

无论如何,这些参数对 2010 年而言已经足够好了,但对于优化中未使用的 2011 年会如何呢?对这样的范围测试这些参数就称为无预约优化。让我们使用同样的参数进行测试并看一下 2011 年前三个月的回溯测试结果:

Backtest sbs18.png

所以,至少对于 2011 年的前 3 个月而言,这些参数还是足够好的。当然,您不应该假设这些参数在很久以后表现仍然这么好。以我们的经验看来,先前的优化结果最长的有效时间周期不应长于用来优化的时间周期的 1/4。也就是说,如果将 2010 年的数据用来优化,这些参数至多在 2011 年第一季度保持有用。

另请参阅

本文的其他语言版本

Language: English  • español • français • русский • 中文 • 中文(繁體)‎