сначала нужно получить тикет позиции по индексу в списке открытых позиций;
затем получить символ у открытой позиции.
Почему именно так, а не наоборот? В документации всё чётко прописано:
Функция PositionGetTicket возвращает тикет позиции по индексу в списке открытых позиций
и автоматически выбирает эту позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.
maxvoronin74 #: Верно ли я понимаю, что в данном случае position_symbol и magic относятся именно к данному ticket? Работает ли конкатенация, вроде ticket.magic или ticket.symbol? Верна ли запись теперь?
Зачем проверка if(total = 0 ……… ведь если нет открытых позиций, то и цикл выполняться просто не будет.
Да и проверка if(………magic != Magic_m)) ничего не даёт. Ведь если позиция имеет иной магик, то просто начнётся новая итерация цикла и без дополнительных команд.
Но это всё на любителя. Если нравится так, то пишите так…
MrBrooklin #: автоматически выбирает эту позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString
Благодарю. Выяснял, что конкретно может значить это "автоматически".
У каждого свой принцип программирования и на мой взгляд вот эта строка вашего кода выглядит как-то странно
Зачем проверка if(total = 0 ……… ведь если нет открытых позиций, то и цикл выполняться просто не будет.
Да и проверка if(………magic != Magic_m)) ничего не даёт. Ведь если позиция имеет иной магик, то просто начнётся новая итерация цикла и без дополнительных команд.
Но это всё на любителя. Если нравится так, то пишите так…
Возможно, это из-за того, что у меня i >= 0. У Вас - больше нуля. И конкатенация, о которой я спрашивал, не принимается MetaEditor-ом. Хотя я взял ее из статьи МетаКвот (https://www.mql5.com/ru/articles/12103)...
А почему Вы не проверяете posTicket на равенство нулю? Ведь равенство нулю по документации свидетельствует об ошибке?
Касаемо ненужности проверки магика я пока не понимаю. Смысл кода - быть уверенным, что не открыта позиция именно этим экспертом на данном инструменте. Экспертов на инструменте несколько. У каждого - свое окно. Эксперты магиком и отличаются.
Переменную position или m_position можете назвать как угодно, например, pos, posit, k_pos, k_position и т.д. и т.п.
С уважением, Владимир.
С переменными Вы правы. Но в классе CTrade эта строка m_position, наверное, как-то иначе называется. Чтобы открыть позицию, пишем m_trade.Buy(), вместо position.Magic(), как в статье, пишем m_position.Magic(). Везде эта приставка m_.
Похоже Вы запутались. Вот посмотрите и прочитайте внимательно комментарии к каждой строке:
#include <Trade\PositionInfo.mqh> // включим файл PositionInfo.mqh#include <Trade\Trade.mqh> // включим файл Trade.mqh#include <Trade\SymbolInfo.mqh> // включим файл SymbolInfo.mqh#include <Trade\AccountInfo.mqh> // включим файл AccountInfo.mqh
CPositionInfo m_position; // CPositionInfo - класс для работы со свойствами открытой позиции; m_position - переменная для упрощенного доступа к свойствам открытой позиции
CTrade m_trade; // CTrade - класс для совершения торговых операций; m_trade - переменная для упрощенного доступа к торговым операциям
CSymbolInfo m_symbol; // CSymbolInfo - класс для работы со свойствами торг. инструмента; m_symbol - переменная для упрощенного доступа к свойствам торгового инструмента
CAccountInfo m_account; // CAccountInfo - класс для работы со свойствами торгового счета; m_account - переменная для упрощенного доступа к свойствами торгового счета
Надеюсь теперь будет всё понятно. По поводу переменной уже написал в этой теме, что она может быть названа, как position, так и m_position и т.д и т.п.
И, пжл, задавайте вопросы в одной этой теме, так проще будет получить помощь.
Похоже Вы запутались. Вот посмотрите и прочитайте внимательно комментарии к каждой строке:
Надеюсь теперь будет всё понятно. По поводу переменной написал Вам в другой теме, что она может быть названа, как position, так и m_position и т.д и т.п.
И, пжл, задавайте вопросы в этой теме, так проще будет получить помощь.
С уважением, Владимир.
Да, извините, не CTrade, а CPositionInfo. Но все равно нельзя написать вместо m_position position или " pos, posit, k_pos, k_position и т.д. и т.п. ", как Вы пишете. Забито в классе именно m_position (CPositionInfo m_position;).
Можно писать любое название переменной, главное, чтобы дальше в коде она была с одним и тем же названием. Пример:
#include <Trade\PositionInfo.mqh> // включим файл PositionInfo.mqh
CPositionInfo k_pos; // объявим переменную, например, k_pos
// Далее в коде должны использовать только это название переменной
for(int i=PositionsTotal()-1;i>=0;i--)
if(k_pos.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(k_pos.Symbol()==m_symbol.Name() && k_pos.Magic()==m_magic)
{
if(k_pos.PositionType()==POSITION_TYPE_BUY)
buys=true;
if(k_pos.PositionType()==POSITION_TYPE_SELL)
sells=true;
if(buys && sells)
return;
}
Небольшое уточнение к Вашему коду:
С уважением, Владимир.
Верно ли я понимаю, что в данном случае position_symbol и magic относятся именно к данному ticket? Работает ли конкатенация, вроде ticket.magic или ticket.symbol? Верна ли запись теперь?
так будет почти правильно.
У каждого свой принцип программирования и на мой взгляд вот эта строка вашего кода выглядит как-то странно
Зачем проверка if(total = 0 ……… ведь если нет открытых позиций, то и цикл выполняться просто не будет.
Да и проверка if(………magic != Magic_m)) ничего не даёт. Ведь если позиция имеет иной магик, то просто начнётся новая итерация цикла и без дополнительных команд.
Но это всё на любителя. Если нравится так, то пишите так…
автоматически выбирает эту позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString
Благодарю. Выяснял, что конкретно может значить это "автоматически".
так будет почти правильно.
У каждого свой принцип программирования и на мой взгляд вот эта строка вашего кода выглядит как-то странно
Зачем проверка if(total = 0 ……… ведь если нет открытых позиций, то и цикл выполняться просто не будет.
Да и проверка if(………magic != Magic_m)) ничего не даёт. Ведь если позиция имеет иной магик, то просто начнётся новая итерация цикла и без дополнительных команд.
Но это всё на любителя. Если нравится так, то пишите так…
Возможно, это из-за того, что у меня i >= 0. У Вас - больше нуля. И конкатенация, о которой я спрашивал, не принимается MetaEditor-ом. Хотя я взял ее из статьи МетаКвот (https://www.mql5.com/ru/articles/12103)...
А почему Вы не проверяете posTicket на равенство нулю? Ведь равенство нулю по документации свидетельствует об ошибке?
Касаемо ненужности проверки магика я пока не понимаю. Смысл кода - быть уверенным, что не открыта позиция именно этим экспертом на данном инструменте. Экспертов на инструменте несколько. У каждого - свое окно. Эксперты магиком и отличаются.
И конкатенация, о которой я спрашивал, не принимается MetaEditor-ом. Хотя я взял ее из статьи МетаКвот (https://www.mql5.com/ru/articles/12103)...
По конкатенации выяснил, что, видиимо, класс диктует вместо position писать m_position.
По конкатенации выяснил, что, видиимо, класс диктует вместо position писать m_position.
Переменную position или m_position можете назвать как угодно, например, pos, posit, k_pos, k_position и т.д. и т.п.
С уважением, Владимир.
Переменную position или m_position можете назвать как угодно, например, pos, posit, k_pos, k_position и т.д. и т.п.
С уважением, Владимир.
Похоже Вы запутались. Вот посмотрите и прочитайте внимательно комментарии к каждой строке:
Надеюсь теперь будет всё понятно. По поводу переменной уже написал в этой теме, что она может быть названа, как position, так и m_position и т.д и т.п.
И, пжл, задавайте вопросы в одной этой теме, так проще будет получить помощь.
С уважением, Владимир.
Похоже Вы запутались. Вот посмотрите и прочитайте внимательно комментарии к каждой строке:
Надеюсь теперь будет всё понятно. По поводу переменной написал Вам в другой теме, что она может быть названа, как position, так и m_position и т.д и т.п.
И, пжл, задавайте вопросы в этой теме, так проще будет получить помощь.
С уважением, Владимир.
Да, извините, не CTrade, а CPositionInfo. Но все равно нельзя написать вместо m_position position или " pos, posit, k_pos, k_position и т.д. и т.п. ", как Вы пишете. Забито в классе именно m_position (CPositionInfo m_position;).
Можно писать любое название переменной, главное, чтобы дальше в коде она была с одним и тем же названием. Пример:
Ещё вопросы остались?
С уважением, Владимир.