线性减速是编程错误还是MT4的特点? - 页 4 1234567891011 新评论 Mikhail Vdovin 2013.09.19 20:53 #31 仅仅是下面的建筑就值得一试。 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; } } } }这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,将主要算法从成堆的杂乱无章的代码中解脱出来。 Aleksey Vyazmikin 2013.09.19 20:58 #32 micle:问题是代码的重复,条件语句的数量过多。事实上,这段代码由99%的行组成,其中包括条件性的If操作符;我相信如果你研究一下,比较的数量可以减少10倍。 这不仅会减慢执行速度,而且这段代码也很难读。一个对其进行补充的人至少有2个主要任务。1 - 不破坏它2 - 增加必要的功能。无论如何,不可读的代码 会导致各种检查和比较的额外重复--而这又是额外的费用。翻看代码,我个人记得自己大约在25年前,那时我刚刚开始编程,我从手册中学习到Atari 800XL PC,没有任何老师,只是因为它很有趣。当然,这很有趣,我们在谈论什么 "如果",可能有我的TOR--我写 "如果这样,那么这样",程序员在代码中解释它,还有 "如果 "与订单的直接工作有关,有很多与订单的操作...当然,我以为这是关于某种循环,其执行会导致对顺序条件的多次检查。而事实证明,这种情况只能通过从头开始重写代码来纠正? Aleksey Vyazmikin 2013.09.19 21:00 #33 micle:仅仅是下面的建筑就值得一试。多一点而我们已经知道什么是按什么顺序执行的。 这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,它将把主算法从成堆的杂乱代码中解脱出来。但它不会以任何方式影响性能吗? TheXpert 2013.09.19 21:03 #34 micle:重复编码的麻烦 复制与此无关,也与如果无关。真正的减慢来自于与权证的合作。 Vasiliy Smirnov 2013.09.19 21:04 #35 micle:仅仅是下面的建筑就值得一试。多一点而我们已经知道什么是按什么顺序执行的。 这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,将主要算法从成堆的杂乱无章的代码中解脱出来。 非常有力的论据,你的代码,我在哪里可以看到一个有经验的程序员? Vasiliy Smirnov 2013.09.19 21:06 #36 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: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 Is the linear deceleration Mikhail Vdovin 2013.09.19 21:09 #37 第一个也许是最重要的问题是,代码是不可读的和非结构化的。你可能有相当明确的职权范围。如果你理解ToR,并按照正确的方向编写代码,(作为一项规则)在执行速度上会有很大的提高,但也会花费其他的钱。 Mikhail Vdovin 2013.09.19 21:12 #38 -Aleks-: 它是否以任何方式影响性能? 在这个特定的例子中,它没有任何影响。不希望在整个EA脚本中处理这种格式化,也不希望完全重新格式化。 Mikhail Vdovin 2013.09.19 21:19 #39 zfs: 非常有力的论据,你的代码,我在哪里可以看到一个有经验的程序员? 我的代码不在公共领域。商业开发在高负荷的网络服务器上和周围工作。特别是,作为DorogaTV项目 的一部分,我的代码计算了 "几个 "城市道路上的交通拥堵情况 Aleksey Vyazmikin 2013.09.19 21:32 #40 TheXpert: 复制与此无关,如果也与此无关。真正的放缓是由与订单合作给出的。在TK代码中处理订单,或者是TK本身,或者是MT4在一般情况下处理订单? 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
仅仅是下面的建筑就值得一试。
多一点
这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,将主要算法从成堆的杂乱无章的代码中解脱出来。
问题是代码的重复,条件语句的数量过多。事实上,这段代码由99%的行组成,其中包括条件性的If操作符;我相信如果你研究一下,比较的数量可以减少10倍。 这不仅会减慢执行速度,而且这段代码也很难读。一个对其进行补充的人至少有2个主要任务。
1 - 不破坏它
2 - 增加必要的功能。
无论如何,不可读的代码 会导致各种检查和比较的额外重复--而这又是额外的费用。翻看代码,我个人记得自己大约在25年前,那时我刚刚开始编程,我从手册中学习到Atari 800XL PC,没有任何老师,只是因为它很有趣。
当然,这很有趣,我们在谈论什么 "如果",可能有我的TOR--我写 "如果这样,那么这样",程序员在代码中解释它,还有 "如果 "与订单的直接工作有关,有很多与订单的操作...
当然,我以为这是关于某种循环,其执行会导致对顺序条件的多次检查。而事实证明,这种情况只能通过从头开始重写代码来纠正?
仅仅是下面的建筑就值得一试。
多一点
而我们已经知道什么是按什么顺序执行的。 这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,它将把主算法从成堆的杂乱代码中解脱出来。
但它不会以任何方式影响性能吗?
重复编码的麻烦
仅仅是下面的建筑就值得一试。
多一点
而我们已经知道什么是按什么顺序执行的。 这只是格式化而已。但你也可以把代码分解成逻辑上一致的操作,并把它们分成独立的函数。因此,将主要算法从成堆的杂乱无章的代码中解脱出来。
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
帮助估算任务,客户想要一份新的工作,不知道该估算多少钱)由于我不是程序员,我是一名航天学院的工程师)
它是否以任何方式影响性能?
非常有力的论据,你的代码,我在哪里可以看到一个有经验的程序员?
复制与此无关,如果也与此无关。真正的放缓是由与订单合作给出的。
在TK代码中处理订单,或者是TK本身,或者是MT4在一般情况下处理订单?