900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 股票量化交易软件:自适应算法(第三部分)放弃优化

股票量化交易软件:自适应算法(第三部分)放弃优化

时间:2023-12-04 04:36:37

相关推荐

股票量化交易软件:自适应算法(第三部分)放弃优化

与上一篇文章一样,我将从分析上一个成功版本的缺点开始。在分析过程中发现了以下缺陷:

根据烛形分析生成仓位打开/关平信号,烛形的大小不稳定,它们有的大,有的小。基于下跌或上涨烛形的过度开仓并不少见。之后,下跌烛形和上涨烛形的数量变得相等,而未平仓的利润仍然是负数。那么,我们应该平仓还是等待获利?在前一种情况下,整个交易要点变得失去意义,算法开始接收损失。在后一种情况下,我们迟早会面临大幅回撤。

不管烛形的种类如何,价格都会变动。市场可能由下跌蜡烛主导,而价格上涨是因为上涨蜡烛比下跌蜡烛大。如果你有未平的仓位,这是特别不愉快的。

预测烛形未来大小的任务仍然没有解决。

有时,在开仓后,一种烛形的超额量在很长一段时间内不会减少,因此价格可能会继续逆着仓位方向波动,这会引起大幅回撤。最重要的是,目前还不清楚价格何时会反转,是否会完全反转。

仓位是按照时间开启的,有时,价格会在很长一段时间内保持不变,而随着新烛形的到来,仓位会继续打开。这样的时刻在节假日尤其危险,比如圣诞节,此时交易活跃度较低,算法只是因为时间而开仓。

算法设置应针对每个交易工具分别进行优化。设置这些参数的唯一原因是它们在历史上工作得更好。该算法通过了的回溯测试,但不是所有工具都通过。根据历史调整参数不是最好的解决方案。

目前还不清楚为什么它对某些交易工具的效果更好、更稳定,而对其他交易工具的效果更差。

当交易工具的行为发生变化导致算法遭受损失时,这也是未知的。事实上,不知道风险情况何时发生。我可以计算出这样一个时刻的概率,但这将是一个非常粗略的结果。

没有任何理论能够解释工具在未来将如何变化,以及为什么有必要使用明显次优的参数,以便价格序列的统计参数有波动的余地。这大大降低了盈利能力。

我认为以上所有的缺点都很严重。赫兹股票量化可以继续修改算法,一个接一个地改进特性,但最好是从中吸取一切精华,几乎从头开始开发。我将从修正理论基础开始。

该算法应该是完全自适应的,因此它将被开发用于货币和交易所市场,任何工具都能用。这一点很重要,因为人们应该清楚地了解一个市场与另一个市场的区别。如果有这样的理解,那么把它变成一个算法是有意义的。这一次,我切换到赫兹股票量化平台,因为它有一个功能更强大的策略测试器,不仅可以用于外汇交易工具,也可以用于交易所工具。

在开发过程中,您需要不断地回答这样一个问题:为什么某个参数具有某个值。在理想的情况下,在参数中设置任何值的原因都应该是合理的。

将蜡烛图转换为方块图

在赫兹股票量化新版本中,我决定不使用蜡烛图,因为它们的参数不稳定。更准确地说,只使用M1蜡烛,因为继续处理分时(tick)会导致资源消耗的显著增加。理想情况下,处理分时比较好。

我将分析N个点的块,这些块与 renko 类似,但它们基于稍微不同的算法。我已经在文章“什么是趋势,市场结构是基于趋势还是基于横盘”中提到了方块图及其在分析中的优势。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 1. 方块图表

图1显示了一个方块图表,方块图的一般视图显示在图的底部,而上图显示了方块在价格图上的外观。方块是从一个固定的时间构建到过去和未来的。在图中,固定时间显示为黄色垂直线。这是一个零点,从这个零点,方块被构建成过去和未来。构造算法是镜像的,事实上,这些方块是建立在过去和未来在进一步的开发中将是重要的。

