更少的代码,更多的行动......写一个EA - 页 5

 
Vladimir Simakov:

你想从中得到什么?说实话,我不明白。起初我以为是要建立一个la框架,但没有,没有指标、订单、标准决策算法的包装类,什么都没有。虽然这样的结构更易读:fast.Get(2)>=slow.Get(1);(这只是为了举例),但声明。

CMA fast=new CMA(NULL,0,12,...)。

CMA slow=new CMA(NULL,0,100,...)。

现在我们可以讨论了,而你,IMHO,却在现场践踏。

例如,用fast.Get(2)>=slow.Get(1)代替 这是非常合法和有效的代码。

table[FAST_MA][1] >=table[SLOW_MA][2]

它像电子表格 一样,用EXCEL工作。它被总结在一个表格中,而不是按单个手柄,因为数据(公式)可能是相互依赖的。

这可以做到(只是还没有在特定的库中做到)。

fast=table[FAST_MA]; slow=table[SLOW_MA];

然后 快速[2]>慢速[1] 更容易阅读

并且所有的内部计算都将 "按需 "进行。

 
Maxim Kuznetsov:

例如,用fast.Get(2)>=slow.Get(1)代替;相当合法和有效的代码。

table[FAST_MA][1] >=table[SLOW_MA][2]

它的工作原理就像使用电子表格,使用Excel。它被总结在一个表格中,而不是按单个手柄,因为数据(公式)可能是相互依赖的。

这可以做到(只是还没有在特定的库中做到)。

fast=table[FAST_MA]; slow=table[SLOW_MA];

然后 快速[2]>慢速[1] 的阅读更容易了

而且所有的内部计算都将 "按需 "进行。

这有点像一根拐杖。在终端将创建的擦拭缓冲区中,我们还添加了双倍数的数组。我的理解是,你将为它们保留内存到历史的全部深度(对于M1USHORT_MAX,如果我没记错的话*8字节),或者你打算在这个过程中经常使用昂贵的ArrayResize?
 
Vasiliy Sokolov:

我同意,即使你懂得语言,要读懂你的代码也是非常困难的。

事实上,这一规则适用于任何第三方代码。唯一的问题是哪种代码不难但更容易阅读。

而这里更容易阅读和编辑 几乎所有的MQL4代码。开发商们猜到了一次。

 
fxsaber:

事实上,这一规则适用于任何第三方代码。唯一的问题是哪种代码不难但更容易阅读。

而且,几乎所有的MQL4代码都更容易阅读和编辑。开发商们猜到了一次。

但让我问你一个问题。猜的是什么?标准的C/C++,除了与交易和图表有关的特定查询外,可以认为是C++中的 "windows.h"。

所以,尊重开发者不重新发明轮子,虽然禁止链接是一个明确的减分项,但当我在C/C++中落入mql之后,我无法欢喜。这就是为什么,如果奇迹发生了,也许你应该考虑,作为一种替代,像C# usafe,特别是像我这样的人,比如你想撞墙,就自杀吧,我们警告过你。

 
Vladimir Simakov:

让我问你一个问题。猜测是什么?

Kodobase上有很多MT5 EAs,它们是MT4 EAs的翻版。比较原版和翻拍版的代码。


显然,弄清MT4原版的逻辑要容易得多。但当需要纠正TS中的一些东西时,就更容易了。MQL4是世界各地论坛上讨论交易算法的标准,这不是没有道理的。没有其他语言,只有MQL4。而且它对MT4的普及起到了很大的作用,而不是相反。


而如果我们谈论MT5的转换,他们是歪打正着--他们并不总是工作。一个简单的例子。您发送了一个平仓 请求,但收到了一个交易指令,而不是平仓。为了进入真正的账户,有很多技巧必须要解决。有了MT4,就会变得简单而可靠。

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber:

kodobase中充满了MT5 EAs,它们是MT4 EAs的翻版。比较原版和翻拍版的代码。


很明显,理解MT4原版的逻辑要容易得多。但当需要纠正TS中的一些东西时,就更容易了。MQL4是世界各地论坛上讨论交易算法的标准,这不是没有道理的。没有其他语言,只有MQL4。而且它对MT4的普及起到了很大的作用,而不是相反。


而如果我们谈论MT5的转换,他们是歪打正着--他们并不总是工作。一个简单的例子。您发送了一个平仓 请求,但收到了一个交易指令,而不是平仓。为了进入真正的账户,有很多技巧必须要解决。有了MT4,就会变得简单而可靠。

所以通过类比来处理秩序/位置是很疯狂的。在mql4中我有一个封装类,在mql5中我有两个不同的封装类,因为在mt4中它是一个实体,而在mt5中有两个不同的实体,现在的计划是对它们实现一个封装类,并忘记与订单的工作,就像我在mql4中半年来的工作一样。
 
是的,MT5是为了在交易所工作而创建的,那里有不同的订单/仓位工作原理,所以要学习数学,不要发牢骚,那里的一切工作都很顺利,但交易所和外汇的交易机制要先学习,要考虑到它们的差异。所有需要做的事情,开发商已经给出并在码头上描述了,然后就看你的了。
 
Vladimir Simakov:
所以用类比的方式来处理秩序/位置是一种无稽之谈。我在mql4中有一个封装类,在mql5中有两个不同的封装类,因为在mt4中它是一个实体,而在mt5中它是两个不同的实体。 现在我打算在它们身上实现封装类,而忘记像我半年前在mql4中那样处理订单。
弗拉基米尔-西马科夫
这就是为什么我们应该在数学中学习同样的东西,而不是发牢骚,那里一切都很好,很顺利,但首先我们必须学习交易所和外汇的交易机制,并考虑到它们的差异。所有需要做的事情,开发商已经给出并在码头上描述了,然后就看你的了。

试着拓宽你的视野,因为你写的东西真的是在发牢骚。

 
Vladimir Simakov:
这似乎是一个拐杖。除了擦拭缓冲区(反正终端会创建),我们还增加了数组双倍。我的理解是,你要为它们预留内存到历史的全部深度(对于M1USHORT_MAX,如果我没记错的话*8字节),或者你打算在操作过程中经常使用昂贵的ArrayResize?

当然,我为它们分配了内存。其深度不超过计算和调试的需要。在给定的片段中,它是30,这已经足够了。如果在某个地方需要计算例如深度50的标准偏差,那么就应该增加缓存。而且,这只是为了加快计算的速度。

 
fxsaber:

试着拓宽你的视野,因为你写的东西真的是在发牢骚。

我的想法很好,但这是mql5中实现头寸和订单之间的联系的方式(作为最后工作的一部分,原则上,它已经会以这种形式进入对冲账户的库)。

CHedge::CheckOrder(void){
   if (!CheckPointer(cOrder)) return;
   switch(cOrder.Control()){
      case ORDER_FULL:        cPosition=NewPosition(cOrder);
      case ORDER_REMOVE:
      case ORDER_ERROR:       delete cOrder;}}