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

 
Alexey Viktorov #:

А в твоём случае проще написать без цикла

если тебе надо последнюю позицию…

Согласен, если бы не было открыто нескольких позиций по другому символу и в разных направлениях. В смысле бай и селл. Но за подсказку, всё равно, спасибо!

С уважением, Владимир.

 
MrBrooklin #:

Согласен, если бы не было открыто нескольких позиций по другому символу и в разных направлениях. В смысле бай и селл. Но за подсказку, всё равно, спасибо!

С уважением, Владимир.

Да никакой разницы сколько позиций открыто и хоть на север, хоть на йух или во все стороны сразу… Последним по любому будет  PositionsTotal()-1

 
Alexey Viktorov #:

Да никакой разницы сколько позиций открыто и хоть на север, хоть на йух или во все стороны сразу… Последним по любому будет  PositionsTotal()-1

Привет, Алексей! Чёт затупил. Ты, как всегда прав!!! )))

С уважением, Владимир.

 
Alexey Viktorov #:

Собственно я вчера экспериментировал с выборкой позиций и пришёл к выводу, что  PositionsTotal() нужна исключительно для определения количества позиций. А это количество нужно только для ограничения цикла.

Вот такой цикл


работает даже если перед ним получить список ордеров или сделок из истории. На днях проверю будет-ли мешать выборка отложенных ордеров.

Тут тоже есть одна тонкость.

Если список реально большой и упорядоченный по какому-либо критерию, может оказаться выгоднее искать нужный элемент не перебором всех элементов в цикле, а половинным делением, и вот тут знание общего к-ва элементов в списке очень может пригодиться.

 
JRandomTrader #:

Тут тоже есть одна тонкость.

Если список реально большой и упорядоченный по какому-либо критерию, может оказаться выгоднее искать нужный элемент не перебором всех элементов в цикле, а половинным делением, и вот тут знание общего к-ва элементов в списке очень может пригодиться.

Я-же не сказал, что функция совсем бесполезна. Но в некоторых случаях без неё можно и нужно обходиться. Ведь каждая функция это время. Так по чуток набрать можно до тормозов…

 
MrBrooklin #:

Привет, Алексей! Чёт затупил. Ты, как всегда прав!!! )))

С уважением, Владимир.

Прав, только не уточнил, что функция в том виде как написана у вас, не будет работать правильно, если открыто несколько сделок на разных символах.

Так как проверяете вы только последнюю, а она (последняя) может оказаться открыта на другом символе.

 
Aleksandr Slavskii #:

Прав, только не уточнил, что функция в том виде как написана у вас, не будет работать правильно, если открыто несколько сделок на разных символах.

Так как проверяете вы только последнюю, а она (последняя) может оказаться открыта на другом символе.

Здравствуйте, Александр! Уже думал на эту тему, но пока ещё не стал здесь задавать вопрос, т.к. в коде не дошёл до того места, где будут разно символьные позиции. За подсказку спасибо! )) Сейчас упёрся в один момент, но не хочу выносить сюда на всеобщее обозрение, т.к. есть неутомимое желание "добить" его собственными силами.

Кстати, обратил внимание на то, что все мои так называемые "затыки" кроются в таких мелочах, блин, которые вот в упор не вижу. Взять тот же спецификатор, про который мне подсказал Артём Тришкин. Маленькая такая зараза, а тут всю голову сломал от того, почему скрипт не работает. Или таже самая ссылка &. Столько времени потерял на ней. В общем ещё учиться, учиться и учиться, а в переводе на русский - читать, читать и читать Документацию.

С уважением, Владимир.

 
Добрый день! 


У меня неттинговый счет.

В своем советнике я использую код для контроля совершенных сделок:

   HistorySelect(0,TimeCurrent());
   ulong ticket = OrderGetTicket(0);
   N_сделок = HistoryDealsTotal();

Но мне также требуется оценить количество закрытых трейдов.
Мне кажется, нужно использовать модификатор DEAL_ENTRY_OUT.
Но, как его использовать, я не могу понять.

Помогите, пожалуйста.

С уважением, Александр


 
klycko #:
Добрый день! 


У меня неттинговый счет.

В своем советнике я использую код для контроля совершенных сделок:

   HistorySelect(0,TimeCurrent());
   ulong ticket = OrderGetTicket(0);
   N_сделок = HistoryDealsTotal();

Но мне также требуется оценить количество закрытых трейдов.
Мне кажется, нужно использовать модификатор DEAL_ENTRY_OUT.
Но, как его использовать, я не могу понять.

Помогите, пожалуйста.

С уважением, Александр


Вы в правильном направлении. Но не достаточно внимательны


 
klycko #:
Но мне также требуется оценить количество закрытых трейдов.
Мне кажется, нужно использовать модификатор DEAL_ENTRY_OUT.
Но, как его использовать, я не могу понять.
void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // структура торговой транзакции
   const MqlTradeRequest&        request, // структура запроса
   const MqlTradeResult&         result   // структура ответа
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_OUT)
        {

           //---

        }

С уважением, Владимир.