德米特里,这是怎么回事?为什么这篇文章是以参考书和宏表的形式出现的?
,代码示例在哪里?程序员想法的精髓在哪里?
,解释原理和识别的章节--遗憾的是并没有阐明发生了什么。
,给人的印象是他们自己写的,不要忘记可能的宏列表。
您能为大家解释一下代码中发生的事情的目的吗?(我对应用不感兴趣,只对 MQL 算法的组织感兴趣)。
咳咳......
这看起来像是一篇 "程序员写给程序员 "的文章。只是不知道谁(除了作者)会使用它。"学习 mql5 "与 "学习eIntepretar"。
但它所做的工作非常巨大,令人钦佩。
德米特里,这是怎么回事?为什么这篇文章是以参考书和宏表的形式出现的?
,代码示例在哪里?程序员想法的精髓在哪里?
,解释原理和识别的章节--遗憾的是并没有阐明到底发生了什么。
,给人的印象是他们为了不忘记可能的宏列表而自己写的。
您能为大家解释一下代码中发生的事情的目的吗?(我对应用不感兴趣,只对 MQL 算法的组织感兴趣)。
有 3 或 4 个参考表。其余的都是带注释的宏。这篇文章信息量非常大,你应该一字不漏地读完,哪怕有一个不清楚的地方也不要去看下一篇(当然,如果有必要,如果你愿意的话)。单读可能无济于事。如果你想把中心思想单独拿出来,它就不会那么大,也不会那么复杂:任何关于订单的战略都应该分解成所有可能的阶段状态,但这是一个个人的创作过程,而不是形式化的。不过,如果你愿意,也可以将其形式化,但要写很多东西。
程序员的想法......它与计算机一样古老:用人类语言编写的程序,通过它,铁机器可以工作。
代码示例。StringFind() 和 StringSubstr()函数。总的来说,学习 PHP 中的字符串函数是非常有用的--它可以真正拓展你的创造力......
如果你试图用其他方式来表达本文所介绍的全部信息,那么它的篇幅可能会比本文多 5-10 倍......
代码中发生了什么...逐行读取文件,用 "#"号分隔注释,用"|"号分隔阶段和操作字段,用"; "号分隔命令。然后查找比较表达式中的子串 <、>、<=、<= 等。如果找到了,我们就记下它的索引,然后用它将表达式分为左右两部分。算术表达式仍然保留。如果表达式以 + 或 - 开头,我们会缩进一个字符,然后查找前面没有 * 号的 + 或 -。我们将 + 或 - 分割成子串,并用 * 号分割这两个子串。之后,我们有四个参数(表达式左侧还有一个)。这些参数可以是命令。我们要检查它是否是一个数字,或者是一个尾部带有 p 的数字,或者是一个用户变量,或者是一个尾部带有 p 的用户变量。如果不是,则是一条命令。我们用符号(.)分隔命令本身和它的参数。
最有趣的是表达式的计算。这里有结构,五个结构,每个结构都有值,值结构指定值是直接数字还是命令。对于每个有值的结构,都会调用一个函数来计算值。如果数值是数字,函数什么也不做,如果是命令,则调用相应的函数(通过开关选择)。数值填入后,将计算算术表达式,并在结构上指定数值和算术运算的符号....。只有所有内容都由数字(索引)指定,并通过开关选择必要的操作。
工作解释的过程本身就是两级开关:命令和嵌套的接收到的关于命令的数据的标识符。如果您有兴趣,可以研究一下 OnTick() 函数的代码,其中的代码并不多。最大的代码量来自 OnInit() 函数,但它并不那么有趣,因为它对某些人来说更方便--只有 StringFind() 和 StrSubstr() 函数。
- www.mql5.com
我支持,我需要一个示例,说明如何编制简单的 TS 程序,至少在慢速和快速 MA 的交叉点上进行交易
我... 首先,您应该全文阅读这篇文章。
...成为战略的视觉设计师.....
这是个好主意,可以解决一个问题...但这只是个小问题,你仍然需要思考战略、分析战略、将战略分解为不同阶段。
咳咳......
这看起来像是一篇 "程序员写给程序员 "的文章。只是不知道谁(除了作者)会使用它。"学习 mql5 "与 "学习eIntepretar"。
所做的工作简直是巨大的,令人钦佩。
嗯,有一点,就像 "疯狂科学家".....。作为安慰奖,有几种顺序策略的描述,虽然不是很详细,但有图片....也许,有人至少会觉得这很有用...
Если постараться изложить весь объем информации представленный в статье как-то иначе, она бы могла поучиться раз в 5-10 объемней...
你可以把参考文献表放在一个 dock 中,然后把它们附在文章后面。
我又重新读了一遍这篇文章。 我甚至决定为自己做一个论文陈述,以便理解这篇文章的内容。 我大概快理解了。
迪米特里,如果我说错了,请纠正我。
所以,专家的工作就是检查各州。所有状态。
如果其中任何一种状态在当前是相关的,那么我们就按照宏的规定来处理这种状态。
我们的任务不是制造矛盾--让多个宏处理相同的状态,或者避免两个宏之间的冲突(例如,一个宏关闭后,第二个宏立即打开,这样就会发生 "争斗")
也就是说,专家的任务是不断循环运行,检查所有 指定的宏(我们在文件中写的宏或其他宏),并在它们满足条件时执行它们规定的操作。
例如,假设我们有一个简单的策略(甚至是指标策略)。
,当 MA 交叉时,我们需要打开一个订单。然后花掉它。然后在某个前缀强行平仓。
在这种情况下,程序员会怎么做?
他写了三个函数(就像您的宏一样):
- 检查指标和打开订单的函数,如果指标已经给出了 OK,并且没有姿势。
- 拖网的函数,如果有姿势
- 关闭的函数,如果有订单,并且有利润
调用这些函数的顺序可以是任意的。只需将它们放在 OnTick 的检查中即可,例如
OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}
这意味着 TralPos 本身是独立的,其他两个函数的存在丝毫不会影响其工作。所有必要的检查都在其中执行(搜索姿势、修改止损等)
同样,CloseProfit 也是独立的。
因此,您编写了几十个这样的函数,它们都是独立的,执行算法的原子操作。
您还通过一个带参数的测试文件来设置这些函数,这样您就可以在 不重新编译 的情况下更改函数参数(从而更改智能交易系统的参数)。
这样吗?
可以把参考文献表放在一个文档中,然后附在文章后面。
这是个品味问题,但如果把它们放在文章里,它们就不会丢失。
我又重读了一遍这篇文章,我甚至决定为自己做一个论文陈述,以理解这篇文章的内容。
迪米特里,如果我说错了,请纠正我。
所以,专家的工作就是检查各州的情况。所有的状态。逐点检查
每次勾选时,都会检查所有阶段是否相关
如果有任何一个状态在当前是相关的,那么我们就按照宏观的规定来处理这个状态。
是的,但也有一些细微差别。如果执行了市场操作,则必须是市场操作,而且必须先执行市场操作。如果设置了挂单,Expert Advisor 会在设置 之前检查其是否存在。
我们的任务是不制造矛盾--几个宏应该处理相同的状态,或者两个宏不应该冲突(例如,一个宏关闭,第二个宏立即打开,这样就会发生 "争斗")。
不应该有冲突。但如果更方便的话,同一个阶段可以有多个宏。例如,一个阶段是一个市场位置的存在,可以在一边下限价单,另一边下止损单,也可以在一行中同时下止损单和限价单。
也就是说,Expert Advisor 的任务是不断运行循环,检查 所有 指定宏(我们在文件中或其他地方写的),并在其条件满足时执行它们规定的操作。
是的。
例如,假设我们有一个简单的策略(甚至是指标策略)。
当 MA 穿过时,我们需要打开一个订单。然后花掉它。然后在某个前缀强行平仓。
没错。
在这种情况下,程序员会怎么做?
他编写了三个函数(就像您的宏一样):
- 检查指标,如果指标发出信号且没有头寸,则打开订单。
这是一个阶段:有指标信号,但没有头寸。在这种情况下,它的作用是开仓。
- 如果有姿势,拖网功能。
这可作为一个单独阶段记录。阶段识别 - 存在市场头寸。相应的操作是调用拖网功能。
- 平仓功能,如果存在订单且订单有利润。
这是第三个阶段。存在头寸,且其利润大于指定值。此时的操作是平仓。
调用这些函数的顺序可以是任意的。例如,将它们放在 OnTick 检查中就足够了。
在元程序文件中,可以按不同顺序排列。
OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}
也就是说,函数本身是独立的。
事实证明,元程序文件中的行也是独立的。
这意味着 TralPos 本身是独立的,其他两个函数的存在不会影响它的工作。所有必要的检查都在其中进行(姿态搜索、停止修改等)。
元程序的一行也是自给自足的。
同样,CloseProfit 也是自给自足的。
因此,你已经编写了几十个这样的函数,它们是独立的,执行算法的原子操作。
您还通过一个带参数的测试文件来设置这些函数,这样您就可以在 不重新编译 的情况下更改函数(以及智能交易系统)的参数 。
这些函数可以组合使用。相位不仅可以通过市场位置的存在来确定......还可以通过访问命令表中的许多变体、命令来确定。
这样吗?
有一点可能会引起误解。我在文章中模糊了 "行动 "和 "状态 "的区别。如果在确定阶段时应采取市场行动,则应称为行动。而当需要设置挂单时,更可能被称为状态描述。一个阶段主要通过市场头寸中的注释来识别,该 阶段要么对应一个动作(打开/关闭市场头寸),要么对应一个状态(存在一些挂单)。如果是市场行动,则假定在执行后会过渡到另一个阶段。正确标记订单非常重要。但在一个阶段中,可能既有市场行为,也有订单设置。如果市场行为不成功,则其后的所有操作都不会执行。 如果成功,则会执行,如果您尝试在一个刻度线内做尽可能多的事情。需要注意的是,订单可能不会被设置,但市场行为已经完成,即过渡到另一个阶段。
新文章 订单策略。多目标 EA 交易已发布:
本文主要介绍一些主动使用挂单的策略、用来描述这些策略的元语言,以及如何使用一种以这些描述为基础运行的多目标 EA 交易。
任何交易策略的首要核心元素,就是价格分析以及作为建仓基础的技术指标分析。我们称其为市场分析,即市场中发生的所有事情以及我们无法控制的事情。
此外,策略可能还需要另外一种类型的分析。我们称其为当前交易状况分析。 它包括交易仓位状态分析、以及任何可用/缺失的挂单分析(如果用于一个策略之中)。这些分析的结果,可以帮助我们决定是否应该对仓位或订单采取某些动作, 比如平仓,移动止损,下挂单或删除挂单等。换言之,这种分析会根据我们(或一个EA交易)所创建的情况以及所使用的策略规则,对我们的市场行为、动作进行 研究。
从某种程度上来说,人们通常所说的“跟踪止损”,被认为是交易策略中的第二种元素类型。让我们来看看以下的分析:如果有一个持仓,其利润高于设定值,但没有设置止损,或者设置的止损远远高于当前的价格,就应该移动止损。
跟踪止损是一个非常简单的功能,而且效果很好。此外,它还是一种完全不同的交易策略因素,是一个仓位管理函数。因此,一个交易策略可以包括三种类型的要素:
以其为基础的市场分析和动作。
以其为基础的交易情况和动作分析。
仓位管理。
本文主要介绍一些主动使用挂单的策略(我们称其为订单策略)、用来描述这些策略的一种元语言、以及如何使用一种以这些描述为基础运行的多目标工具(EA 交易)。
作者:Dmitry Fedoseev