你好。
随着代码量的增加,有时会变得困难和混乱。
我见过有大量代码的EA代码,我想知道复杂的EA是如何设计 的,也许有一些工具或技术来处理这样复杂的算法?
Gregory Kovalenko:
你好。
你好。
随着代码量的增加,有时会变得困难和混乱。
我见过有大量代码的EA代码,我想知道复杂的EA是如何设计的,也许有一些工具或技术来处理这样复杂的算法?
多少钱才算多?是不是多到不能分解成文件?
![Большой проект! При самостоятельной разработке (одним человеком) сколько строк кода у Вас получается при создании Вами Большого проекта? Большой проект! При самостоятельной разработке (одним человеком) сколько строк кода у Вас получается при создании Вами Большого проекта?](/i/community/logo_mql5_small.png)
Большой проект! При самостоятельной разработке (одним человеком) сколько строк кода у Вас получается при создании Вами Большого проекта?
- 2016.03.20
- www.mql5.com
Форум алго-трейдеров MQL5
Gregory Kovalenko:
你好。
是的,这很简单:你需要精确地记录各个功能,并将它们分配到一个单独的文件中。主文件将立即缩小,变得更容易阅读
你好。
随着代码量的增加,有时会变得困难和混乱。
我见过有大量代码的EA代码,我想知道复杂的EA是如何设计的,也许有一些工具或技术来处理这样复杂的算法?
STARIJ:
这很简单:我们需要精确地记录各个功能,并将它们分配到一个单独的文件中。主文件将立即变得更小,更容易阅读
这很简单:我们需要精确地记录各个功能,并将它们分配到一个单独的文件中。主文件将立即变得更小,更容易阅读
我总是有一个mq4/mq5文件和一堆带类的mqh文件,每个类有一个单独的文件。一般来说,他们在工业发展中就是这样做的。没有一公里长的文件,所有东西都混在一起。
有时你可以看到一个杰作,整个EA都被装在OnTick中,在这个丑陋的表单中,开单的代码同样是20次。我想马上拿出呕吐袋 ))
Gregory Kovalenko:
你好。
你好。
随着代码量的增加,有时会变得困难和混乱。
我见过有大量代码的EA代码,我想知道复杂的EA是如何设计的,也许有一些工具或技巧来处理这样复杂的算法?
不要在这种风格下写那些总是不变的、永远不会变化的函数
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()); } } } } } }
简明扼要地写,反正没有人看,而且占用一半的空间。
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()); } }}}}
在代码上一直注释,这段代码负责什么,这并不难,现在你会一直知道代码是什么,并减少研究它的时间
Vitaly Muzichenko:
不要用这种风格来写永远不变的函数,也不要写永远不变的函数
简明扼要地写,反正没有人看,而且占用一半的空间。
一直在代码上做注释,这段代码负责什么,这并不难,现在你会一直知道这段代码是什么,并减少研究它的时间
评论必须占到程序文本的一半
Vitaly Muzichenko:
不要用这种风格来写永远不变的函数,也不要写永远不变的函数
简明扼要地写,反正没有人看,而且占用一半的空间。
在代码上一直注解,这段代码是负责什么的,这并不难,而且在这里修改会一直知道这段代码是什么,减少研究它的时间
重新排列括号并不能使滞后性降低。在给出建议之前,至少要把你的水平提高到一个平均水平。
STARIJ:
那么,在这种情况下,90%的代码应该包含注释。而且你需要尽可能多的无意义的、可读性差的代码,这样你就可以放更多的注释了!
评语应占节目文本的一半
Vasiliy Sokolov:
没有,那么90%的代码都是注释。而且你需要尽可能多的无意义的、可读性差的代码,这样你就可以放更多的注释!"。
没有,那么90%的代码都是注释。而且你需要尽可能多的无意义的、可读性差的代码,这样你就可以放更多的注释!"。
你的想法也是值得注意的。你应该更经常地讨论它们
我已经想问很久了。如果在mcl5中,你从include文件、classes中获得指标数据,优化会更快吗?
也就是说,在专家顾问本身的代码中没有调用指标句柄。