之所以需要区块,是因为它们的主要参数是稳定的、可控的,最重要的是,利润/亏损主要取决于价格在各点上的变动。

市场模型

基本模式类似于我在前面的算法中使用的模式:下跌方块的数量与上涨方块的数量之间的局部偏差,以及随后回归到某种均衡状态。这种模式是统计的,所以赫兹股票量化需要从分析方块图的统计特征开始。为此,我开发了一个特殊的指标 Max_distribution,如文章“什么是趋势,市场结构是基于趋势还是平缓的”所述。

该指标衡量分块价格序列的统计参数。它能够同时显示多个块大小的数据。例如,赫兹股票量化想知道块大小在10到1000点之间的图表有什么统计特征。在指标设置中设置最小块大小,并通过乘法因子获得所有其他大小的块。

主要的指标操作模式是衡量方块的数量价格垂直移动的N步。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 2. 以24个步骤更改垂直块数

图2显示了一个示例。测量 N 步价格传递的块数。收集所需的样本数(例如,100),并定义平均值。这种分析是针对不同大小的区块进行的。

编辑

添加图片注释,不超过 140 字(可选)

图 3. 不同方块大小的平均振幅

图3显示了24个方块分步中垂直平均振幅分布的示例。每个直方图列是其块大小的平均振幅值。样本数量为1000个。最小块的测量值在左边,而最大块的测量值在右边。对于大小为0.00015的方块,价格分24步在1000个样本中垂直移动5.9个区块。对于大小为0.00967的方块,价格分24步在1000个样本中垂直移动4.2个块。

红线表示参考值,如果价格序列是随机游走,则会出现参考值。对于24步,这是垂直方向上3.868块的值。参考值是通过组合方法计算出来的,可以用图4中的表格清楚地表示出来。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 4. 计算24步的参考值

图4显示了在随机游走的情况下,价格平均分24步移动的区块的参考垂直值的计算。在最后一列中,此值转换为幂,随机游动的平均振幅趋于24^0.4526。可以为每个步骤数重新计算参考值。表格以.xlsx格式附在文章后面。

我对各种交易工具进行了研究:大约35种货币对、100多种股票、10种加密货币和大约10种商品,没有严重的偏差。一般来说,所有工具的图像都大致相似,平均幅度从快速增长的加密货币的7到货币对的3.8不等,一些低流动性股票甚至可能跌破3.8点。

平均振幅是在24步或其他一些步数中获得的,但这意味着什么?赫兹股票量化用正弦波转换成块形式来表示图表,如图5所示。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 5. 方块状正弦波

设块的大小为正弦波周期的一半,是24步,则周期数为48步。如果我们测量24步25个样本的平均振幅,我们得到24步10.33块的平均振幅。随着样本数的增加,平均振幅趋于12或步数除以2。价格序列不是正弦波,但正弦波便于交易。现在,如果我们在测量平均振幅时得到的值超过12,则块大小不够大,并且24个块不适合作为一半的周期。但小于12表示两个原因:方块太大,或者价格序列的趋势变化不像正弦波那样线性。我目前没有考虑趋势斜率,我稍后再做。

根据已开发的 Max_distribution 指标的读数,赫兹股票量化可以粗略估计价格序列与正弦波的相似程度。为了实现这一点,让我们看看正弦波的指标直方图是什么样子的。

编辑

添加图片注释,不超过 140 字(可选)

图 6. 正弦波平均振幅与块大小的关系

在图6中,赫兹股票量化可以看到,在小区块的情况下,价格以24个步骤垂直移动24个区块。但随着区块大小的增加,价格以24个步骤移动区块的数量变小了。当块大小与波动幅度相当时,垂直方向上的块数降为零。在图3中,最大值为5.9,趋向于参考值3.868。因此,价格序列可以表示为“噪声”正弦波,在某些尺度上总是具有某种趋势分量。也就是说,市场应该总是有一个当前表现为横盘的标度(反转概率高于趋势延续的标度)和一个当前表现为趋势的标度(延续概率高于反转的标度)。

