Есть 2 советника которые могут иметь по 1 открытой позиции одновременно, на одной и той же валютной паре в одном и том же направлении на Buy к примеру, и нужно как-то определять их текущий профит на каждом тике пока позиции открыты. Как я понял это делается при помощи PositionSelect(Symbol()) и PositionGetDouble(POSITION_PROFIT) но в документации к PositionSelect написано:
и
Пытаюсь понять как мне определить в каком из этих 2х режимов работают советники, если установка сделок выглядит примерно так:
И как мне в этих условиях получать информацию о текущем профите каждого конкретного советника?
Совет номер 1: забыть и не использовать методы выбора позиции по символу. То есть бежать как от огня от конструкций вида
PositionSelect(Symbol()
Всегда работайте перебором всех позиций, где выбор позиции идёт через индекс её в списке.
Пример подсчёта прибыли всех позиций:
//+------------------------------------------------------------------+ //| Profit all positions | //+------------------------------------------------------------------+ double ProfitAllPositions(void) { double profit=0.0; for(int i=PositionsTotal()-1; i>=0; i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic) profit+=m_position.Commission()+m_position.Swap()+m_position.Profit(); //--- return(profit); }
просто и лаконично.
Tip number 1: forget and do not use methods for selecting a position by a symbol. That is, to run like fire from constructions like
Always work by enumerating all positions, where the position is selected through its index in the list.
An example of calculating the profit of all positions:
simple and concise.
Very precise.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть 2 советника которые могут иметь по 1 открытой позиции одновременно, на одной и той же валютной паре в одном и том же направлении на Buy к примеру, и нужно как-то определять их текущий профит на каждом тике пока позиции открыты. Как я понял это делается при помощи PositionSelect(Symbol()) и PositionGetDouble(POSITION_PROFIT) но в документации к PositionSelect написано:
"При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций. В этом случае, PositionSelect выберет позицию с наименьшим тикетом."
Но если я всегда буду получать позицию с наименьшим тикетом то как мне определить
1. К какому из советников тикет этот относится?
2. Как получить данные по второму тикету если всегда возвращается наименьший?