新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1143

 
Alexey Viktorov:

其中一个是我。而且我从来没有学过C#或C++,我也不知道什么是OOP。

请理解这个简单的事实,mql5只在OrderSend()函数上与mql5不同,也许还有一些我不记得了的函数。另一个重要区别是指标缓冲区的 索引方向。然而,它可以很快得到解决,但你最好习惯于新的功能。而获得指标值仍然是一样的。我没有读过Kovalev的书,我不知道那里有什么,但我怀疑这本书中的任何解决方案都不能用更新的MetaEditor mql4来写。

酷。))))不过,我没有做到,程序化的Fortran和Basic在加载时也没有做到。这是一个很好的教程,结构良好,足够清晰,确实可以作为一个基础,当然如果创作者需要学生的话。不幸的是,没有任何其他人。我还没看够PLO,所以要看文章。 我已经在更新的MT4终端上试了很多教程。有很多关于数据类型的备注都没有给出。 编译器在严格检查中也没有发现任何错误。

 
Valeriy Yastremskiy:

酷。))))不过,我没有得到它,在加载程序化的Fortran和Basic。好的教程,结构良好,足够清晰,确实可以作为一个基础,当然,如果创作者需要学生的话。不幸的是,没有任何其他人。我还没看够PLO,所以要看文章。 我已经在更新的MT4终端上试了很多教程。有很多关于数据类型的备注都没有给出。编译器在严格检查中也没有发现任何错误。

以下 是我对OOP的看法。而且,从头阅读整个主题也不会有什么损失。

ООП для школьников.
ООП для школьников.
  • 2019.10.04
  • www.mql5.com
======================================================================================================================== В этой теме будет нескольк...
 

问候。请告知,在选择了一个订单 后,不清楚是什么原因使票据发生变化。代码。

      for(int i=OrdersTotal()-1; i>=0; i--){
         if(OrderSelect(i ,SELECT_BY_POS, MODE_TRADES)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP){
               Print("111  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
               temp=OrderTicket();
               if( OrderOpenPrice()>start_bid
               +((MathCeil( (Bid-start_bid)/(bs_distance*Point) )+bs_orders+Orders("bs")+1)*bs_distance*Point) ){
                  Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice()); 
                  if(!OrderDelete(OrderTicket(), clrBlack)){
                     Print("333 OrderDelete bs Bid ", Bid, "  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
                  }
               }
            }
         } 
      }

市场上有两个订单,BUYSTOP票10和BUY票9。

日志。


 
Alexey Viktorov:

以下 是我对OOP的看法。而且从头开始阅读整个主题也不会有什么损失。

谢谢,我同意))))

 
Andrey Sokolov:

问候。请告知,在选择了一个订单 后,不清楚是什么原因使票据发生变化。代码。

市场上有两个订单,BUYSTOP票10和BUY票9。

日志。


我假设其中一个自己编写的函数正在浏览订单(例如Orders("bs")),因此重新运行OrderSelect()。当它返回到呈现的循环时,所有数据都是在那里选择的最后一个订单。

 
Igor Zakharov:

我假设其中一个自己编写的函数通过订单(例如Orders("bs")),并相应地重新选择OrderSelect()。在返回到提交的循环时,所有的数据都是在那里选择的最后一个订单。

谢谢

 
Andrey Sokolov:

问候。请告知,在选择了一个订单 后,不清楚是什么原因使票据发生变化。代码。

市场上有两个订单,BUYSTOP票10和BUY票9。

日志。


你的工作代码与公布的代码不一致。

Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice());

在这段代码中,"OrderTicket() "被打印在哪里?

注意对其他用户功能的调用,其中可能包括订单选择。

 
Alexey Viktorov:

你来对地方了。这里有一个关于如何正确进行mql4的提示,由新的mql4文档指导。

如果你觉得写东西很困难,那就问一个具体的问题,你写了什么,你没能得到什么。只要记住,没有人会用一个难以理解的行来阅读一公里长的代码。我当然不会。

你是我的问题所要问的人。因为根据你的要求,我把我的Mql4代码给测试者做得很短,只是为了清楚地显示我的问题。但不幸的是,阿特姆并不理解。

如果你能修改代码以解决我的问题,我将非常感谢你。我将再次告诉你其本质。