我以前的一篇文章《什么是趋势?市场结构是基于趋势还是横盘》解释了采用趋势和横盘定义的原因。

使用 Max_distribution 指标,我测量了不同交易工具的平均垂直区块数,不仅是24个,而且还测量了其他步数。示例如图7所示。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 7. 平均振幅与样本步数的关系

图7中的白色列显示了从10到120的步数的测量运动幅度,每个测量的步数为2和1000个样本。红线表示给定步数的参考值。如我们所见,随着步数的增加,未观察到与主要趋势的显著偏差。测量值曲线的整体形状与参考曲线相似。测量值是使用 GBPUSD,但我也为其他工具做了研究。有许多交易工具的直方图值超过了参考值,但总的趋势仍然存在,可以用一个非线性方程来描述。

众所周知,市场不可能有稳定的简单规律。这意味着当前的趋势尺度在不断变化,同时,横盘尺度也会变得有趋势。

我将使用图7中24步的平均振幅,即 3.86。我假设运动是由趋势和类似正弦波的横盘部分组成。在这种情况下,可以计算平均振幅的趋势部分。为了实现这一点,24步的3.86*2=7.72个垂直块要四舍五入到8,因为这些块只能是整数值。如果赫兹股票量化到达趋势区域,那么价格在24步中垂直移动8个方块。当然,价格可以在24步中垂直移动24个方块大小,但这并不重要。我稍后再解释原因。

结果表明,价格在趋势区24步内垂直移动8个区块。这意味着在一个方向上有16个块,在另一个方向上有8个块。众所周知,趋势部分应紧跟在横盘部分之后,以便平均振幅保持稳定(在大量样本上相当稳定)。但市场不是正弦波。如图7所示,垂直块的数量随着步数的增加而增加。因此,我将假设在较少的步数中出现的与平均值的偏差返回到在较多的步数中的平均值。

图7中的图表允许我们定义价格在26、28、30、32和34个步数中的平均通过量:

26 步 = 3.98; 28 步 = 4.11; 30 步 = 4.2; 32 步 = 4.36.

在24步中,价格已经垂直移动了8个区块,但在28步中,它应该平均垂直移动4.1个区块,如果向下舍入到整数值,则为4个区块。这意味着,在接下来的4步中,可能从之前的4个块的移动中回滚(rollback)。市场并非如此可预测,事件不太可能按照这种情况发展。图7中的同一个图表允许赫兹股票量化定义价格在116步中垂直通过8个区块。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 8. 可能的场景

图8显示了两种可能的场景,这是两个极端的选择。它们不太可能出现,而且是为了形象化。最有可能的是,这些事件将遵循中间场景之一。现在最重要的是,我们赫兹股票量化知道平均每个步的价格应该通过多少。如我们所见,回滚越尖锐,回滚越深,反之亦然。

从长远来看,振幅趋于其平均值。对于24步,这是3.8个垂直块,而对于116步,这是8个垂直块。

这是模型的结构,它允许根据趋势移动参数和进一步的价格行为计算每个交易工具的回滚特性。趋势变动越剧烈,回退越快,它变得越深。趋势越平坦,回退越大,深度越浅。现在所有这些都可以用数字表示,以工具的统计参数为基础。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 9. 趋势运动与回滚深度

图9显示了它在真实图表上的外观。我们赫兹股票量化可以看到剧烈的波动和向左侧的剧烈的回滚,回滚深度超过60%。在右侧,有一个更平滑的波动和更长的回滚导致30%的回滚。这是因为价格在右图中经历了更多的步数,并且在运动形成过程中其幅度增加。

这种行为的原因不仅可以解释为价格序列具有它所遵循的平均振幅,而且还可以解释为资本的急剧流入/流出导致了剧烈的波动,其金额大大超过了当前的流动性。大量头寸开仓后,它也应当会平仓。谁拥有多少资金并不重要 —— 一个参与者还是几个参与者也是。如果我们立即全部平仓,价格会回到原来的水平,即回退100%。但如果考虑到流入的流动性,仓位逐渐平仓,那么较大的数量只会引起小的波动。交易者退出头寸的速度越快,他/她的资本产生的波动的回滚就越强烈。

