线性减速是编程错误还是MT4的特点? - 页 4

 

仅仅是下面的建筑就值得一试。


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

多一点

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,将主要算法从成堆的杂乱无章的代码中解脱出来。

 
micle:

问题是代码的重复,条件语句的数量过多。事实上,这段代码由99%的行组成,其中包括条件性的If操作符;我相信如果你研究一下,比较的数量可以减少10倍。 这不仅会减慢执行速度,而且这段代码也很难读。一个对其进行补充的人至少有2个主要任务。

1 - 不破坏它

2 - 增加必要的功能。

无论如何,不可读的代码 会导致各种检查和比较的额外重复--而这又是额外的费用。翻看代码,我个人记得自己大约在25年前,那时我刚刚开始编程,我从手册中学习到Atari 800XL PC,没有任何老师,只是因为它很有趣。

当然,这很有趣,我们在谈论什么 "如果",可能有我的TOR--我写 "如果这样,那么这样",程序员在代码中解释它,还有 "如果 "与订单的直接工作有关,有很多与订单的操作...

当然,我以为这是关于某种循环,其执行会导致对顺序条件的多次检查。而事实证明,这种情况只能通过从头开始重写代码来纠正?

 
micle:

仅仅是下面的建筑就值得一试。

多一点

而我们已经知道什么是按什么顺序执行的。 这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,它将把主算法从成堆的杂乱代码中解脱出来。

但它不会以任何方式影响性能吗?

 
micle:

重复编码的麻烦

复制与此无关,也与如果无关。真正的减慢来自于与权证的合作。
 
micle:

仅仅是下面的建筑就值得一试。


多一点

而我们已经知道什么是按什么顺序执行的。 这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,将主要算法从成堆的杂乱无章的代码中解脱出来。

非常有力的论据,你的代码,我在哪里可以看到一个有经验的程序员?
 

1.1版

为了设置止损和过滤挂单,我们使用了两个使用镜像MA的选项。
maMirror - 使用标准的iMA函数计算,每个柱子工作一次,数据取自柱子的开盘价。
计算算法。

用于出售。
初始计算点maMirror=iMA+pipsXHmaM(o/b)
后续计算点 maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
计算结束后完成计算。

用于购买。
初始计算点maMirror=iMA-pipsXHmaL
后续计算点 maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
计算终止于计算终点之后。


为了简化ToR,有必要将两个计算块放在一起,它们在操作和变量上是相互独立的,并由用户设定。
maMBlock=0 - 不使用块(使用标准止损)。
maMBlock=1 - 只使用1号区块。
maMBlock=2 - 只使用2号区块(使用标准止损)。
maMBlock=3 - 使用两个区块

1号区块
计算止损。止损被重新计算,订单在每个条形图上都被maMirror的值更新。
1 变量StartPoint用于确定计算的起点,如果StartPoint=1(计算在触及maT后进行),如果StartPoint=2(计算在订单打开后进行)。
1.1 如果StartPointO=1,则计算在触及maT后完成。
1.2.如果StartPointO=2,结算在订单关闭后完成。
1.3 如果maMirror不能设置止损,订单将被关闭。
1.4.Levl_Zerro=0(不使用),Levl_Zerro!=0(止损被更新为从开盘价算起的最大指定值,一个负值意味着止损被转换为一个正值)。

第2座
挂单过滤的计算方法
0.1 买入一个订单,如果maMirror>挂单的开盘价,则下单。
0.2 卖出时,如果maMirror<挂单的开盘价,则下单。
1 StartPoint变量用于确定计算的起点,如果StartPoint=1(计算在触及maT后进行),如果StartPoint=2(计算在订单打开后进行)。
1.1 如果StartPointB=1,计算在触及maT后完成。
1.2 如果StartPointB=2(结算在订单关闭后完成)。
2.如果maMirrorDell=0(不使用)maMirrorDell=1(如果第0点的条件不匹配,所有未结订单都会被删除)

用户变量
maMirrorO (iMA的设置)
maMirrorB (iMA设置)
起点O
起点B
pipsXHmaMo
pipsXLmaMo
pipsXHmaMb
pipsXLmaMb
硕士生

镜像Dell

帮助估算任务,客户想要一份新的工作,不知道该估算多少钱)由于我不是程序员,我是一名航天学院的工程师)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
第一个也许是最重要的问题是,代码是不可读的和非结构化的。你可能有相当明确的职权范围。如果你理解ToR,并按照正确的方向编写代码,(作为一项规则)在执行速度上会有很大的提高,但也会花费其他的钱。
 
-Aleks-:

它是否以任何方式影响性能?

在这个特定的例子中,它没有任何影响。不希望在整个EA脚本中处理这种格式化,也不希望完全重新格式化。
 
zfs:
非常有力的论据,你的代码,我在哪里可以看到一个有经验的程序员?
我的代码不在公共领域。商业开发在高负荷的网络服务器上和周围工作。特别是,作为DorogaTV项目 的一部分,我的代码计算了 "几个 "城市道路上的交通拥堵情况
 
TheXpert:
复制与此无关,如果也与此无关。真正的放缓是由与订单合作给出的。

在TK代码中处理订单,或者是TK本身,或者是MT4在一般情况下处理订单?