Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 100

 
ulong  HistoryDealGetTicket(
   int  index      // номер сделки
   );
 

Что такое номер сделки?

Как выбрать последнюю сделку? Индекс 0?

Есть счет с открытой позицией и с историей сделок. Хочу выбрать последнюю сделку:

#include <Trade\DealInfo.mqh>  

CDealInfo deal;  

   for(int n=20;n>=0;n--)
     {
      deal.SelectByIndex(n);
      Print("Тикет сделки=",deal.Ticket()," n=",n);
     }


Все тикеты 0...
 
tor4en:
ulong  HistoryDealGetTicket(
   int  index      // номер сделки
   );
 

Что такое номер сделки?    

 См. описание функции HistoryDealGetTicket(). Там же - пример работы со списком сделок.
 
Yedelkin:
 См. описание функции HistoryDealGetTicket(). Там же пример работы со списком сделок.
Непонятно, как работать с функцией SelectByIndex() из стандартной библиотеки.
 
tor4en Непонятно, как работать с функцией SelectByIndex() из стандартной библиотеки.
 Я попробовал подсказать ответ на Ваш вопрос "Что такое номер сделки?". Можно ли считать, что с этим вопросом Вы разобрались?
 
Yedelkin:
 Я попробовал подсказать ответ на Ваш вопрос "Что такое номер сделки?". Можно ли считать, что с этим вопросом Вы разобрались?
Можно, спасибо. Не подскажете, есть ли возможность выбрать последнюю сделку по позиции, не занимаясь перебором сделок и сравнивая время или их тикеты?
 
tor4en: Не подскажете, есть ли возможность выбрать последнюю сделку по позиции, не занимаясь перебором сделок и сравнивая время или их тикеты?

1. К сожалению, я стараюсь не пользоваться Стандартной библиотекой, поэтому не смогу правильно подсказать, как работать с методом SelectByIndex(). Можно только отметить, что сам класс CDealInfo позиционируется как класс работы со свойствами сделки, т.е. вопросы получения списка сделок вроде бы остаются за бортом.

2. Как Вы сами знаете, метод SelectByIndex() просто использует функцию HistoryDealGetTicket(). Из описания этой  функции следует, что перед обращением к сделке необходимо получить список всех сделок.  В частности,

//--- запросим историрю сделок в указанном интервале
   HistorySelect(from_date,to_date);
//--- общее количество в списке сделок
   int deals=HistoryDealsTotal();
//--- теперь обработаем каждую сделку
   for(int i=0;i<deals;i++)
     {
      deal_ticket=HistoryDealGetTicket(i);
      ...
     }

С год назад я задавал на форуме вопрос, можно ли считать, что последняя сделка в списке всегда имеет индекс HistoryDealsTotal()-1, но ответа не получил (или не заметил, что вряд ли). Методом научного тыка опровержение данному тезису не нашёл. Так что по логике, каждая новая сделка, сведения о которой поступают в базу терминала, должна просто увеличивать список сделок на единицу и, соответственно, индексы в списке сделок могли бы присваиваться каждой новой сделке по возрастанию. Как оно обстоит на самом деле - не знаю.

3. Советую также ознакомиться со статьёй Ордерa, позиции и сделки в MetaTrader 5 и (сам не читал) - Как использовать торговые классы Стандартной библиотеки при написании советника.

Фсё :)

 
HistoryDealsTotal()-1
Кажется, это самое то. Если сделки ищем по конкретной позиции, то лучше использовать HistorySelectByPosition(position_ID). Спасибо.
Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Торговые функции / HistorySelectByPosition - Документация по MQL5
 
tor4en: Если сделки ищем по конкретной позиции, то лучше использовать HistorySelectByPosition(). 
 Совершенно верно :)
 
Здравствуйте!!!

Знатоки, помогите, пожалуйста. Соединял два  советника для, так сказать, синергического эффекта, одни, которые по проще вроде соединяются, ну а вот этот что-то не компилируется, хотя все сделал правильно как с предыдущим. Вот что выдает

'Supervisor' - function can be declared only in the global scope            20_200_pips_MQL5_v1.mq5 360      18

'Perceptron' - function can be declared only in the global scope           20_200_pips_MQL5_v1.mq5 418      8

'basicTradingSystem' - function can be declared only in the global scope         20_200_pips_MQL5_v1.mq5 434      6

функция может быть объявлена только в глобальной области видимости

Я в полном ступоре где эта глобальна область

 
chipo: Соединял два  советника для, так сказать, синергического эффекта, одни, которые по проще вроде соединяются, ну а вот этот что-то не компилируется, хотя все сделал правильно как с предыдущим. Вот что выдает

'Supervisor' - function can be declared only in the global scope            20_200_pips_MQL5_v1.mq5 360      18

'Perceptron' - function can be declared only in the global scope           20_200_pips_MQL5_v1.mq5 418      8

'basicTradingSystem' - function can be declared only in the global scope         20_200_pips_MQL5_v1.mq5 434      6

функция может быть объявлена только в глобальной области видимости

Я в полном ступоре где эта глобальна область 

 Такие сообщения появляются, например, когда одна функция объявляется внутри другой. Посмотрите, нет ли в коде чего-нибудь подобного:

func_1()
   {
    void func_2()...
   }