1

我有这个生成合成外观(股票)数据的类,它工作正常。但是,我想对其进行修改,以便 NewPrice 为说n-bars生成平滑的趋势数据。

我知道如果我降低波动性,我会得到更平稳的价格。但是,不确定如何保证数据进入向上/向下交替的持续趋势一个正弦波外观,但具有股票价格,即没有负价格。

价格 = 趋势 + 先前价格 + 随机组件我在下面的实现中缺少趋势组件。

有什么建议么?

class SyntheticData
{
    public static double previous = 1.0;

    public static double NewPrice(double volatility, double rnd)
    {               
        var change_percent = 2 * volatility * rnd;
        if (change_percent > volatility)
            change_percent -= (2 * volatility);

        var change_amount = previous * change_percent;
        var new_price = previous + change_amount;
        previous = new_price;

        return new_price;
    }
}

Trade.previous = 100.0;
Price = Trade.NewPrice(.03, rnd.NextDouble()),
4

2 回答 2

4

指数平滑或指数移动平均线将创建您想要的数据类型。理想情况下,您将拥有代表您想要生成的时间序列类型的现有股票价格数据。您将指数平滑模型拟合到您的数据。这将确定该模型的许多参数。然后,您可以使用模型及其参数生成具有相同趋势的相似时间序列,并且可以控制与模型关联的随机变量的波动率(标准差)。

作为您可以做什么的示例,在下图中,蓝色和黄色部分来自真实数据,绿色部分是使用适合真实数据的模型生成的合成数据。

指数平滑示例

时间序列预测是一个很大的话题。我不知道你对这个话题有多熟悉。请参阅时间序列分析,它涵盖了大量的时间序列,在 Excel 中提供了清晰的演示和示例。有关更多理论背景,请参见指数平滑

以下是如何生成此类时间序列的具体示例。我选择了 30 种指数平滑模型中的一种,一种具有加性趋势和波动性且没有季节性成分的模型。生成时间序列的方程是:

在此处输入图像描述

时间索引是t,一个整数。时间序列的值为y tl tb t分别是时间序列的偏移量和斜率分量。alpha 和 beta 是参数,l -1b -1是偏移和斜率分量的初始值。e t是遵循某种分布(例如正态分布)的随机变量的值。为了时间序列的稳定性,Alpha 和 beta 必须满足以下关系。

在此处输入图像描述

要生成不同的时间序列,您可以选择 alpha、beta、l -1b -1的值和e t的标准差(假设正常定律),并计算y t的连续值。我已经在 Excel 中针对几种值组合完成了此操作。以下是使用此模型生成的几个时间序列。Sigma 是e t的标准偏差(波动率) 。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

以下是 30 个模型的方程式。N 表示没有趋势/季节性成分。A 表示添加剂成分。M 表示乘法分量。d 下标表示阻尼变体。您可以从上面的参考资料中获取所有详细信息。

在此处输入图像描述

在此处输入图像描述

于 2019-06-05T20:25:17.357 回答
0

我一直在寻找这样的东西:

public static double[] Sine(int n)
{
    const int FS = 64; // sampling rate

    return MathNet.Numerics.Generate.Sinusoidal(n, FS, 1.0, 20.0);
}

虽然,对于想要处理价格和基于时间的周期性而不是数学函数的人来说,这并不直观。

https://numerics.mathdotnet.com/Generate.html

于 2019-06-19T01:28:40.040 回答