当我关闭每个 订单时(同时有许多未结订单),我需要在Print()中输出已关闭订单的一些参数。我已经非常成功地学会了这样做。但.....,有一个问题是我的思想不足以解决的。一些订单在同一时间和同一价格 被止损关闭。在这种情况下,程序会忽略 第一个关闭的订单, 打印Print() 最后一个关闭的订单。而且在第一条之后就不打印了。

Q: .

在我上面描述的情况下,即使在第一笔订单被止损 关闭后,可以用什么语言结构来使程序打印()?

int H;
int L;
int TP;  
int start()
{
int Ht = OrdersHistoryTotal();
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (TP!=OrderTicket( ))
{
Print("---------------------------------------------------------------=",TimeToString(OrderOpenTime()) );
TP=OrderTicket( );
}

if (TimeCurrent()==1262598040)
if (H==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.6217,1.60919,"300",10 );
H=1;
}
if (TimeCurrent()==1262601140)
if (L==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.62199,1.61758,"300",10 );
L=1;
}
return(0);


 
ANDREY:

你正是我问题的对象。因为根据你的要求,我把我的Mql4代码给测试者做得很短,只是为了清楚地证明我的问题。但不幸的是,阿特姆并不理解。

如果你能修改代码以解决我的问题,我将非常感谢你。我将再次告诉你其本质。

当我关闭每个 订单时(一次有很多订单),我需要打印()一个已关闭订单的一些参数。我已经非常成功地学会了这样做。但.....,有一个问题是我的思想不足以解决的。一些订单在同一时间和同一价格 被止损关闭。在这种情况下,程序会忽略 第一个关闭的订单, 打印Print() 最后一个关闭的订单。 而且在第一条之后就不打印了。

Q: .

在上述情况下,可以用什么语言结构使应用程序打印Print(),即使是在第一笔订单在停止 时关闭之后?


你的代码除了在严格规定的时间内开立两个卖出头寸,并在允许的情况下打印最后一次开仓的时间外,还做了什么?就这样了。使用未初始化的变量,会导致代码行为的 "奇迹",以及非常非常老的start()处理程序,这是从尘封多年的架子上拉下来的蜘蛛网,在市场上(有一天你想卖东西)用古老的处理程序永远不会错过验证器--它会说程序类型错误。

 
ANDREY:

你是我的问题所要问的人。因为根据你的要求,我把我的Mql4代码给测试者做得很短,只是为了清楚地证明我的问题。但不幸的是,阿特姆并不理解。

如果你能修改代码以解决我的问题,我将非常感谢你。我将再次告诉你其本质。

当我关闭每个 订单时(同时有很多订单),我需要打印()已关闭订单的一些参数。我已经非常成功地学会了这样做。但.....,有一个问题是我的思想不足以解决的。一些订单在同一时间和同一价格 被止损关闭。在这种情况下,程序会忽略 第一个关闭的订单, 打印Print() 最后一个关闭的订单。 而且在第一条之后就不打印了。

Q: .

在我上面描述的情况下,即使在第一笔订单在停止 时关闭后,可以使用什么语言结构使程序打印()?

我不记得阿特姆的答案了。他文章中的所有代码要么是多终端的,要么有两个版本,一个用于mql5,另一个用于mql4。我在mql4上检查了这些版本,一切工作正常,通过停止或采取检测关闭,没有错误。

是的,这些文章很难理解,但如果你不比我大,那是值得的。而我,作为一个程序员,已经老得令人发指了。

另一个选项更简单,但工作速度会慢很多。将订单票写在一个数组中,并使用这个数组选择订单,检查订单的关闭时间。如果它大于零,意味着它是封闭的。如果一个平仓订单的注释包含字母 "sl",这意味着该订单是使用止损点平仓的。如果该订单被关闭,它将从数组中删除。或者,在阵列完成后,它被重新填入剩余的未结订单。想象力一般都在飞。

你选择哪个选项取决于你。并阅读我关于科瓦列夫教科书的一些帖子。教程建议写int start(),而在更新的mql4中,对于Expert Advisors应该写void OnTick()。

关于指标和脚本,请参考文件。顺便说一下,在更新的mql4中写指标要比Sergey写这个教程时容易得多。

原因: