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

 
trader781:

我在理论上知道为什么会这样,所以我的问题是,我们能不能简单谈谈数组的使用问题?

你需要在哪里初始化、删除和处理它们,使其发挥作用?

P.S

当谷歌禁止它看起来像这样。

你为什么认为这是关于一个数组?
 
Alexey Viktorov:
为什么你认为这是因为阵列的原因?
因为这种情况以前从未发生过,如果发生过,那就是我在什么地方犯了错误,这也是我来这里的原因。你可以自己做,但需要更多的时间。
 
trader781:

需要

1) 在某个地方创建它(在全局区域,作为一个函数,在onit或ontic?)

2)发送订单时,将每张票据 写在里面,按顺序给它一个编号

3)根据需要通过数字将它们从那里拉出来

4)关闭整个网格时,将参数重置为零

你不需要一直把它放在记忆中。当你需要找到它时,你需要用一个本地数组来调用该函数,你将把所有的订单/位置放在循环中,根据你的需要对数组进行排序,从中选择必要的订单,对它们做任何你需要的事情,当你退出该函数时,你将忘记那个本地数组。下次你再调用该函数时,它将整理出这种调用时的订单/位置,并对它们做同样的处理。而且你不需要一个你必须不断监测和控制的全局阵列。
 
Artyom Trishkin:
你不需要一直把它放在记忆中。当你需要找到它时,你用一个本地数组调用该函数,你将把所有的订单/位置放在循环中,根据你的需要对数组进行排序,从中选择必要的订单,对它们进行任何你需要的处理,当你退出该函数时,你将忘记那个本地数组。下次你再调用该函数时,它将整理出这种调用时的订单/位置,并对它们做同样的处理。而且你不需要一个你必须不断观察和控制的全局阵列。

我不知道便宜了多少。每种情况都有自己的解决方案。在 MQL4中没有 OnTradeTransaction()事件,但我们必须以某种方式跟踪 "我们的 "订单这就是全局变量阵列派上用场的地方。

试想一下,一个账户上运行着几个专家顾问,其中一个计算量很大,另一个有大量的订单......如果是重度计算,会如何运作?这个EA是否要搜索大量的订单?一般来说,你不能没有搜索,但你应该尽量减少这一程序。

并确定该订单是否已经结束?翻阅整个历史?这不是太贵了吗?

 
trader781:
我以前从未犯过这种错误,但如果我犯过,我就犯了一个错误,这就是为什么我在这里问。我可以自己做,但需要更多的时间。

正如你从我之前的帖子中了解到的那样,我经常使用数组,而且从来没有遇到过任何问题。有一次,我写了一个EA,打开了2000多个订单,其票据被存储在一个数组中,完全没有问题。我不相信问题的出现是因为阵列的原因。我也无法相信可能是什么错误导致了这样的问题。

我想起了电影《不可能》......"不是啤酒害死人,是水害死人"...。

 
Alexey Viktorov:

我不知道便宜了多少。每种情况都有自己的解决方案。在 MQL4中没有 OnTradeTransaction()事件,但我们必须以某种方式跟踪 "我们的 "订单这就是全局变量阵列派上用场的地方。

试想一下,一个账户上运行着几个专家顾问,其中一个计算量很大,另一个有大量的订单......如果是重度计算,会如何运作?这个EA是否要搜索大量的订单?一般来说,你不能没有搜索,但如果能尽量减少这一程序就好了。

如何检查订单是否被关闭?翻阅整个历史?这不是太贵了吗?

一切都可以解决。

例如,我早就创建了一个监控所有这些的类。你可以为每个符号、魔法、时间框架动态地创建/删除类对象,或为一个账户或它们的组合动态地创建/删除类对象--你可以选择。任何必要的搜索周期都已经在新的蜱虫上执行了一次,而且有所有必要的数据。当然,在有些情况下,不多一个周期是不可能的,但这是每个刻度的第二个额外周期。而不在每个函数中设置单独的循环是对资源的严重浪费。

 
Artyom Trishkin:

一切都是可以解决的。

例如,我早就做了一个类来处理这一切。你可以为每个符号、魔法、时间框架动态地创建/删除类对象,或为一个账户的所有对象,或它们的组合 - 你可以选择。任何必要的搜索周期都已经在新的蜱虫上执行过一次,而且有所有必要的数据。当然,在有些情况下,不多一个周期是不可能的,但这是每个刻度的第二个额外周期。而不在每个函数中设置单独的循环 是对资源的严重浪费。

好吧,没有人反驳这一点。随着结构的出现,它变得更加方便。
 
Artyom Trishkin:
你不需要一直把它放在记忆中。当你需要找到它时,你应该用一个本地数组来调用该函数,在那里你将把所有的订单/位置放在循环中,根据你的需要对数组进行排序,从中选择必要的订单,对它们进行任何你需要的处理,当你退出该函数时,你将忘记那个本地数组。下次你再调用该函数时,它将整理出在调用时将存在的顺序/位置,并再次对它们做同样的事情。而且你不需要一个你必须不断监测和控制的全局阵列。

好吧,这里有一个简化的观点。

如果阵列是本地的,你想把它放在哪里? 显然不是在ontik中。

void OnTick()
{  

       if(FindLastOType()==OP_BUY)  //+------ если последний покупка
           {
            if(Ask<=FindLastOrderOpenPrice()-Step*Point())//+------------если ордер в минус
              {
               TotalClose();
              }
            else
            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
              }        
           }  
}

 
trader781:

好吧,这里有一个简化的观点。

如果阵列是本地的,你想把它放在哪里? 显然不在ontik里。

void OnTick()
{  

       if(FindLastOType()==OP_BUY)  //+------ если последний покупка
           {
            if(Ask<=FindLastOrderOpenPrice()-Step*Point())//+------------если ордер в минус
              {
               TotalClose();
              }
            else
            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
              }        
           }  
}

请阅读什么是函数。然后你就会明白,在函数主体 中声明的数组将是局部的--在程序的其他部分看不到。
 
bool WriteToFile(int FileHandle,string DataToWrite)
  {
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
   int BytesWritten[1]={0};

// Get the length of the string
   int szData=StringLen(DataToWrite);

// Do the write
   WriteFile(FileHandle,DataToWrite,szData,BytesWritten,0);

// Return true if the number of bytes written matches the expected number
   return (BytesWritten[0] == szData);
  }

我想把翻译的一行写到一个文件中,但它不工作,这段代码来自这里https://www.mql5.com/en/forum/118999

这段代码写了一行,每个字母后面都有空格,我需要一个替代 FileWrite() 的代码,但它可以工作。

Reading and writing files anywhere on disk using CreateFileA() etc.
Reading and writing files anywhere on disk using CreateFileA() etc.
  • www.mql5.com
There are frequent questions in this forum (e.g...
原因: