自动搜索战略。 - 页 3

 
Aliaksandr Hryshyn:

确实有很多小问题。

我正试图制作一个通用系统,这样就能以最小的代价添加不同的分析指标、蜡烛图等的可能性。每个函数都有关于它可以处理哪些数据以及将输出哪些数据的信息。此外,还将介绍指标及其提供的数据类型。数据分为简单和复杂两种类型,例如{double}和{int,double};数据分为不同类别,例如 "价格 "和 "图表上的位置",又例如 "直线"(可用于定义通道)等。按 "刻度类型 "分类,例如 "常数"(策略参数)、"指数"(有最小值和最大值)、"比率"(只有一个参考点,如价格、成交量)等。有必要以一致的方式修改策略,这其中存在细微差别,在一个地方修改会影响另一个地方的修改条件。

没错...为了减少搜索组合的数量,并使用了上述限制(类型、规模、类别),目前这就足够了,并进行了点修改(增加/删除一个/几个功能)。

如果说 "重组也是自发的,但重组的是整个现成的解决方案"--我想到了这一点),那就很难想象它是如何实现的了。一组组合函数与 "外部世界 "的联系很可能比单个函数要多,因此将其全部楔入的机会就会减少。算法变得非常复杂,还是留到更好的时候再说吧))。

让我澄清一下思路。为了减少变体的数量,并且对其中一个变体的修改不会影响到其他区块,这一点应该更加普遍。诀窍在于,同样的任务可以用不同的方法来实现,而事先往往并不清楚哪种方法更好。例如,我们定义了一项名为 "变换"(TRANSFORMATION)的通用任务。大约有十几种振荡器,它们各自以自己的方式定义了这种超稳定性。假设我们在振荡器脚本中设置的任务是尝试所有指标或所有方法。然后,我们必须规范这些区块与其他代码的交互。假设我们选择的交互标准是顶部百分比。生成器只需按顺序在代码中插入一个名为 Oversold1 的代码块,在该代码块中找到需要测试的变量,运行 volkin-forward 并记住测试结果。然后,他再编写一个新版本的智能交易系统,其中已经包含了 "Oversold 2 "代码块,尽管原始指标显示的是整数,甚至与零的符号也不同,但它同样给出了百分比。测试结束后,他会离开最成功的区块,转而执行另一项任务。

同时,没有必要一开始就准备那么多区块,2 或 3 个区块就足够了。最重要的是建立互动关系。

依赖关系也是如此。有 A、B、C。首先,如果 A 大于 B,则 C 为真。 然后,如果 B 大于 A,以此类推。

然后,我们可以继续进行更复杂的交互。

 

"为了减少选项的数量,并且对其中一个选项的修改不会影响到其他区块,应该让这些区块的功能更加多样化"。=> "比方说,我们选择交互标准 - 顶部的百分比"。- 我明白你的意思))。这涉及到将指标纳入单一视图,即预处理。在我的系统中,一切都太形式化了,我想保留这一切,我已经在努力实现诸如规模、类别等东西,我已经想好了怎么做,有些区块的连接确实会影响其他地方区块的连接。指标的标准化是通过指标本身的描述来实现的,根据指标本身的描述,某些区块会自动连接起来。其中一个区块可以很容易地计算一个值与另一个值的百分比,只是这些值之间必须有一个连接,这个连接将受到控制,例如

  1. Percent( Open[0] , Open[3] )
  2. 百分比(开仓价[0],鳄鱼 价[3])
  3. 百分比(成交量[0],鳄鱼[3])

第 1 和第 3 个选项很好,符合逻辑,但第 3 个选项没有意义。

指数也要计算,例如Open[Max_on_position(iAC,0,30) ] ]。

 
Youri Tarshecki:

同时,一开始不需要准备那么多积木,2 或 3 块就足够了。最重要的是建立互动关系。

依赖关系也是如此。有 A、B、C。我们先检查 A 是否大于 B,然后检查 C 是否为真,再检查 B 是否大于 A,以此类推。

然后,我们可以继续进行更复杂的交互。

它已经存在了。

具体实现如下

  1. 有基本类型 int、double、bool
  2. 复杂类型由基本类型创建(可以添加),例如 (int,double) - 图表上的坐标,(x,b) - 直线方程的系数,(a,b,c,d) - 最多支持 4 个值。
  3. 指标以一组包含一个元素的复数类型表示
  4. 常量以复合类型表示,这些常量是需要优化的策略参数
  5. 函数接收特定复数类型的变量作为输入,其数量不受限制,输出也是复数类型。
  6. 函数并不关心这些数据从何而来,最重要的是类型之间存在对应关系
  7. 支持 mql4 中的所有订单(6 种)
  8. 策略只定义一种订单类型(买入或卖出或买入止损或......)。
  9. 对于非挂单订单,图形顶部有 4 个节点:市场进入条件、退出条件、TP 和 SL。
  10. 区块(图形的函数/节点)可以从指标、常量、其他节点获取输入参数,允许许多其他节点从一个节点的结果中获取数据作为输入参数,没有任何限制,但不允许在图形中循环。
  11. 然后,图形被转换成顺序代码,这些代码将被发送到 Expert Advisor 执行,无需在 MQL 中编译。
下面是一个代码示例:

#define
 symbol          GBPUSD;
period          60;
repeat_signal_skip      True;
stop_level              60;
trade           op_buy;
max_shift               13;
stack           4;
const           9;
cache           1;
#data
{True},{-1.26761795},{4.67108999},
{2.08088665},{-0.33782435},{22},
{1.63150050},{-11},{-0.22006371};
#program
 push    [0];
push    [1];
push    [2];
call    F_plus_d;
push    [3];
push    [4];
call    F_plus_d;
push    [5];
get     .Ichimoku_2;
call    F_plus_d;
push    [6];
call    F_minus_d;
save    [0];
push    [7];
get     .Open;
call    F_plus_d;
call    F_less;
load    [0];
push    [8];
#end

尚未完成所有工作,代码中尚未包含所有必要信息,从类型控制的角度来看,代码执行正确,尚未考虑无意义表达式。

代码中只使用了简单类型。

 

我认为策略可以通过 HTTP 协议传输,MQL 可以通过这种方式接收策略。

我想让一切都完全自动化,包括搜索策略、制作策略组合、传输到智能交易系统等。

MQL 中的部分系统已经准备好 90%,可以使用大量策略(仓位控制、风险、错误处理 等)。

还有很多工作要做。

 
Yuriy Asaulenko:
如果你在寻找策略,那就不容易了。其他的我就不知道了,我还没想过。不过,任何建模在特殊环境下都更容易,在 MT 中则不然。MT 是最终产品,不是为研究而创建的,也不太适合研究。
我同意,我最初也是在 matlab 中进行建模的。不过,MT 测试仪还是一个黑盒子。
 
Aliaksandr Hryshyn:
下面是另一个无意义表达式的例子:=High>(Open-Close),它也无法通过。

解释一下为什么它毫无意义。真的,我会这样写

=High>MathAbs(Open-Close)

ю

 

Aliaksandr Hryshyn:

然后,图形被转换为序列代码,该代码将被发送到 Expert Advisor 执行,无需在 MQL 中编译。


如何做到这一点?
 

它将始终返回 true))。

(开仓-平仓)总是小于(高点)

 
Alexey Volchanskiy:

请解释一下是怎样的?
是广播还是表演?
 
Aliaksandr Hryshyn:

它将始终返回 true))。

(开-关)总是小于(高)。

制动 ))))))))))