//---Поиск последнего отработавшего ордера для открытия очередной позиции ---for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
continue;
}
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
{
continue;
}
//-------------------------Принимаем в расчет только ордер, закрытый недавно-----------------------if(time<OrderCloseTime()) //(сравниваем его с хранящимся в пероеменной time)
{
time=OrderCloseTime(); //если время закрытия ордера больше - ложим его в переменнуюint lastType = OrderType();
double lastLots = OrderLots();
double lastProfit = OrderProfit() + OrderSwap();
.....
.....
.....
艾迪说他无意冒犯任何人
在一个文件中做所有事情的一个原因 -- --https://docs.mql4.com/ru/basis/variables/formal。
"可以通过引用来传递参数。在这种情况下,对这些参数的修改将影响到以引用方式传递的被调用函数中的相应变量。你不能通过引用传递数组的元素。通过引用的参数只能在单个模块内传递,这对库函数来说是不可能的。"
是的,也许这就是问题所在...
我有很多函数,其中一个参数是通过引用传递的数组。
也就是说,你必须放弃多文件的程序结构来避免问题,难道不能用不同的方法解决吗?
先生们,这里有一个问题。
我正在测试器中运行该EA。EA可以访问历史记录,也就是说,它正在寻找最后的一个,比方说,20个关闭的订单。
这在真正的EA中是非常容易的:我们可以指定历史时期,在这期间应该显示订单。因此,最后的命令总是 "高于"。但是,我们在测试器中的交易越多,关闭的订单就越多,需要查看的清单就越大,专家顾问开始工作的速度就越慢。
无论如何,你是如何解决这个问题的?
现代计算机每秒钟执行数亿次操作。
必须要有多少次交易,电脑才会开始变慢?
在你的 "困难 "情况下,你可以指定条件,根据这个条件,订单搜索将只对最后一个月/半月进行。
我其实说过,我不在乎 :D 即使冒犯了别人,我也会好好表现,因为这是他们的问题。但这是为了他们的利益,所以他们想解决问题,并开始寻找原因,最终根除它们,否则永远会有问题。
eddy,权利的概念是非常主观的))。
如果一群人认为某件事情是普遍接受的、正确的,那么这就是这群人的规则。在这个论坛上有这样一个团体。
你 对世界有自己的看法,这很好,但花时间讨论它,更要改变或再教育人们,这是非常大的奢侈))。
争论观点的正确性是一种资源的浪费,我们的问题并没有得到解决。
我建议,在尊重你 和理解你的 想法的前提下,回到编程上来))
嗨 =) 我刚刚写了一个EA......没有条件,只是在GBPUSD和EURUSD上打开。因此,在测试时,当站在EURUSD上时,它不会关闭GBPUSD订单。反之亦然。你能设置它吗? 那么,它将打开订单...我在演示中做不到,但我无法测试。
谁来告诉我...
在你的 "困难 "情况下,你可以引入一个条件,即订单只在最后一个月/学期重放。
什么条件?
在测试器中不可能对历史进行分类。最后一个订单到达最底部。你必须滚动浏览整个历史,才能找到它。
我错了吗?
谁来告诉我...
MT4中没有多币种策略测试器。
Eddy,权利的概念是非常主观的))。
MT4中没有多币种策略测试器。
你能告诉我在哪里可以测试它吗? 它能在MT5上工作吗?
条件是什么?
在测试器中不可能对历史进行分类。最后一个订单落在最底部。你必须滚动浏览所有的历史才能找到它。
我错了吗?
没有。下面是一个从订单历史 中选择最新鲜的已关闭订单 的例子,以便进一步处理它。