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

 
pivomoe:
Я правильно понимаю, что метод Volume из класса CPositionInfo возвращает объем соответствующий моменту времени, в который последний раз вызывался метод Select() ? Т.е можно узнать, объем который был месяц назад по данному символу ?
Абсолютно неправильно понимаете. Метод Volume класса CPositionInfo возвращает объём позиции. Позиции, которая перед этим была выбрана через PositionSelect.
 

Вы объяснили, как готовить CPositionInfo. Хотя, я так и не понял, двух вещей:

1) Как этот рецепт следует из справки по классу CPositionInfo ?

2) Нафига нужен сам класс если больше одного объекта нормально использовать нельзя, ведь перед каждым доступом к свойству позиции нужно настраивать на позицию с помощью метода Select, а то вдруг мы в каком нибудь другом месте когда, использовали  метод Select для другого объекта CPositionInfo.

 
pivomoe:

Вы объяснили, как готовить CPositionInfo. Хотя, я так и не понял, двух вещей:

1) Как этот рецепт следует из справки по классу CPositionInfo ?

2) Нафига нужен сам класс если больше одного объекта нормально использовать нельзя, ведь перед каждым доступом к свойству позиции нужно настраивать на позицию с помощью метода Select, а то вдруг мы в каком нибудь другом месте когда, использовали  метод Select для другого объекта CPositionInfo.

1). Всё это есть в справке. Усидчивость и внимательность плюс самостоятельное написание даст понимание. 
2). Ещё раз: класс CPositionInfo это не шкатулка в которой хранятся все данные всех позиций, это просто удобный инструмент доступа к свойствам позиции. 

И так было всегда: сначала позицию выделяем, потом получаем её свойства. После этого цикл повторяется: выделили позицию и только потом получаем свойства позиции.
 

Я не понимаю, в чем моя ошибка в использовании справки.

1) Мне понадобился объем позиции в программе.

2) Через поиск я нашел метод Volume из класса CPositionInfo.

3) В нем есть ссылка на использовании метода Select перед вызовом Volume.

4) В описании метода Select не каких ссылок нет. На всякий случай изучаю описание класса CPositionInfo.

5) Пишу код. Получаю результат не следующий из справки.


Где ошибка ?

Еще раз про выбор позиции, ордера, перед доступом к свойствам я знаю. Но эти знания и знания по CPositionInfo в справке  не пересекаются.

 
pivomoe:

Где ошибка ?

Если научитесь писать более подробно, вам будет виднее где ошибаетесь.

Попробуйте написать так :

CPositionInfo PositionInfoKotiryemii,PositionInfoVedygii;
double Volume1=0; Volume2=0;
string Symbol1=""; Symbol2="";

if ( PositionInfoVedygii.Select("SBRF-12.17") ) // Select 1
{ Volume1=PositionInfoVedygii.Volume(); Symbol1=PositionInfoVedygii.Symbol(); } // Use 1
else Print("Не удалось выбрать позицию по символ SBRF-12.17 ");

if ( PositionInfoKotiryemii.Select("SBRF-3.18") ) // Select 2
{ Volume2=PositionInfoKotiryemii.Volume(); Symbol2=PositionInfoKotiryemii.Symbol(); } // Use 2
els Print("Не удалось выбрать позицию по символ SBRF-3.18 ");
 
Print(Symbol2," Объем ",Volume2," ",Symbol1," Объем ",Volime1);
 
pivomoe:

Я не понимаю, в чем моя ошибка в использовании справки.

1) Мне понадобился объем позиции в программе.

2) Через поиск я нашел метод Volume из класса CPositionInfo.

3) В нем есть ссылка на использовании метода Select перед вызовом Volume.

4) В описании метода Select не каких ссылок нет. На всякий случай изучаю описание класса CPositionInfo.

5) Пишу код. Получаю результат не следующий из справки.


Где ошибка ?

Еще раз про выбор позиции, ордера, перед доступом к свойствам я знаю. Но эти знания и знания по CPositionInfo в справке  не пересекаются.


Блок кода, который обходит все позиции и распечатывает информацию, аналогичную в терминале во вкладке "Торговля":

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         string str_position_type=(m_position.PositionType()==POSITION_TYPE_BUY)?"buy":"sell";
         Print(m_position.Symbol()+" | "+
               IntegerToString(m_position.Ticket())+" | "+
               TimeToString(m_position.Time(),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" | "+
               str_position_type+" | "+
               DoubleToString(m_position.Volume(),2)+" | "+
               DoubleToString(m_position.PriceOpen(),2));

}

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

 
pivomoe:

Получается, что никакого смысла в классе CPositionInfo нет т.к нормально, можно работать только с одним объектом этого класса.

Да, это обертка.
 

Ivan Ivanov, Vladimir Karputov, fxsaber спасибо за помощью.

 

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

Вопросы:

1. На какую глубину истории производятся вычисления в этих индикаторах?

2. Существует ли способ ограничить глубину вычислений?
В данном случае нужны всего несколько последних значений для определения перегиба или направления вверх/вниз.
Эксперт мультивалютный, индикаторов десятки, поэтому есть нужда не делать лишних вычислений.

 
User_mt5:

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

Вопросы:

1. На какую глубину истории производятся вычисления в этих индикаторах?

2. Существует ли способ ограничить глубину вычислений?
В данном случае нужны всего несколько последних значений для определения перегиба или направления вверх/вниз.
Эксперт мультивалютный, индикаторов десятки, поэтому есть нужда не делать лишних вычислений.


Надеюсь Вы хендлы индикатор создаёте ОДИН раз в OnInit()?

Глубина расчёта - всё зависит от самого индикатора. Редкие индикаторы принудительно ограничивают глубины - как правило все считают на всю историю. Поэтому Вам, возможно, пригодится такой вариант: в индикаторе ввести переменную отвечающую за глубину и затем в советнике, через iCustom, передавать этот параметр.

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