我有一个生成合成外观(股票)数据的类,它工作正常。但是,我想对其进行修改,以便 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()),
最佳答案
指数平滑或指数移动平均线将创建您想要的数据类型。理想情况下,您将拥有代表您要生成的时间序列类型的现有股票价格数据。您将指数平滑模型拟合到您的数据。这将确定该模型的许多参数。然后,您可以使用模型及其参数生成具有相同趋势的类似时间序列,并且可以控制与模型关联的随机变量的波动率(标准差)。
作为您可以执行的操作的示例,在下图中,蓝色和黄色部分来自真实数据,绿色部分是使用适合真实数据的模型生成的合成数据。
时间序列预测是一个很大的话题。我不知道你对那个话题有多熟悉。参见 Time Series Analysis , 它涵盖了大范围的时间序列,在 Excel 中提供了清晰的演示和示例。参见 exponential smoothing更多理论背景
以下是如何生成此类时间序列的具体示例。我选择了 30 种指数平滑模型中的一种,其中一种具有附加趋势和波动性,但没有季节性成分。生成时间序列的方程式是:
时间索引是t,一个整数。时间序列的值为 yt。 lt 和 bt 分别是时间序列的偏移量和斜率分量。 Alpha和Beta是参数,l-1和b-1是offset和slope的初值成分。 et 是服从某种分布的随机变量的值,例如普通的。为了时间序列的稳定性,Alpha 和 Beta 必须满足以下关系。
要生成不同的时间序列,您可以为 alpha、beta、l-1、b-1,以及 et 的标准差,假设正态分布,并计算 yt 的连续值.我已经在 Excel 中针对多种值组合完成了此操作。以下是使用此模型生成的几个时间序列。 Sigma 是 et 的标准差(波动率)。
这是 30 个模型的方程式。 N 表示没有趋势/季节性成分。 A表示添加成分。 M 表示乘法分量。 d 下标表示阻尼变体。您可以从上面的引用资料中获取所有详细信息。
关于c# - 修改代码以获取从牛市到熊市周期平滑趋势的合成数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466979/