顾问的项目 - 页 2

 
Vasiliy Sokolov:

重新安排括号并不能使它变得不那么混乱。在你给出建议之前,至少要把你的水平提高到平均水平。

我的水平有什么问题?

 
STARIJ:

评语应占节目文本的一半

我甚至写了一些东西--首先是 "这里应该发生什么 "的长篇评论,然后是实现它的代码 :-) 顺便说一下,我也建议新手使用这种方法
 
Maxim Kuznetsov:
我写的一些东西--首先是一个长长的评论 "应该有什么",然后是实现它的代码 :-) 顺便说一下,我也建议新手采用这样的方法。
首先是一个函数的存根,说明它将做什么,并返回(什么)。然后,代码
 
Vitaly Muzichenko:

不要用这种风格来写永远不变的函数,也不要写永远不变的函数

简明扼要地写,反正没有人看,而且占用一半的空间。


在代码上一直注释,这段代码负责什么,这并不难,现在你会一直知道代码是什么,并减少研究它的时间


维塔利,我猜对了,你有一个12英寸的笔记本屏幕?

我记得在过去的日子里,在CV-1420的字母数字屏幕上,24行x80个字符,我也试图节省空间))现在,我试着把它写出来,这样就能更快地理解。

 
Vitaly Muzichenko:

不要用这种风格来写永远不变的函数,也不要写永远不变的函数

简明扼要地写,反正没有人看,而且占用一半的空间。


在代码上一直注解,这段代码是负责什么的,这并不难,而且在这里修改会一直知道这段代码是什么,减少研究它的时间

然后用你的眼睛捡起底部的这4个括号指的是什么。这是一个非常糟糕的代码风格。总的来说,MS有最好的,而MQ自称是K&R风格的事实并不是模仿它的理由。打孔卡片和80x24显示器的时代早已过去。

void CloseOrders(int cmd) {
 for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && cmd==OP_BUY) {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue)) Print("Order BUY not close! Error = ",GetLastError());
    }
     if(OrderType()==OP_SELL && cmd==OP_SELL) {
      if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red)) Print("Order SELL not close! Error = ",GetLastError());
    }
}}}}
瓦西里-索科洛夫
好吧,那么90%的代码都是注释。此外,必须尽可能多地提供无意义的和不好读的代码,这样才有可能放更多的注释!"。

但当我老了以后,我可以把这些评论以《外汇与我》一书的形式出版))))。不,我更喜欢 "我和外汇"。

 
Alexey Volchanskiy:

然后挑选你的眼睛,看看底部的那四个括号指的是什么。这是一个非常糟糕的代码风格。总的来说,MS有最好的,而MQ宣称有K&R风格的事实并不是模仿它的理由。打孔卡片和80x24显示器的时代早已过去。


但当我老了以后,我可以把这些评论以《外汇与我》一书的形式出版))))。不,我更喜欢 "我和外汇"。

工作屏幕27英寸。

我不打算重读,但要引用。"不要写那些总是不变的函数,不要 写这种风格的 变化"

为什么要为一个在平台发布时只写一次、将来永远不会改变的函数挑花眼?你是否经常修改/编辑函数中的代码以获得手数、订单数 和典型?那为什么要把它延伸到32英寸显示器的3个屏幕上呢?

P.S. 所附的代码是从kodobase上伪造的。

 
Vitaly Muzichenko:

27英寸工作屏幕

我不打算重读了,我只是引用。"不要写那些总是不变的函数,永远不要改变 这种风格"

为什么要为一个在平台发布时只写一次、将来永远不会改变的函数挑花眼?你是否经常修改/编辑函数中的代码以获得手数、订单数 和典型?那为什么要把它延伸到32英寸显示器的3个屏幕上呢?

躺在那里的档案每三百年以同样的方式打开一次。

而当它真的打开时--去找它在一堆}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},什么是什么。

如果你写了一个陷阱,对它进行了测试,并把它送到一个库或一个类中储存,你为什么要为自己写一个陷阱呢?就这样了。当你需要刷新你的记忆时(可能是,你需要在此基础上做一些事情,无论如何......你需要添加一些东西 )--你只需坐在那里,移动括号......

 
Vitaly Muzichenko:

27英寸工作屏幕

我不打算重读了,我只是引用。"不要写那些总是不变的函数,永远不要改变 这种风格"

为什么要为一个在平台发布时只写一次、将来永远不会改变的函数挑花眼?你是否经常修改/编辑函数中的代码以获得手数、订单数 和典型?那么为什么要把它延伸到32英寸显示器的3个屏幕上呢?

P.S. 所附的代码是从kodobase中提取的。

维塔利,你的函数的第一个版本清楚地显示了哪个闭合括号指的是哪个开放括号,而第二个版本打破了你的眼睛寻找一对...

通常情况下,自定义函数不会大到无法在屏幕上显示。而且,在编译后的EA中,括号如何排列根本不重要。

 
Artyom Trishkin:

躺在那里的档案也是每三百年打开一次。

但当它真的打开时,你将不得不在}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},以找出其中的内容。

为什么要为自己写一个陷阱,如果你写了它,测试它,并把它送到图书馆或班级去储存。就这样了。当有必要刷新你的记忆时(也许在此基础上做一些事情,你永远不知道......)--只要坐着移动括号......

不,我在文件中没有任何东西,我不贪心,我与熟人分享程序,而且非常频繁,我不发送档案,而只发送一个文件。

所有的功能都在底部,但执行代码总是写得很好,而且有注释,即使是孩子也能搞清楚。

 
Gregory Kovalenko:
你好。
随着代码量的增加,有时会变得困难和混乱。
我见过有大量代码的EA代码,我想知道复杂的EA是如何设计的,也许有一些工具或技术来处理这样复杂的算法?

我在任何EA中都有几千行的代码。(它们是通过内含物自动包含的)。

事实上,一个EA由CExpert类模板组成,它有OnInit、OnTick等函数。在EA的连接模板中,所有的全局函数--事件--都会调用该类型对象的相应函数。

在初始化过程中,CExpert通过预定义的全局函数 "EA零件工厂 "来请求,它知道如何创建工作所需的一切。

专家顾问本身由五行组成。在这个文件中声明了EA的零件工厂本身的对象,并且包含了内含物。

我个人非常喜欢OOP的方式,虚拟接口和实现的划分。首先,我们描述一下接口文件--一个抽象类,其中所有的函数都是虚拟的,并且等于零。该类定义了 "交互协议"。然后,我们从它那里继承真正的类,在这些类中,所有这些功能都被完全实现了(有时我们有一整个层次的类,当功能的描述被 "按层次 "分布时)。

这种方法--允许分离实体,这使得进一步支持整个项目,以及重复使用类非常容易。