Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Все статьи доступны из MetaTrader 5. Поделись и ты своей!
George Merts
3526
George Merts 2013.07.04 09:06 

Приветствую.

Ситуация: 

Получаю текущую цену по позиции с помощью метода СPositionInfo::PriceCurrent(); 

Этот метод реализован как PositionGetDouble(POSITION_PRICE_CURRENT)); И в документации просто прописано, что так возвращается цена по позиции.  

Пока я тестировал обработку длинных позиций - никаких проблем не было. Но на коротких позициях - код перестал работать. Оказывается, на коротких позициях данный метод возвращает какую-то другую цену, не ту, что дается в  графике тестера стратегий.

После проверок выяснилось, что, оказывается, для длинных позиций мой код получает цену Bid, а для коротких - Аsk ! 

Вопросы:

Правильно ли я понимаю, что ВСЕГДА по запросу   PositionGetDouble(POSITION_PRICE_CURRENT)) для длинных позиций возвращается текущая цена Bid, а для короткий - текущая цена Ask ?

Может быть, стоит это более конкретно указать в справке по константе POSITION_PRICE_CURRENT и в документации по методу СPositionInfo::PriceCurrent() ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
Alexander Laur
7652
Alexander Laur 2013.07.04 09:24  

Согласитесь, что такое положение дел является логичным. Ведь длинная позиция будет закрыта по Bid, а короткая по Ask.

George Merts
3526
George Merts 2013.07.04 13:14  

Да, согласен, это логично.

Вот, хочу чтобы разработчики подтвердили это. Поскольку в документации об этой разнице ничего не сказано.

Дело в том, что все индикаторы строятся именно по цене Bid. А это значит, что при сравнении - надо учитывать, о какой позиции идет речь - если длинная - то брать текущую цену "как есть", а если короткая - то учитывать, что необходимо еще учесть спред.  

Sergey Gridnev
4907
Sergey Gridnev 2013.07.04 14:23  
Laryx:

Да, согласен, это логично.

Вот, хочу чтобы разработчики подтвердили это. Поскольку в документации об этой разнице ничего не сказано.

Дело в том, что все индикаторы строятся именно по цене Bid. А это значит, что при сравнении - надо учитывать, о какой позиции идет речь - если длинная - то брать текущую цену "как есть", а если короткая - то учитывать, что необходимо еще учесть спред.  

При чем тут индикаторы?

Текущая цена позиции - это цена, по которой позиция может быть закрыта в текущий момент. 

George Merts
3526
George Merts 2013.07.04 14:31  
Contender:

При чем тут индикаторы?

Ну, глядите:

Я сравниваю текущую цену позиции с минимумом или максимумом последних нескольких свечей. Понятное дело, что цена при этом должна быть и там, и там - одна, либо Bid, либо Ask. Я запрашиваю значение цен, нахожу максимум... И теперь - должен получить текущую цену позиции. При равенстве - произвести изменения (передвинуть СЛ). Когда позиция длинная - то никаких проблем. Начал проверять короткие позиции - СЛ не двигается. Начал разбираться... опа ! Оказывается, минимум цен никогда не равен текущей цене, потому, что минимум, максимум и цена длиной позиции считаются по Bid'y, а вот цена короткой позиции - по Ask'y.

Вот, и интересуюсь - всегда ли это так. Если всегда - то никаких проблем, просто учту такую особенность. 

 

Текущая цена позиции - это цена, по которой позиция может быть закрыта в текущий момент. 

Спасибо за информацию. Я тоже склоняюсь к этому мнению.  

Но в документации об этом ничего не сказано. А хотелось бы знать точно. Поэтому я обратился с вопросом к форуму. Если здесь не получу ответ - обращусь в Сервисдеск.  

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
Vasiliy Smirnov
12290
Vasiliy Smirnov 2013.07.05 08:56  
Laryx:

Ну, глядите:

Я сравниваю текущую цену позиции с минимумом или максимумом последних нескольких свечей. Понятное дело, что цена при этом должна быть и там, и там - одна, либо Bid, либо Ask. Я запрашиваю значение цен, нахожу максимум... И теперь - должен получить текущую цену позиции. При равенстве - произвести изменения (передвинуть СЛ). Когда позиция длинная - то никаких проблем. Начал проверять короткие позиции - СЛ не двигается. Начал разбираться... опа ! Оказывается, минимум цен никогда не равен текущей цене, потому, что минимум, максимум и цена длиной позиции считаются по Bid'y, а вот цена короткой позиции - по Ask'y.

