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); } } }
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); }
我在理论上知道为什么会这样,所以我的问题是,我们能不能简单谈谈数组的使用问题?
你需要在哪里初始化、删除和处理它们,使其发挥作用?
P.S
当谷歌禁止它看起来像这样。
为什么你认为这是因为阵列的原因?
需要
1) 在某个地方创建它(在全局区域,作为一个函数,在onit或ontic?)
2)发送订单时,将每张票据 写在里面,按顺序给它一个编号
3)根据需要通过数字将它们从那里拉出来
4)关闭整个网格时,将参数重置为零
你不需要一直把它放在记忆中。当你需要找到它时,你用一个本地数组调用该函数,你将把所有的订单/位置放在循环中,根据你的需要对数组进行排序,从中选择必要的订单,对它们进行任何你需要的处理,当你退出该函数时,你将忘记那个本地数组。下次你再调用该函数时,它将整理出这种调用时的订单/位置,并对它们做同样的处理。而且你不需要一个你必须不断观察和控制的全局阵列。
我不知道便宜了多少。每种情况都有自己的解决方案。在 MQL4中没有 OnTradeTransaction()事件,但我们必须以某种方式跟踪 "我们的 "订单。这就是全局变量阵列派上用场的地方。
试想一下,一个账户上运行着几个专家顾问,其中一个计算量很大,另一个有大量的订单......如果是重度计算,会如何运作?这个EA是否要搜索大量的订单?一般来说,你不能没有搜索,但你应该尽量减少这一程序。
并确定该订单是否已经结束?翻阅整个历史?这不是太贵了吗?
我以前从未犯过这种错误,但如果我犯过,我就犯了一个错误,这就是为什么我在这里问。我可以自己做,但需要更多的时间。
正如你从我之前的帖子中了解到的那样,我经常使用数组,而且从来没有遇到过任何问题。有一次,我写了一个EA,打开了2000多个订单,其票据被存储在一个数组中,完全没有问题。我不相信问题的出现是因为阵列的原因。我也无法相信可能是什么错误导致了这样的问题。
我想起了电影《不可能》......"不是啤酒害死人,是水害死人"...。
我不知道便宜了多少。每种情况都有自己的解决方案。在 MQL4中没有 OnTradeTransaction()事件,但我们必须以某种方式跟踪 "我们的 "订单。这就是全局变量阵列派上用场的地方。
试想一下,一个账户上运行着几个专家顾问,其中一个计算量很大,另一个有大量的订单......如果是重度计算,会如何运作?这个EA是否要搜索大量的订单?一般来说,你不能没有搜索,但如果能尽量减少这一程序就好了。
如何检查订单是否被关闭?翻阅整个历史?这不是太贵了吗?
一切都可以解决。
例如,我早就创建了一个监控所有这些的类。你可以为每个符号、魔法、时间框架动态地创建/删除类对象,或为一个账户或它们的组合动态地创建/删除类对象--你可以选择。任何必要的搜索周期都已经在新的蜱虫上执行了一次,而且有所有必要的数据。当然,在有些情况下,不多一个周期是不可能的,但这是每个刻度的第二个额外周期。而不在每个函数中设置单独的循环是对资源的严重浪费。
一切都是可以解决的。
例如,我早就做了一个类来处理这一切。你可以为每个符号、魔法、时间框架动态地创建/删除类对象,或为一个账户的所有对象,或它们的组合 - 你可以选择。任何必要的搜索周期都已经在新的蜱虫上执行过一次,而且有所有必要的数据。当然,在有些情况下,不多一个周期是不可能的,但这是每个刻度的第二个额外周期。而不在每个函数中设置单独的循环 是对资源的严重浪费。
你不需要一直把它放在记忆中。当你需要找到它时,你应该用一个本地数组来调用该函数,在那里你将把所有的订单/位置放在循环中,根据你的需要对数组进行排序,从中选择必要的订单,对它们进行任何你需要的处理,当你退出该函数时,你将忘记那个本地数组。下次你再调用该函数时,它将整理出在调用时将存在的顺序/位置,并再次对它们做同样的事情。而且你不需要一个你必须不断监测和控制的全局阵列。
好吧,这里有一个简化的观点。
如果阵列是本地的,你想把它放在哪里? 显然不是在ontik中。
{
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);
}
}
}
好吧,这里有一个简化的观点。
如果阵列是本地的,你想把它放在哪里? 显然不在ontik里。
{
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);
}
}
}
{
// 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() 的代码,但它可以工作。