重要的是,定价的基本特征证实了这种模式。

整个理论不在本节中描述,但足以据此开始开发算法。其余部分将在整个过程中进行描述。

跟踪趋势

与前面的算法一样,机器人要进行逆势交易,仓位由一系列订单组成。该算法的任务是尽可能精确地确定入口点,以生成序列开仓信号。理想情况下,信号在序列开始时产生的频率越高,单位时间内获得的利润就越多。这意味着信号应该是频繁的和高质量的。

机器人将分析下跌和上涨方块的数量,如果它发现上涨方块的数量与正常值有显著偏差,那么它就会为一系列卖出头寸生成一个信号。下跌方块也是如此,它们的偏离导致产生买入序列信号。

现在我要开发一个基本的算法,这个算法以后会修改,所以它的模块应该是灵活的。系列开始信号基于下跌/上涨方块超额百分比阈值。与前面的算法一样,要将分析的块数设置在从最小值到最大值的范围内。但是,这里这样做是为了其他目的。

开始和完成系列的阈值百分比

由于方块范围用于分析(例如,24-34),因此对每个块数使用固定的阈值百分比是不正确的。由24个区块和75%的主要区块组成的组合的概率不等于34个区块出现这种组合的概率。组合的概率是相同的,这意味着应用的阈值百分比应该是动态的,并且取决于这种组合的概率。

在设置中,阈值百分比是根据落入该范围的概率来设置的。然后应重新计算所需的块数。落入该范围的概率是用组合数学的规则来计算的。我创建了一个表,允许将概率转换为每个块数的阈值百分比。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 10. 概率表格

图10显示了重新计算落入开仓百分比范围的概率的表格。该表格假设100%的移动在0-16垂直块的范围内,持续16步。落入2.1%范围的概率(对于图10中的表格)意味着只有2.1%的移动通过10-16以16个步骤垂直分块。在设置中,设置落入该范围的概率,例如2.2,同时算法使用表格搜索小于或等于2.2的最接近值,并取该值对应的百分比。现在,它是 81.25%. 因此,每个块数都有其自己的阈值百分比。表格以.xlsx格式附在文章后面。

在以前的版本中,当未平仓的总利润低于阈值时,仓位关闭。这不是最好的解决方案,因为它会导致多个问题。因为我在这个版本中使用固定大小的块,所以当超额的百分比下降到必要的值时,可以关闭仓位。如果在固定数量的块上打开仓位,则在操作过程中样本中的块数会增加。

平仓阈值百分比也通过落在该范围内的概率来计算。但落入范围的概率是相反的,不过,这没有什么关系。该表有一个单独的列用于计算平仓百分比。假设我想在值大于或等于75时平仓,就要找到大于75的最接近值。对于16个区块,这是78.9,对应于平仓百分比阈值=62.5%。

在操作期间,由于新的块被关闭,因此样本中的块数增加。因此,只要有仓位打开,每个新块上的更多块的关闭百分比就会重新计算。

系列中所有头寸的获利都设置为预期的平仓点。这就是根据当前市场状态控制回滚的算法的实现方式。样本中在序列开始(趋势运动)后形成的块越多,产生的回滚越少。

目前阈值百分比的实现并不完美。它是在算法开发的一开始就开发出来的,稍后,我将修改这个方法。所有打开/关闭百分比应根据测量当前块数的平均振幅进行调整。在当前的版本中,我没有考虑到价格序列参数对于上涨和下跌的市场是不对称的。这在外汇市场可能并不重要,但对股市来说却很重要。我将在算法的未来版本中考虑这一点。

阈值百分比的计算方法已经被开发出来,所以现在赫兹股票量化可以不经过优化就回答关于所需阈值百分比的问题。为此建立了以下公式:

编辑

添加图片注释,不超过 140 字(可选)

;

