交易中的机器学习:理论、模型、实践和算法交易 - 页 3184

 

我研究了几种类型的时间序列模拟及其特点,用正弦波和噪声创建了一个合成序列(为了更清晰,我使用了正弦波)。

结论是这种模拟仍有待正确理解......


第一行是原始数据(左上角),所有其他行都是基于第一行特征的模拟。

另一次运行


par(mar=c(2,2,2,2),mfrow=c(3,2))

n <- 1:1000
#  original series
s <- sin(n/50+1) + sin(n/20+15)/2 + rnorm(n,sd = 0.1) 
s |> plot(t="l", main = "original series (2 sin + noise)")

s |> rnorm(mean = mean(s),sd = sd(s)) |> cumsum() |> plot(t="l",main = "random generation")
library(forecast)
s |> ets() |> simulate() |> plot(t="l",main = "Exponential smoothing state space model")
s |> ar() |> simulate() |> plot(t="l",main = "Fit Autoregressive Models to Time Series")
s |> nnetar() |> simulate() |> plot(t="l",main = "Neural Network Time Series Forecasts")
s |> Arima() |> simulate() |> cumsum() |> plot(t="l",main = "ARIMA model to univariate time series")
 
Maxim Dmitrievsky #:

我不知道问题出在哪里。

本来就没有问题。也就是说,没有问题需要解决。只是分享中间结果,讨论不同的解释。


我自己对自己的假设也很无奈。

关于交易、自动交易系统和交易策略测试的论坛

交易中的机器学习:理论、模型、实践和算法交易

fxsaber, 2023.08.19 00:50

如果 dopilivayut,蒙特卡罗,可能是最好的选择,以产生一个随机符号与所需的统计特征。

我认为,通过对完全可扩展的真实刻度历史进行随机化,我也将得到一个符号,该符号在适当调整后将完全可扩展。但我得到的却是一个完全失败的结果,这至少让我想知道,真实历史中到底有什么东西能让它完美缩放?

 
Maxim Dmitrievsky #:

这仍然意味着蜱虫中有更多的阿尔法。

我们只能肯定地说,在处理刻度线时,信息量要比处理条形图时大。因此,使用具有适当计算能力的刻度线是合乎逻辑的。

 
mytarmailS #:

第一行为原始行(左上角),其他各行均为基于第一行特征的模拟行

我不会使用任何模拟结果。它们的作用

  1. 从条形图历史记录中找出几个(100 个)统计特征。
  2. 生成条形图系列,使这 100 个统计特征相匹配。

100 个值就能描述数百万个值的原始序列,这太荒谬了!这似乎是理论家的工具,而不是实践者的工具。


建议的算法 适用于刻度线。收到的条形图中的刻度线量是一致的,点差也是一致的。对新闻的剧烈反应相同,翻滚行为相同,等等。

听起来都很酷。但即使是这样的随机化,我也无法教授剥头皮。到目前为止,我还无法解释这一点。


我本想发布一个 EX5 脚本来创建必要的随机符号,但论坛规则禁止这样做。我还没准备好为此写一个博客条目。如果有人对随机符号感兴趣,请与我联系。

 
fxsaber #:

并不是什么需要解决的问题。

我想解决以下问题。


任务。

随机化一个真实的可伸缩符号,使其保持可伸缩性。


目标。

蒙特-卡里尔

 
fxsaber #:
但却完全失败了,这至少让我想知道,到底是什么让真实故事完美地呈现在头皮上?

我认为区别在于连续条形图/刻度线的连续性或重复性。在趋势中,大多数条形图/刻度线的方向是一致的,而随机化器平均每 1 个条形图/刻度线中就有 1 个。

 
Forester #:

我认为区别在于连续条形图/刻度线的连续性或重复性。在趋势中,大多数条形图/刻度线都是单向的,而随机化器则是平均单向的。

有几种假设。为了以防万一,我在一个真实符号和一个随机符号上运行了 MathRand 脚本。

#property script_show_inputs

input datetime inFrom = D'2023.01.01';

double GetAvgPrice( const MqlTick &Tick )
{
  return((Tick.bid + Tick.ask) / 2);
}

void OnStart()
{
  MqlTick Ticks[];
  
  int Amount1 = 0;
  int Amount2 = 0;
  
  for (uint i = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, inFrom * 1000) - 1; (bool)i--;)
  {
    const double Diff = NormalizeDouble(GetAvgPrice(Ticks[i]) - GetAvgPrice(Ticks[i + 1]), 8);
    
    if (Diff > 0)
      Amount1++;
    else if (Diff < 0)
      Amount2++;
  }
  
  Print(Amount1);
  Print(Amount2);
}

两个符号显示的值几乎相同。有趣的是,金额 1 ~ 金额 2。也就是说,趋势性不是由一个字符的增量数量形成的,而是由增量本身的绝对值形成的。

当前的随机化算法 中,增量绝对值的序列不会发生变化。

 
fxsaber #:

有几种假设。为了以防万一,我在一个真实的随机符号上运行了这个脚本,检查了 MathRand。

两个符号显示的值几乎相同。有趣的是,金额 1 ~ 金额 2。也就是说,趋势性不是由一个符号的增量数量形成的,而是由增量本身的绝对值形成的。

Amount1 - Amount2 是一种波动性。趋势性则是将大量增量相加的结果。在真实数据中,趋势是一个,而在随机数据中(大约到 through1),趋势更像是随机离群值,波动性越来越大。我认为它们的振幅要比真实数据小很多倍。

更新:我没注意到你用 ~ 代替了 -。

关于 ~。它们的近似狂欢就是这个意思,真正的混合,在 1 中平均。
 
fxsaber #:

我不会使用任何一种模拟。他们的工作

  1. 从条形图历史中找出几个(100 个)统计特征。
  2. 生成一系列条形图,使这 100 个统计特征相吻合。

100 个值就能描述数百万个值的原始序列,这实在是太荒谬了!这似乎是理论家的工具,而不是实践者的工具。

对自己不熟悉的东西感到惊讶,并称之为荒唐.....,这太荒唐了。

你熟悉降维算法和压缩算法吗?

fxsaber#

建议的算法 适用于刻度线。在接收到的条形图中,tick 量是一致的,点差也是一致的。对新闻的剧烈反应相同,翻滚行为相同,等等。

听起来都很酷。但即使是这样的随机化,我也无法教授剥头皮。到目前为止,我也无法解释。

以下是您的随机化在多大程度上模拟了真实市场过程的答案.....

fxsaber#

任务。

随机化一个真实的可剥头皮符号,使其保持可剥头皮状态。

这里有一个标准/拟合函数,用于创建适当的行模拟

 
mytarmailS #:

对不熟悉的事物感到惊讶并称之为荒谬是荒谬的 ....

在那些作为信号的人工数据中--周期性函数,分析 1-2-10 个周期就足够了(例如,每 50 个条形图,相同的函数(绝对),但噪声不同,50 个条形图之后又是如此,等等)。在市场数据中没有周期性函数,因此我们需要分析一切....。