Торговля несколькими валютными парами

 
Вопрос. Мне нужно торговать в своём советнике несколькими активами (валютными парами). Как это сделать? То есть, я бы хотел добавлять в процессе торговли на свой счёт новые валютные пары вручную, а моя программа должна «видеть» добавленные валютные пары и знать их количество! Есть функция SymbolsTotal(), но она находит число всех доступных символов (активов) в окне
MarketWatc и число получается больше 400(?). Но мне нужно знать количество активов (символов), которые я добавил для торговли на своём счету! Например, добавил 5 символов — значит 5 символов программа и должна «видеть». Пока у меня так не получается! В общем, как написать грамотно советник, работающий с несколькими валютными парами (символами)?
 

Вот функция, считающая количество пар с открытыми ордерами:


int CountTradesSymbol() //Считаем количество пар с открытыми ордерами 
{
  if (OrdersTotal() == 0)
      return(0);      
   int count = 0;
   string sym = "";
   for (int i = OrdersTotal() - 1; i >= 0; i--)  {
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)  {
                  if (StringFind(sym, OrderSymbol(), 0) < 0)  {
                        sym += OrderSymbol() + ",";
                        count++;
                     }
                  }
            }  
      }  
return(count); 
}

 Возможно пригодится в вашем случае.

В  if (OrderType() == подставьте нужные вам типы ордеров.


 

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

 

Ну, можешь ещё глянуть этот пример если надо по другому. Но разработчики ещё не сремонтировали поломку, так что криво будет работать.

 https://forum.mql4.com/ru/11241/page4#1020082

 
gok_:
Вопрос. Мне нужно торговать в своём советнике несколькими активами (валютными парами). Как это сделать? То есть, я бы хотел добавлять в процессе торговли на свой счёт новые валютные пары вручную, а моя программа должна «видеть» добавленные валютные пары и знать их количество! Есть функция SymbolsTotal(), но она находит число всех доступных символов (активов) в окне
MarketWatc и число получается больше 400(?). Но мне нужно знать количество активов (символов), которые я добавил для торговли на своём счету! Например, добавил 5 символов — значит 5 символов программа и должна «видеть». Пока у меня так не получается! В общем, как написать грамотно советник, работающий с несколькими валютными парами (символами)?

1. Если нужно работать только с окном обзора рынка (ООР). Удалить все символы из ООР (или не все, но оставшиеся запомнить). Затем добавлять в ООР, а советник каждые 5 секунд пусть сверяет состав символов в ООР с тем, что он уже знает.

2. На диске вручную вести список символов. Добавлять не в ООР, а в него. Советник каждые 5 секунд сличает составы в файле со своими, если на диске появился новый, добавляет его в ООР (SymbolSelect) и в свой список. Имейте в виду, что программное добавление в ООР занимает сравнительно много времени, секунды.

 
Vlad143:

1. Если нужно работать только с окном обзора рынка (ООР). Удалить все символы из ООР (или не все, но оставшиеся запомнить). Затем добавлять в ООР, а советник каждые 5 секунд пусть сверяет состав символов в ООР с тем, что он уже знает.

2. На диске вручную вести список символов. Добавлять не в ООР, а в него. Советник каждые 5 секунд сличает составы в файле со своими, если на диске появился новый, добавляет его в ООР (SymbolSelect) и в свой список. Имейте в виду, что программное добавление в ООР занимает сравнительно много времени, секунды.

1) Дада. Тему мою читал?
 
eevviill:
1) Дада. Тему мою читал?

Прочел. https://www.mql5.com/ru/forum/107435, да? По-моему, разработчики ведут себя правильно. Список инструментов, видимо или невидимо находящихся в окне обзора рынка (точнее, среди тех, по которым поставляются котировки), это их элемент пользовательского (и не только пользовательского, еще и межпрограммного) интерфейса. Для меня он означает лишь возможность прояснить, идут ли котировки по инструменту. Мне непонятно Ваше "Дада". Эксплуатировать чужой список как свой - очень опасно, все права его изменения остаются не у Вас. Интерфейсный элемент терминала совсем не то, что свой список на диске с абсолютными Вашими правами. Проверять наличие нужных инструментов в окне обзора рынка и добавлять туда при необходимости недостающие - это, на мой взгляд, нормально. Но требовать от этого списка еще чего-либо нет оснований. Файл на диске, в частности, выполняет дополнительную роль протокола: при выключении терминала окно обзора рынка исчезает, а файл нет.

 
Vlad143:

Прочел. https://www.mql5.com/ru/forum/107435, да? По-моему, разработчики ведут себя правильно. Список инструментов, видимо или невидимо находящихся в окне обзора рынка (точнее, среди тех, по которым поставляются котировки), это их элемент пользовательского (и не только пользовательского, еще и межпрограммного) интерфейса. Для меня он означает лишь возможность прояснить, идут ли котировки по инструменту. Мне непонятно Ваше "Дада". Эксплуатировать чужой список как свой - очень опасно, все права его изменения остаются не у Вас. Интерфейсный элемент терминала совсем не то, что свой список на диске с абсолютными Вашими правами. Проверять наличие нужных инструментов в окне обзора рынка и добавлять туда при необходимости недостающие - это, на мой взгляд, нормально. Но требовать от этого списка еще чего-либо нет оснований. Файл на диске, в частности, выполняет дополнительную роль протокола: при выключении терминала окно обзора рынка исчезает, а файл нет.

Да да.

 В перечисление ENUM_SYMBOL_INFO_INTEGER добавлен член SYMBOL_VISIBLE

 

P.S. Так бесит когда вместо улучшений правил игры, все начинают подстраиватся. 

 
eevviill:

Да да.

 В перечисление ENUM_SYMBOL_INFO_INTEGER добавлен член SYMBOL_VISIBLE

 

P.S. Так бесит когда вместо улучшений правил игры, все начинают подстраиватся. 

Не зарывайтесь.

Вы тут не один. Кода за 10 лет написано очень много и невозможно точно оценить, как скажутся изменения в правилах игры на ходу.

Но можно точно сказать - написано много кода, который перестанет работать, если внести желаемые только Вами изменения.

Вы согласились с предложенным нами изменением. Это изменение не ломает ничью логику. Зачем опять там чешете?

 
stringo:

Не зарывайтесь.

Вы тут не один. Кода за 10 лет написано очень много и невозможно точно оценить, как скажутся изменения в правилах игры на ходу.

Но можно точно сказать - написано много кода, который перестанет работать, если внести желаемые только Вами изменения.

Вы согласились с предложенным нами изменением. Это изменение не ломает ничью логику. Зачем опять там чешете?

Где чешу?

 

Всё что я предлагаю не ломает логики предыдущих наработок

например

OrdersTotal(int magics=all,int types=all) 

Причина обращения: