c# - 修改代码以获取从牛市到熊市周期平滑趋势的合成数据

标签 c# algorithm stock stochastic-process

我有一个生成合成外观(股票)数据的类,它工作正常。但是,我想对其进行修改,以便 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()),

最佳答案

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

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

Exponential smoothing example

时间序列预测是一个很大的话题。我不知道你对那个话题有多熟悉。参见 Time Series Analysis , 它涵盖了大范围的时间序列,在 Excel 中提供了清晰的演示和示例。参见 exponential smoothing更多理论背景

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

enter image description here

时间索引是t,一个整数。时间序列的值为 ytltbt 分别是时间序列的偏移量和斜率分量。 Alpha和Beta是参数,l-1b-1是offset和slope的初值成分。 et 是服从某种分布的随机变量的值,例如普通的。为了时间序列的稳定性,Alpha 和 Beta 必须满足以下关系。

enter image description here

要生成不同的时间序列,您可以为 alpha、beta、l-1b-1,以及 et 的标准差,假设正态分布,并计算 yt 的连续值.我已经在 Excel 中针对多种值组合完成了此操作。以下是使用此模型生成的几个时间序列。 Sigma 是 et 的标准差(波动率)。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

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

enter image description here

enter image description here

关于c# - 修改代码以获取从牛市到熊市周期平滑趋势的合成数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466979/

相关文章:

c# - 从 razor 文件中获取变量的正则表达式 (c#)

c# - Visual Studio 中有哪些有用的快捷键?

algorithm - 从一个集合中找到多个最大不同的二元向量

Python:如何免费获取股票数据(对于许多代码,如标准普尔 500)

java - Java 中出现 "cannot find symbol"错误

c# - 从 .csproj 文件生成 AssemblyInfo 时如何定义多个友元程序集?

c# - 静态函数是否等同于 C# 中的静态 Func 成员?

python - 找到第 i 行和第 i 列,使得行中的所有数字都是零,列中的所有数字都是 1

python - 使用 Python 进行多季节预测的 Holt-Winters

java - 如何从 finance.yahoo.com 检索 BSE/NSE 上市股票的价格