Вот, и интересуюсь - всегда ли это так. Если всегда - то никаких проблем, просто учту такую особенность. 

 

Спасибо за информацию. Я тоже склоняюсь к этому мнению.  

Но в документации об этом ничего не сказано. А хотелось бы знать точно. Поэтому я обратился с вопросом к форуму. Если здесь не получу ответ - обращусь в Сервисдеск.  

Так вы потестируйте и увидите.
George Merts
3526
George Merts 2013.07.05 12:38  

Ну, вот так и делаю.

Проблема в том, что сейчас у меня на всех демо-счетах фиксированный спред. А для полной уверенности, что возвращается именно цена Ask - надо испытать  код на плавающем спреде.  Соответственно, надо разбираться, какой демо-счет и у какого ДЦ открыть, чтобы в истории был плавающий спред, возможно, учитывать особенности этого ДЦ - то есть, возможны "подводные камни". Хорошо бы, если бы разработчик сразу бы подтвердил мое предположение.

Ну, не подтвердит - ничего кроме такого тестирования и не остается.  

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
Vasiliy Smirnov
12290
Vasiliy Smirnov 2013.07.05 12:42  
Laryx:

Ну, вот так и делаю.

Проблема в том, что сейчас у меня на всех демо-счетах фиксированный спред. А для полной уверенности, что возвращается именно цена Ask - надо испытать  код на плавающем спреде.  Соответственно, надо разбираться, какой демо-счет и у какого ДЦ открыть, чтобы в истории был плавающий спред, возможно, учитывать особенности этого ДЦ - то есть, возможны "подводные камни". Хорошо бы, если бы разработчик сразу бы подтвердил мое предположение.

Ну, не подтвердит - ничего кроме такого тестирования и не остается.  

Текущая цена позиции отображается прямо в терминале, так что тестирование очень простое.
George Merts
3526
George Merts 2013.07.05 13:36  

zfs:
Текущая цена позиции отображается прямо в терминале, так что тестирование очень простое.

Нет. Это - не тестирование.  Такая проверка отвечает лишь на вопрос "равна ли цена открытой позиции цене Ask в ДАННЫЙ МОМЕНТ ?". 

Тестирование - это запрос у ДЦ исторических данных с плавающим спредом хотя бы за месяц (а лучше - за год), открытие случайным образом в тестере не мене сотни сделок, и проверка на КАЖДОЙ сделке, чему равна цена позиции, возвращаемой функцией PositionGetDouble(POSITION_PRICE_CURRENT)).

И очень хорошо бы получить подтверждение разработчика, что, действительно, в этой функции по длинной позиции - возвращается текущая цена Bid, а по короткой - текущая цена Ask.

MetaQuotes
Админ
24887
Renat Fatkhullin 2013.07.05 13:44  
Laryx:

И очень хорошо бы получить подтверждение разработчика, что, действительно, в этой функции по длинной позиции - возвращается текущая цена Bid, а по короткой - текущая цена Ask.
Да, действительно.
Sergey Gridnev
4907
Sergey Gridnev 2013.07.05 13:51  
Laryx:

Нет. Это - не тестирование.  Такая проверка отвечает лишь на вопрос "равна ли цена открытой позиции цене Ask в ДАННЫЙ МОМЕНТ ?". 

Тестирование - это запрос у ДЦ исторических данных с плавающим спредом хотя бы за месяц (а лучше - за год), открытие случайным образом в тестере не мене сотни сделок, и проверка на КАЖДОЙ сделке, чему равна цена позиции, возвращаемой функцией PositionGetDouble(POSITION_PRICE_CURRENT)).

И очень хорошо бы получить подтверждение разработчика, что, действительно, в этой функции по длинной позиции - возвращается текущая цена Bid, а по короткой - текущая цена Ask.

 

Не надо городить огороды.

Для начала надо подумать на тему "что есть цена позиции". Лично у меня как бы и невозникало никогда вопроса "почему цена открытой SELL-позиции равняется текущему Ask-у", это как-бы само-собой разумеющееся.

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий