количество валютных пар по которым открыты позиции - страница 2

 
Andrey Kisselyov:
вынужден адресовать вас к справке, дабы вы не учудили такое у себя в советнике.

как видно возвращаемое значение в 5ке будет зависеть от типа счета и учета позиций в нем, и при

вернет количество ордеров (независимых позиций), а не количество позиций по символам.
что не приемлемо при поставленной задаче.в моем варианте вы получите реальное количество загруженных символов не зависимо от того какой учет позиций будет в вашем терминале, неттинг или хедж.

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

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

 
Stanislav Korotky:

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

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

пример в коде пожалуйста.

с уважением.

 
Andrey Kisselyov:

пример в коде пожалуйста.

Пример цикла по позициям с сохранением их символов в хешсете? Думаю, это тривиально. И вообще я не собирался эту тему в направлении МТ5 раздувать, т.к. вопрос был про МТ4. Я просто отметил, что упомянутый до меня способ для МТ5 - неоптимальный.

 
Stanislav Korotky:

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

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

Stanislav Korotky:

Пример цикла по позициям с сохранением их символов в хешсете? Думаю, это тривиально. И вообще я не собирался эту тему в направлении МТ5 раздувать, т.к. вопрос был про МТ4. Я просто отметил, что упомянутый до меня способ для МТ5 - неоптимальный.

это вот этот код для мт5 "тупой и не оптимальный" по вашему ?

   CurrencyPairs=0;
   for(int q=0;q<SymbolsTotal(true);q++)
     {
      string symbol=SymbolName(q,true);
      if(PositionSelect(symbol))CurrencyPairs++;
     }

приведите продвинутый и оптимальный код, иначе ваши слова сплошное надувание щек перед девушкой, которой нужна была помощь.

с уважением.

 
Andrey Kisselyov:

это вот этот код для мт5 "тупой и не оптимальный" по вашему ?

Представьте ТС, которая должна сделать ExpertRemove сразу, как CurrencyPairs достигнет 100 (много, чтобы не достигалось, но честно считалось) - проверка на каждом OnTick в тестере без использования OnTrade*.

 

я бы сделал так:

   string symb="";
   string result[];
   
   for(int i=OrdersTotal()-1;i>=0;i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType()<2 && StringFind(symb,OrderSymbol(),0)<0)
         symb+=OrderSymbol()+" ";

   symb=StringTrimRight(symb); 			
   int cnt=StringSplit(symb,' ',result);	//количество символов + массив символов
 
Andrey Kisselyov:

это вот этот код для мт5 "тупой и не оптимальный" по вашему ?

приведите продвинутый и оптимальный код, иначе ваши слова сплошное надувание щек перед девушкой, которой нужна была помощь.

с уважением.

При чем тут девушка? Она спрашивала про четверку. Некто предложил для пятерки "левый" способ. Поскольку ветку другие люди читают, в том числе которые пятерочный код могут взять на вооружение, я высказал свое мнение.

Ну, если так сложно понять как две штатные функции использовать... Для тех, кто в танке:

HashSet h;
for(int i = 0; i < PositionsTotal(); ++i)
{
  h.put(PositionGetSymbol(i));
}
Print(h.getCount());

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

 
fxsaber:

Представьте ТС, которая должна сделать ExpertRemove сразу, как CurrencyPairs достигнет 100 (много, чтобы не достигалось, но честно считалось) - проверка на каждом OnTick в тестере без использования OnTrade*.

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

у вашей @fxsaber задачи другое решение.
Taras Slobodyanik:

я бы сделал так:

занимает больше строк кода и команд чем у меня, будет работать медленнее чем представленный мной код. кроме того, с увеличением количества ордеров время работы цикла будет увеличиваться, что не очень приятно.
Stanislav Korotky:

При чем тут девушка? Она спрашивала про четверку. Некто предложил для пятерки "левый" способ. Поскольку ветку другие люди читают, в том числе которые пятерочный код могут взять на вооружение, я высказал свое мнение.

Ну, если так сложно понять как две штатные функции использовать... Для тех, кто в танке: ЧТО ЗА МАНЕРА ОСКОРБЛЯТЬ ЛЮДЕЙ, ЕСТЬ ЧТО СКАЗАТЬ ГОВОРИТЕ, НЕЧЕГО СКАЗАТЬ ИДИТЕ МИМО.УВАЖАЙТЕ СЕБЯ И ОКРУЖАЮЩИХ !!!

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

приведите полный код. во включаемый файл я могу написать сколько угодно кода, а вам кинуть одну строку по его включению и по вашему такой код будет оптимальный? жду полный код со всеми функциями работы на чистом MQL5.

с уважением.

P.S.
сейчас посмотрел, можно еще короче написать.
   CurrencyPairs=0;
   for(int q=0;q<SymbolsTotal(true);q++)  if(PositionSelect(SymbolName(q,true)))  CurrencyPairs++;
кто сможет написать еще короче, чтоб выполнялось еще быстрее?
 
Andrey Kisselyov:
занимает больше строк кода и команд чем у меня, будет работать медленнее чем представленный мной код. кроме того, с увеличением количества ордеров время работы цикла будет увеличиваться, что не очень приятно.

то есть перебор всех символов 50-200 штук - это быстрее чем двух позиций?
а с увеличением числа позиций до 5-10, будет еще неприятней, чем 50-200 символов?

:)

 
Taras Slobodyanik:

то есть перебор всех символов 50-200 штук - это быстрее чем двух позиций?
а с увеличением числа позиций до 5-10, будет еще неприятней, чем 50-200 символов?

:)

согласен, что при сравнении скорости исполнения вашего и моего кода зависит от того сколько символов и сколько ордеров в рынке, но у меня в обзоре только те символы по которым я торгую. зачем загружать поток котировками которые не нужны в работе? ордеров в рынке может быть намного больше, чем символов в окне "обзор рынка", а вот символов всегда определенное количество.

с уважением.

P.S.  да кстати по условиям топик стартера, будет не больше двух позиций при неттинг подсчете позиций(и тут вы правы, ваш алгоритм будет работать быстрее при условии что символов куда больше в обзоре рынка), но если у вас хедж подсчет позиций, то тут позиций может быть больше чем символов в обзоре рынка, например при работе сеточника.
 
вот только ваш код под мт4, а мы обсуждаем разные варианты мт5 кода.

P.S.P.S.  у топик стартера сеточник, так что ордеров будет больше чем символов в обзоре рынка.