Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 900

 
Не хочу пока отдельную тему создавать, спрошу тут. В документации к функции OrderSelect указано, что все данные об ордере копируются в "программное окружение". Программное окружение относится только лишь к текущему графику или ко всему терминалу в целом? Спрашиваю, потому что возникла проблема при одновременной работе с несколькими ордерами с разных чартов, на которых установлен один и тот же советник.
 
.roman.:
Не хочу пока отдельную тему создавать, спрошу тут. В документации к функции OrderSelect указано, что все данные об ордере копируются в "программное окружение". Программное окружение относится только лишь к текущему графику или ко всему терминалу в целом? Спрашиваю, потому что возникла проблема при одновременной работе с несколькими ордерами с разных чартов, на которых установлен один и тот же советник.
Данные ордера доступны всем пользовательским программам, запущенным в терминале, где этот ордер открыт.
 
evillive:
Данные ордера доступны всем пользовательским программам, запущенным в терминале, где этот ордер открыт.
Как тогда оградиться от ложного копирования в программное окружение данных другого ордера, который был в то же время выбран с другого чарта?
 
.roman.:
Как тогда оградиться от ложного копирования в программное окружение данных другого ордера, который был в то же время выбран с другого чарта?
Данные разных ордеров не пересекаются никак, ограждаться не от чего.
 
evillive:
Данные разных ордеров не пересекаются никак, ограждаться не от чего.

Мы тогда о разных вещах говорим. Я изначально имел ввиду вопрос о том, что представляет собой "программное окружение", о котором написано в документации. Имеется ли под ним ввиду весь терминал целиком?

Конкретно моя проблема заключалась в том, что несмотря на исключительное сравнение OrderSymbol и Symbol в функции OrderSelect возникала проблема, когда с графика одной пары могли появиться данные(время открытия ордера, цена открытия и т.п.) совсем другой. То есть, меня интересует вопрос, возможна ли ситуация, когда во время работы функции OrderSelect советника на паре, допустим, EURUSD, на другой паре советник так же начнёт работать с функцией OrderSelect и в "программное окружение" загрузятся данные об ордере от последнего вызова данной функции?

 
.roman.:

Мы тогда о разных вещах говорим. Я изначально имел ввиду вопрос о том, что представляет собой "программное окружение", о котором написано в документации. Имеется ли под ним ввиду весь терминал целиком?

Конкретно моя проблема заключалась в том, что несмотря на исключительное сравнение OrderSymbol и Symbol в функции OrderSelect возникала проблема, когда с графика одной пары могли появиться данные(время открытия ордера, цена открытия и т.п.) совсем другой. То есть, меня интересует вопрос, возможна ли ситуация, когда во время работы функции OrderSelect советника на паре, допустим, EURUSD, на другой паре советник так же начнёт работать с функцией OrderSelect и в "программное окружение" загрузятся данные об ордере от последнего вызова данной функции?

Нужен код. Ошибка в нем
 
.roman.:

Мы тогда о разных вещах говорим. Я изначально имел ввиду вопрос о том, что представляет собой "программное окружение", о котором написано в документации. Имеется ли под ним ввиду весь терминал целиком?

Конкретно моя проблема заключалась в том, что несмотря на исключительное сравнение OrderSymbol и Symbol в функции OrderSelect возникала проблема, когда с графика одной пары могли появиться данные(время открытия ордера, цена открытия и т.п.) совсем другой. То есть, меня интересует вопрос, возможна ли ситуация, когда во время работы функции OrderSelect советника на паре, допустим, EURUSD, на другой паре советник так же начнёт работать с функцией OrderSelect и в "программное окружение" загрузятся данные об ордере от последнего вызова данной функции?

У каждого ордера есть уникальные параметры, которые поволяют однозначно отличить его от других. Это тикет и время открытия (закрытия, если ищем в истории). Они неповторимы в пределах одного  торгового счёта, как рисунок сетчатки глаза. 

Недостаточно выбрать ордер  функцией OrderSelect, нужно ещё проверить, тот ли это ордер мы выбрали, или надо выбрать следующий.

 
Vinin:
Нужен код. Ошибка в нем
for(int i=OrdersTotal()-1;i>=0;i--)
        {
            if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {
                  if(OrderType()==OP_BUY)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
                  if(OrderType()==OP_SELL)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Bid<openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
               }
        }

Ненужные расчёты (не относящиеся к проблеме) убрал. Специально для отображения косяка были дописаны в код принты. Несмотря на сравнение символа ордера с символом, на котором открыт советник, может выдать вот это (с ози чарта брать данные ордера по евро, например, как в данном случае):


 
.roman.:

Ненужные расчёты (не относящиеся к проблеме) убрал. Специально для отображения косяка были дописаны в код принты. Несмотря на сравнение символа ордера с символом, на котором открыт советник, может выдать вот это (с ози чарта брать данные ордера по евро, например, как в данном случае):

 

                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     

Такое не могло выдать, Аск на кенгуру никак не мог быть больше любой цены открытия на евродолларе в 2015...

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

 
evillive:

 

Такое не могло выдать, Аск на кенгуру никак не мог быть больше любой цены открытия на евродолларе в 2015...

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

Всё верно, не могло. Поэтому выдало по Bid<openPrice ордера по евре по 1.11262.

То есть, предлагаете сделать проверить на наличие ордера чере if(OrderSelect()), а потом во вложенном if уже сравнивать символ чарта с символом ордера, цену открытия и т.п.?