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

 
Andrey Dik #:

是的,桑尼奇写道那里没有极值,他错了,因为任何函数都有极值。

极值是函数在给定区间或给定区域内达到最大值(最大值)或最小值(最小值)的点。极值可以是局部的,即函数仅在某点的某个邻域达到极值;也可以是全局的,即函数在整个给定区间或给定区域内达到极值。

极值总是存在的,即使你没有刻意去寻找(你使用的算法会为你完成搜索操作)。没有优化的学习是不可能的,而没有正确的 FF 分配,优化也是不可能的。如果搜索极值的工作是为你完成的,而且是隐藏的(缝在算法中),这并不意味着它们不存在(极值和优化)。

那里没有任何功能。

够了,别再说票房信息了。我知道什么是优化。
 
mytarmailS #:

这样吗?

它真的能应对一百万种情况吗?

我对开关和 C++ 的东西有点迷茫。

前两个函数是 R 的实现,最后一个是C++ 的 switch

Unit: microseconds
                              expr    min     lq      mean median     uq       max neval
     rule(n = sample(1:200, 1), x) 40.482 44.473  57.18044 46.754 51.886  2688.931  1000
    rule2(n = sample(1:200, 1), x) 29.079 35.351 567.03671 38.202 43.904 86712.314  1000
 rule_cpp(n = sample(1:200, 1), x) 31.360 34.781  53.26793 36.491 40.482  4924.005  1000

事实上,根本没有增益,这怎么可能?
 
mytarmailS #:

我对这个开关和 C++ 有点不明白。

前两个函数是 R 的实现,最后一个是C++ 的 switch

事实上,根本就没有增益,怎么可能......?

能给我看看代码吗?

也许你是在浪费函数,因为答案已经得到了......

 
Aleksey Vyazmikin #:

能给我看看代码吗?

可能您是在徒劳地运行函数,因为答案已经收到了......

代码和我发布的代码是一样的,只不过我把规则从 5 改成了 300。

发布代码有什么意义?
我已经决定了架构
 
mytarmailS #:
代码与您发布的相同,只是我将规则从 5 改为 300

发布 R 代码有什么意义?
我已经决定了架构

问题在于函数调用的代码。

 
Aleksey Vyazmikin #:

问题出在函数调用代码中。

我不明白
 
mytarmailS #:

基本上没有任何收获,这怎么可能......

可能有很多原因。脚本附后,下面是函数部分。

bool Rule0( const vector<double> &x ) { return(x[3] > x[4]); }
bool Rule1( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule2( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule3( const vector<double> &x ) { return(x[3] == x[4]); }
bool Rule4( const vector<double> &x ) { return(x[0] != x[4]); }
bool Rule5( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule6( const vector<double> &x ) { return(x[3] <= x[4]); }
bool Rule7( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule8( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule9( const vector<double> &x ) { return(x[3] <= x[4]); }

bool rule3( const int n, const vector<double> &x )
{
  typedef bool (*RULE)( const vector<double>& );
  static const RULE Rules[] = {Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9};

  return(Rules[n](x));
}

#define  BENCH(A)                                                              \
  StartTime = GetMicrosecondCount();                                          \
  A;                                                                          \
  Print(#A + " - " + (string)(GetMicrosecondCount() - StartTime) + " mcs");

void OnStart()
{
  const vector<double> x = {1, 2, 3, 4, 5};
  int Tmp = 0;

  ulong StartTime;

  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x));
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule(i % 100, x));  // Если добавить эту строку, то выше rule замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule2(i % 100, x)); // Если добавить эту строку, то выше rule2 замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule3(i % 100, x)); // Если добавить эту строку, то выше rule3 замедлится.

  Print(Tmp);
}


结果。

for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x) - 505436 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x) - 261261 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x) - 709846 mcs


不清楚这里测量的是什么--请看突出显示的注释。据称比规则 2 快得多。

附加的文件:
 
fxsaber #:

有趣的是,就数据量(报价)而言,人脑(作为神经网络)与 MO 相比,就像输卵管与人相比一样。

然而,原始人类已经证明,他们可以创造出相当不错的工作 TC。事实证明,不需要如此庞大的数据量就能创建一个工作正常的 TC。

举例来说,人类是如何建立起有效的剥头皮模型的,这对我来说是个谜。这几乎完全是在没有数字计算器的情况下完成的。


这种情况显然是这样的:

  1. 我经常看到某种扁平化的现象(这几天我一直在屏幕上傻傻地磨)。
  2. 我会尝试用原始的 TS 在上面赚钱。
  3. 它的耗电量并不大。我应该再完善一下 TS。我看了一下交易历史 - 看起来有些地方可以改进。
  4. 它开始增加了一点。重复第 3 点。
没有数字计算器。我只看了第 1 点,然后就开始做了。这种方法的概率似乎为零,但不知何故却能奏效。某种有效的疯狂捅法。


显然,在某种潜意识里,人类大脑仍然能够在极少量的数据中找到 "模式"。你不能说这是运气。这是一个谜。

在我看来,所有的秘密都在于经验的传承,所有的新事物都是建立在上一代成果的基础上。以现代处理器为例。对于 19 世纪的人来说,这就是魔法。而对于 20 世纪的人来说,这将是一项非常复杂的技术,没有合适的工具来进行逆向工程。只有通过知识转移和逐步发展,我们才能达到现代技术水平。这就是为什么人们说,如果发生第三次世界大战,他们将在第四次世界大战中用石头打仗。关于交易,有这样的传说:早期的市场要容易得多,天顶交易者借助移动平均线发家致富,而现在则不可能了。

 
fxsaber #:

这里的衡量标准并不明确--请参见突出显示的评论。据称比规则 2 快得多。

中,对该函数及其不同实现(等价物)(包括 C++ 实现)进行了测量。

好吧,我已经决定了现在的架构,我将暂时使用纯 R-ke,我已经找到了将速度提高 25 倍的方法,而且还有不在代码中添加 C++ 的优点/充分理由。

 

你可以挑战我的AMO

"解决TS问题"


给我一小段你使用的数据。

描述你在代码中使用了哪些运算符、函数和变量。

给我你的等式或算法信号


我创建一个搜索语法,然后把代码作为密码提取出来 解出你的 TS。

原因: