初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1482

 
MrBrooklin #:

嗨,阿列克谢,变量 pos_total=PositionsTotal() 只是在全局级别设置的。现在我把它移到了函数内部,结果发现问题就出在这里。一切正常。问题出在哪里?我完全不明白这个笑话的意思!!!

现在,为了做实验,我又把 pos_total 移到了全局层,结果它又不工作了,但当我把它放到函数内部时,它又正常工作了!这就是奇迹,至少对我来说是这样!!!!)))

原来全局变量不能被函数初始化?是这样吗?

敬上,弗拉基米尔

有时可以,但不是每个变量都可以。在这种情况下,当您运行 EA 时,它还没有看到未结头寸,变量等于零....。

实际上,昨天我试验了仓位采样,得出的结论是PositionsTotal() 仅用于确定仓位数量而这个数字只是为了限制循环。

下面是这样一个循环

  int i = 0;
  while(bool(posTicket = PositionGetTicket(i)) && !IsStopped())
   {
    string posSymbol = PositionGetString(POSITION_SYMBOL);
    double posPrice = PositionGetDouble(POSITION_PRICE_OPEN),
           pos_tp = PositionGetDouble(POSITION_TP),
           pos_sl = PositionGetDouble(POSITION_SL);
    printf("%s Ticket %d цена = %g тейк-профит = %g стоп-лосс = %g", posSymbol, posTicket, posPrice, pos_tp, pos_sl);
    i++;
   }


即使在循环之前从历史记录中获取订单或交易列表,也能正常工作。这几天我会检查一下挂单的选择是否会干扰它。


在您的情况下,不使用循环更容易编写

      PositionGetTicket(PositionsTotal()-1); // получим тикет позиции

如果您需要最后一个位置...

 
Alexey Viktorov #:
在这种情况下,当您启动 EA 时,它还看不到未结头寸,变量等于零 ...

我同意您的观点,但问题是 - 当我把 pos_total 变量放在全局级别时,EA 在整个测试期间都没有看到未结头寸,尽管在此期间有超过 50 个头寸被打开。我不明白!难道这个选项不起作用?

弗拉基米尔

 
Alexey Viktorov #:

在您的情况下,不使用循环更容易编写

如果您需要最后一个位置...

我同意,如果我没有在不同的符号和方向上打开多个仓位的话。我是说买入和卖出。不过还是谢谢你的提示!

弗拉基米尔

 
MrBrooklin #:

我同意,如果没有在不同符号和不同方向上开立多个仓位的话。我是说买入和卖出。不过还是谢谢你的提示!

弗拉基米尔

有多少头寸未平仓,是向北还是向北,是向他妈的还是同时向所有方向,这些都没有区别......最后一个将是PositionsTotal()-1

 
Alexey Viktorov #:

有多少个仓位未平仓,是向北、向北还是同时向所有方向平仓,都没有区别......最后一个将是PositionsTotal()-1

嗨,阿列克谢,我有点糊涂了。你总是对的)))

再见,弗拉基米尔。

 
Alexey Viktorov #:

实际上,昨天我对位置采样进行了实验,得出的结论是PositionsTotal() 只需要用来确定位置数而这个数字只是为了限制循环。

下面是这样一个循环


即使在循环之前从历史记录中获取订单或交易列表,也能正常工作。改天我会检查一下选择挂单是否会造成干扰。

这里还有一个微妙之处。

如果列表确实很大,并且是按照某种标准排序的,那么搜索所需元素时,可能更有利的做法不是搜索循环中的所有元素,而是进行半除法,在这里,了解列表中元素的总数会非常有用。

 
JRandomTrader #:

这里还有一个微妙之处。

如果列表真的很大,并且是按照某种标准排序的,那么搜索所需元素时,可能不是循环通过所有元素,而是通过半除法,这样做可能更有利,而在这里,知道列表中元素的总数可能非常有用。

我并没有说该函数完全无用。但在某些情况下,你可以而且必须不用它。毕竟,每个函数都需要时间。您可以每次键入一点点,直到得到刹车....

 
MrBrooklin #:

嗨,阿列克谢!我真笨。你总是对的)))

问候你,弗拉基米尔。

我是对的,但我没有说明,如果在不同的符号上进行了多次交易,您所写的函数将无法正常工作。

因为您 检查了最后 一个,而它(最后一个)可以在另一个符号上开立。

 
Aleksandr Slavskii #:

没错,但我没有说明,如果在不同的符号上开立了几笔交易,你所写的函数就无法正常工作。

因为你 检查了最后 一个,而它(最后一个)可以在另一个符号上打开。

你好,亚历山大,我已经考虑过这个问题,但我还没有开始在这里提问,因为我还没有写到代码中会有不同符号位置的地方。感谢您的提示!))现在我在某一点上遇到了难题,但我不想把它拿到这里来让大家评议,因为我有一个不懈的愿望,那就是通过自己的努力 "完成 "它。

顺便说一句,我注意到我所谓的 "磕磕绊绊 "都是在我看不到的小地方。就拿 Artem Trishkin 告诉我的那个规格器来说吧。就是这么一件小事,我却为脚本无法运行而伤透了脑筋。或者是同一个链接&。为此耽误了不少时间。总的来说,还是要学习、学习、再学习,俄语方面--要阅读、阅读、再阅读《文档》。

弗拉基米尔

 
下午好!


我有一个净额结算账户。

在我的智能交易系统中,我使用以下代码来控制交易:

HistorySelect(0,TimeCurrent());
ulong ticket = OrderGetTicket(0);
N_deals = HistoryDealsTotal();

但我还需要估算平仓交易的数量。
我想我需要使用DEAL_ENTRY_OUT 修改器。
但我不知道如何使用。

请帮助我。

亚历山大