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

 
Artyom Trishkin:

我已经回答过你了。

你接受名单上的最后一个订单。

而你首先要弄清楚订单清单的状态有多大变化。原来是12,变成了8--已经改变了4个订单。相应地--你需要打印所有四个订单。而且你总是只打印列表中的最后一个。

你怎么知道它有多大变化?当你启动EA时,你应该在一个变量中写入订单的数量,例如,int last_total。 然后,在每个刻度上,将OrdersTotal()与last_total进行比较。如果它们不平等,那就是一种变化。将OrdersTotal()和last_total之间的差异写入一个变量,例如num_changes,并将OrdersTotal()的新状态保存到last_total。
这里可能有一些微妙之处,例如,当一个挂单被触发时。但是现在,你应该先做你需要做的事情。
知道了挂单的数量,你就可以在历史上查找它们。但是,您也可以限制对历史订单列表的监控--对历史订单列表做上述所有工作,而不是对市场订单列表。过去和现在的区别--这是你需要分析的订单量。你总是只分析列表中的最后一个订单。

然而,这不能保证历史列表中的最后一个订单是最后一个关闭的订单。这也是一个必须考虑的细微差别。但随后。

非常感谢你。这样就更清楚了。关键字--你应该一次不只打印一个而是4个订单。如果你在第一个帖子里告诉我,我就不会折磨你了。

 
ANDREY:

非常感谢你。这就更有意义了。关键字是一次不打印一个而是4个订单。如果你在第一个帖子里告诉我,我就不会折磨你了。

不客气。在你自己学会对这种或那种行为进行逻辑分析之前,你不会从死胡同里走出来--你会在论坛上问。你将在论坛上提出问题。它不必与订单/清单/票据等相联系。

我认为,如果你使用苹果,你可以很容易地创建一个算法来记录桌子上有多少个苹果,然后你出去抽烟,回来的时候--苹果就少了......
你怎么知道的?容易 - 5个苹果,3个苹果。有两个人失踪了。这只猫一定有...或者以前有五个,现在有六个。有一个人出来了。从潮湿的地方,也许...不管是哪种情况,你都在脑子里计算了差异。

那么,同样的行动与算计订单有什么不同呢?同样的苹果...与其说是 "在思想上",不如说是 "在功能上"。

 

如果已经有超过200行的代码,不方便全部浏览,请告知如何从代码中删除该功能 分解)。我对 "力学 "感兴趣:函数如何被 "分解",写在哪里,以便以后在主代码中调用它。

如果你有一个带有描述的例子,我希望得到一个链接。
 
Alexey Kolybelnikov:

如果已经有超过200行的代码,不方便全部浏览,请告知如何从代码中删除该功能 分解)。我对 "力学 "感兴趣:函数如何被 "分解",写在哪里,以便以后在主代码中调用它。

如果有一个带有说明的例子,我希望得到一个链接

曾经是。

double a = (b + c) / (d - e);


成为了。

double a = Add(b,c) / Sub(d,e);

//---------

Add(const double v1,const double v2) { return v1 + v2; }

Sub(const double v1,const double v2) { return v1 - v2; }
 
Artyom Trishkin:

不客气。在你学会如何为自己制定这个或那个行动的逻辑之前,你将不会从死胡同里走出来--你将在论坛上提问。而且逻辑不能再简单了--可以用简单的话语把它组合起来。它不必与认股权证/名单/门票等联系在一起。

我认为,对于苹果,你可以很容易地创建一个跟踪其数量的算法--一切就像在现实生活中:你记得桌子上有多少个苹果,你出去抽烟,当你回来的时候,苹果就少了......
你怎么知道的?容易 - 5个苹果,3个苹果。有两个人失踪了。这只猫一定有...或者以前有五个,现在有六个。有一个人出来了。从潮湿的地方,也许...无论是哪种情况,你都在心里默默地数着差异。

那么,同样的行动与算计订单有什么不同呢?同样的苹果...与其说是 "在思想上",不如说是 "在功能上"。

明白了,谢谢你的澄清。同样的问题在我的脑海中已经存在了很长时间....我的代码假设Print()函数 会经常在日记中打印。日志中会自动打印每个未结订单和每个关闭的订单。我有很多的订单。 相应地,会有很多关于订单的记录。这些记录常常阻止我从Print()函数中获取数据,而这些数据也可能非常多。

Q: .

我怎样才能使它在我需要时,不在日记中显示 未结和已结订单的信息只在Print()函数中 显示。

是否可以借助一些MQL4功能来完成,或者我应该改变MT4终端的代码?

谢谢你。
 
