Индекс производительности труда показывает изменение объема выпущенной продукции, приходящегося на одного работника. Этот показатель полезен для предсказания инфляции и прироста объема производства. Если стоимость труда увеличивается соответственно увеличению производительности, и, кроме того, маловероятно увеличение производственных издержек...
// Для МТ4 - возвращает otfFilingType.
// Для МТ5 - возвращает тип исполнения ордера, равный otfFilingType, если он доступен на символе strSymbol, иначе - корректный вариант.
ENUM_ORDER_TYPE_FILLING CSymbolInfo::GetTypeFilling(string strSymbol,ENUM_ORDER_TYPE_FILLING otfFilingType = ORDER_FILLING_FOK)
{
#ifndef __MQL5__
return(otfFilingType);
#else // __MQL5__
// Функцию предложил fxsaber. Серьезной проверки не было - полагаемся на его авторитет.
const ENUM_SYMBOL_TRADE_EXECUTION steExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(strSymbol, SYMBOL_TRADE_EXEMODE);
const int iFillingMode = (int)::SymbolInfoInteger(strSymbol, SYMBOL_FILLING_MODE);
我的风格的一个例子?
比如说这个。
想象一下,你有100个函数,每个函数都返回这样一条记录。你要找的是这些条目中的一个错误。你要花多长时间来搜索?
比如说这个。
想象一下,你有100个函数,每一个都返回这个记录。你要找的是这些条目中的一个错误。你要花多长时间来搜索?
我不会搜索超过几分钟,特别是这种风格的记录允许你在 "一个屏幕 "上显示几十个以上的功能,这使你更容易处理代码。
比如说这个。
想象一下,你有100个函数,每一个都返回这个记录。你要找的是这些条目中的一个错误。你要花多长时间才能找到它?
相信我,当我写这样的文本时--这不是为了风格或简洁的原则,而是因为这对我来说真的容易得多。
你引用了最简单的方法。说实话,我看不出这有什么好困惑的。
我必须承认,我看不懂C++代码,因为我根本就不懂它。但人们在其中写作。所以这只是一个无知的问题。
相信我,当我这样写的时候,不是为了风格或简洁,而是因为这对我来说确实更容易。
你引用的是最简单的术语。说实话,我不明白这有什么好困惑的。
我必须承认,我看不懂C++代码,因为我根本就不懂它。但人们在其中写作。所以这只是一个无知的问题。
也许我们对代码的简单性有不同的想法。
我知道你在编程方面是一个伟大的专业人士。但是,当你在所有事情上追求最高的生产力时,你不应该忘记劳动生产率。它始于代码的可读性。我不清楚为什么以牺牲代码的可读性为代价来压缩代码的冲动是合理的,但在大型(独立)项目中这是相当不可接受的。
坦率地说,我讨厌C++,因为它太难读了。因为堆积起来的实体的存在很容易被避免。而且它只会变得更好。宽敞。
SZU.我认为在开发中,代码的压缩不应该以牺牲可读性为代价,而应该以更好的解决方案为代价,同时让代码尽可能的可读。代码理解的速度对你自己的生产力有很大影响。
ZSY,这个主题很好。谢谢你。
想一想你在整数之外会得到什么。
所以对LONG_MAX 的检查--应该是在将双倍数转换为长倍数之前。 显然,四舍五入函数不是为那些不适合整数的值设计的。而这并不能改变问题。
如果该函数返回的是双数,然后我们将其转换为长数,我们同样面临溢出的危险。
就个人而言,在四舍五入之前--我总是对边界值进行断言检查,再加上程序的逻辑--我总是着眼于确保转换后的数值永远不会超过一个整数的最大值。
我不会看超过几分钟的时间,特别是由于用这种方式写作,可以在 "一个屏幕 "上显示几十个以上的函数,使之更容易处理代码
我对这一点有所怀疑。
以下是我的函数的实际代码,它返回执行的类型(该代码是由fxsaber 建议的,我非常感谢他)。
该功能效果非常好。我检查了许多次,没有任何错误。但我仍然不明白,尽管我自己有相当好的经验,但在这个可怕的回报中,结果是如何形成的。 此外,fxsaber 回答说他自己不记得这个问题。
维塔利,告诉我这个代码是如何工作的,如果它对你来说不是太难,而且你 "在几分钟内理解它 "的这种风格 !
我将在返回运算符 中 "打开括号",用if替换所有的 "问题",并通过逻辑 "or "返回找到的值。 我个人对运算符 "问题 "感到很烦。它产生的代码与类似的if完全相同,但其可读性要差很多。
我对它有怀疑。
下面是我的函数的实际代码,它返回执行类型(代码是由fxsaber 建议的,我非常感谢他)。
该功能效果非常好。我检查了许多次,没有任何错误。但我仍然不明白,尽管我认为我有足够的经验,但结果是如何形成的。 此外,fxsaber 自己回答说他甚至不记得这个问题。
维塔利,告诉我这个代码是如何工作的,如果它对你来说不是太难,而且你 "在几分钟内就能理解它 "的风格是类似的 !
我会在返回运算符 中 "打开括号",用if替换所有的 "问题",并通过逻辑 "or "返回找到的值。 我个人对 "问题 "运算符感到很烦。它产生的代码与类似的if完全相同,但其可读性要差很多。
我不会解读代码,但我曾经从我的模板中贴出一块,也有类似的方法。我不喜欢把 "如果 "拉伸到显示器的两个卷轴上。
不要忘记工作效率。它从代码的可读性开始。
我的代码的一个例子,现在我完全不明白。而且有很多因素你需要很好地了解。
关于交易、自动交易系统和策略测试的论坛
Init()和DeInit()的执行顺序
fxsaber, 2017.04.14 23:35
正如你所看到的,代码/风格非常简单。但是,只有当我能重新写出同样的代码时,我才能发现其中的错误或没有错误。这真的会花很多时间,因为我需要充分了解这个问题。
这就是为什么原则是在创建阶段对复杂的东西进行清理(写压力测试),并通过插入mqh以简单的形式使用。正如你所看到的,复杂性并不总是由风格或简洁决定的。
还有一个纯粹的语言构造的例子--TypeToBytes。那里的理解复杂性是一个相当不同的水平。而这正是我在没有宏的情况下会枯萎的地方。正是因为有了宏,你可以相当迅速地进入源代码。因为宏的使用往往不是为了简洁,而是为了理解。
还有一种情况是,你必须考虑很多不复杂的、但容易被遗忘的隐患。这就是MT4Orders的情况。这就是为什么那里的一些线条伴随着只针对自己的评论。这有助于理解你的代码。
但请注意,这些都是mqh,你不需要进入。而TC的代码是用mqh写的,非常简单。你没有研究常规iHigh功能的源代码。而他们确实是怪物。你只需使用它们。你对图书馆也应该这样做。同样的泛用书目来使用并不要求你完全理解它。
看看MT4 EAs的QB和他们的MT5端口。MT5端口是一个难以理解的缺陷。它不仅没有闻到接近简洁的味道(代码比原来的大很多倍),而且还带有mqh-files中没有考虑到的MT5陷阱。
我不会解读代码,但我曾经从我的模板中贴出一块,也有类似的方法。我不喜欢把 "如果 "拉长到两个显示器的卷轴上。
在这种情况下,使用函数是明智的。
而你没有解释代码的事实,说明你也不能马上弄清楚它的工作原理。你必须彻底分析括号,那些非常 "问题 "和逻辑上的 "或"。但是这种 "堆积 "在非常有限的情况下是可以接受的,当它提供了更有效的代码来用于程序的 "瓶颈"。在这种情况下,获取执行类型不可能成为瓶颈,这样的代码在这里是不可取的。我完全是根据fxsaber的权威和反复的自我测试来使用它。但是,这是一个例外。作为一项规则,我不使用我自己没有详细弄清楚的代码。
该功能真的很好用。我检查了很多次,没有发生错误。但我仍然不明白,尽管我认为有足够好的经验,但结果是如何形成的。 此外,fxsaber 自己回答了这个问题,他自己不记得了。
这不是关于回归者。如果你用if-else的形式描述同样的逻辑,也不会让我更好地理解它。当你把 "无支持的填充 "问题拿出来深入研究时,情况正是如此。你必须写很多相关的压力代码,在不同的Torus服务器上开很多账户,并在所有的符号中竞赛。在不同的旗帜组合中寻找模式。最后,使所有的表格达到同一分母。这就是 "不记得了 "的原因。
实现了该问题不再发生,并安全地被遗忘。当你不需要回到曾经写过的代码时,这很好。它是有效的--最主要的是。