Nb - 用于分析的方块数目;

aa - 根据给定块数的指标读数的平均振幅;

Ka - 平均振幅乘数比率. 对于正弦波,比率为 2. 但是,这个值应该为市场定制,这样我们就可以增加一点;

Kc - 计算平仓百分比的平均振幅乘数比率;

%open - 开启序列的百分比阈值.

赫兹股票量化只能对单个数量的块执行此过程,而其余的块则使用概率表重新计算。

也可以根据指标读数预先计算平仓百分比。

编辑

添加图片注释,不超过 140 字(可选)

;

计算平仓百分比的公式看起来是一样的,只使用不同的乘数因子 Kc。它应该等于1,并且可以自定义它。

基于平均振幅等于3.8的分析,您可以将24个区块的开启阈值百分比设置为66.67%。使用概率表重新计算其他值。

跟踪趋势

正如我之前提到的,市场没有稳定的模式和稳定的波动幅度。在一定数量的具有固定大小的块上分析趋势度是一个值得怀疑的解决方案。分析窗口应该是动态的,并且可以实时调整。将块数设置为24-28。

我为什么选择这样一个分析窗口?我是根据平均振幅=3.8选择这些值的。它们取决于阈值打开/关闭百分比。在一个信号之后有这个数量的块,我们在序列的开始处获得4个利润块。分析窗口中的块越多,算法就越精确。如果区块大小按比例改变,那么获得多少利润区块没有根本区别:4个或10个。然而,由于在每个新块处打开仓位,因此它们的数量随着操作精度的增加而增加。这将对结果产生负面影响。

接下来,我们需要定义最小块大小,以便进行分析。这些方块是根据形成的M1烛形构建的,最小离散化速率为1分钟。这些块不能做得太小,因为它们最终将在蜡烛内部构建,使得这样的分析毫无意义。因此,最小块大小将根据蜡烛的大小来确定。为了实现这一点,我们可以在一个大的时间段内使用ATR,比如1440分钟(一天)或更长的时间,并将其值乘以比率。2-5的比率应该是可以接受的,尽管这取决于交易工具的特点。

如果蜡烛的大小很不均匀,那么最好使用较大的比例。第二个标准是佣金和差价。4个方块的利润应该大大高于我们将支付的佣金。方块的大小越小,序列启动信号出现的频率就越高,我们可以赚取的利润也就越多。在这里我们需要找到一个平衡点。最后,最小块大小取决于烛形大小和佣金。选择最小块大小有明确的标准,

文中提出的块尺寸选择方法在理论和实践上都是很好的。不过,我已经有了一个基于改进市场模式的改进机制。解释新机制需要一篇单独的文章,因此我将仅限于上面描述的方法。

如果机器人分析一定数量的具有固定大小的块,由于市场参数总是变化的,市场趋势和回退的大小是不同的,因此需要一种自适应机制。

机器人分析具有最小尺寸的块。当它发现一个小的趋势区域,其超出的百分比超过阈值1时,它应该定义一个趋势存在的最大尺度。为此,应扫描更大的区域。由于用于分析的块的数量是固定的,因此我们需要增加块的大小,并查看在较大的块大小上发生了什么。我将最小块大小命名为TF1,类似于时间框架。这是一个合成块时间框架。较大的块将使用乘法比率KTF获得,例如,它将等于1.1。

1. 序列启动信号

有必要引入基本时间框架的概念(在这里和下面讨论时间框架时,时间框架是指块时间框架)。基本时间范围是检测序列开始信号的时间范围。

算法应该创建几个额外的块时间段,并在更高的时间段上检查序列开始信号。

在KTF=1.1的情况下,看下5个时间段就足够了。因此,最大的时间段块将比最小的时间段块大1.6倍。如果其中一个较高的时间段具有信号开始序列,则算法将切换到该时间段并使其成为基本的时间框架。在找到基本的时间框架后,我们需要再次创建5个更大的时间框架并重复扫描。这允许我们找到超过阈值的最大时间范围。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。