ANDREY:

明白了,谢谢你的澄清。同样的问题在我的脑海中已经存在了很长时间....我的代码假设Print()函数 会经常在日记中打印。日志中会自动打印出每一个开放的订单和每一个关闭的订单。我有很多的订单。相应地,会有很多关于订单的记录。这些记录常常阻止我从Print()函数中获取数据,而这些数据也可能非常多。

Q: .

我怎样才能使它在我需要时,不在日记中显示 未结和已结订单的信息只在Print()函数中 显示。

是否可以使用一些MQL4函数来完成,或者需要修改MT4终端的代码?

谢谢你。

如果你做了研究,你最好把它写在文件里。我不知道如何在日志文件中显示带有订单的行动,我认为没有这样的事情。 这是EA操作的开始和结束的条目水平。这些是日志文件条目。文件将只包含你想要的内容,日志将包含除你之外的终端记录。你可以在终端进行修改,你甚至可以编写你自己的)))但要花多少钱?

 
Alexey Kolybelnikov:

如果已经有超过200行的代码,不方便全部浏览,请告知如何从代码中删除该功能 分解)。我对 "力学 "感兴趣:函数如何被 "分解",写在哪里,以便以后在主代码中调用它。

如果有一个带有描述的例子,我希望能有一个链接。

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

和进一步的链接...一般来说:把所有 "额外 "的东西放在*.mqh库中,放在主代码的开头。 编译器会把它 "粘 "在一起

但一般来说,200行不算太多--使用 按钮,你可以放心地使用超过一千行。

 
Valeriy Yastremskiy:

如果你在做研究,最好是写到一个文件里。我不知道如何在日志文件中显示订单行动,我认为没有任何行动,这是EA工作开始和结束的记录水平。这些是日志文件条目。文件将只包含你想要的内容,日志将包含除你之外的终端记录。你可以在终端进行修改,你甚至可以编写你自己的)))但要花多少钱?

谢谢你的提示。但我想我从未在文件中写过EA。我一直在MetaEditor 4中编写EA。为了查看Pront()在所有测试期间的表现,我选择了Log - Open tab。在记事本中打开一个文件,内容与日志标签中的内容相同。对我来说,它看起来像一个日志文件。
但在我看来,我无法从这个记事本文件中删除所有开放和关闭的订单。更准确地说,你是这样。但这是非常繁琐和耗时的工作。
如果您告诉我如何使我的代码打开和关闭订单的秘密,我会非常感激,但在文件中,所有订单的打开和关闭的信息都没有,而只有Pront()函数的记录。
谢谢你的帮助。

 
ANDREY:


你知道我在哪里可以读到更多关于MQL4的最新更新吗? 有很多信息,但很难找到你需要的东西。

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY:

谢谢你的提示。但我不认为我曾在文件中写过EA。我一直在MetaEditor 4中编写EA。要看Pront()函数在整个测试期间的输出情况,我选择日志--打开标签。在记事本中打开一个文件,内容与日志标签中的内容相同。对我来说,它看起来像一个日志文件。
但在我看来,我无法从这个记事本文件中删除所有开放和关闭的订单。更准确地说,你是这样。但这是非常繁琐和耗时的工作。
如果您能告诉我如何使我的代码打开和关闭订单的秘密,我将非常感激,但在文件中,关于打开和关闭所有订单的信息都没有,只有Pront()函数的条目。
谢谢你的帮助。

int OnInit()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1/Point; // чтобы не делить на пойнт
   tx=TimeCurrent();// задание времени начала работы советника
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   FileClose( Handle );                // Закрываем файл
   Alert("Файл ",File_Name," закрыт.");// Сообщение
     
//--- destroy timer
   EventKillTimer();

  }

void OnTick()    // Функция start() раньше называлась
  {
.................
 Qnt_Symb=FileWrite(Handle,Symbol()," ТФ ",Period(),"Открыт ордер Buy по цене ",Ask,
            "Ticket = ",Ticket," ProfB=",ProfB," MxProfB=",MxProfB, " ProfS=",ProfS," MxProfS=",MxProfS);//Запись в файл
            if(Qnt_Symb<=0) // Если не получилось
              {
               Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
   if(Handle==-1) // Неудача при открытии файла
     {
      Alert("Ошибка при открытии файла. ",// Сообщение об ошибке
            "Возможно, файл занят другим приложением");

     }

   return(Handle);
  }
//+------------------------------------------------------------------+

在测试器中,文件将在文件夹\tester\files中,如果你把它放在窗口,它将在文件夹\MQL4\Files中。而科瓦列夫有详细的介绍。

原因: