- 2017.05.31
- www.mql5.com
Спасибо, почитал. Там на 7-й странице есть скрипт для вычисления расчётного значения маржи для каждой открытой позиции. Я его немного подправил с учётом того, что у меня не CFD, а FOREX и скомпилировал вот в таком виде:
void OnStart() { double size = 0, percentage = 0, orderMargin = 0, accountMargin = 0; long leverage = 0; for(int i = 0; i < OrdersTotal(); i++) { int tupe = -1; if(OrderSelect(i, SELECT_BY_POS) && (tupe=OrderType()) < OP_BUYLIMIT) { string symbol = OrderSymbol(); string symbolCurencyMargin = SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN); double orderOpenPrice = OrderOpenPrice(); double orderLots = OrderLots(); double margin = MarketInfo(symbol, MODE_MARGINREQUIRED); double ask = MarketInfo(symbol, MODE_ASK); double bid = MarketInfo(symbol, MODE_BID); double price = symbolCurencyMargin == "USD" ? 1 : tupe == OP_BUY ? bid : ask; size = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE); leverage = AccountInfoInteger(ACCOUNT_LEVERAGE); percentage = NormalizeDouble(margin/(size*price/100)*leverage, 0); //orderMargin = (size*orderOpenPrice*percentage/100)/leverage; orderMargin = (orderLots*size*orderOpenPrice)/leverage; accountMargin += orderMargin; Print(symbolCurencyMargin, " ******** Маржа ", symbol, " = ", orderMargin); } } Print(AccountInfoString(ACCOUNT_CURRENCY), " ******** AccountMargin = ", DoubleToString(accountMargin, 2)); }
В подавляющем большинстве случаев значение итоговой маржи, рассчитанное данным скриптом, совпадает с фактическим. Но, увы, не в моём случае. Проблема в том, что в формуле расчёта маржи отдельно взятого ордера используется значение кредитного плеча, действующего в данный момент.
Но в регламенте некоторых брокеров (не будем показывать пальцем) прописано что для позиций, открываемых при определённых условиях (в пятницу вечером, методом усреднения и т.п.), устанавливается особое кредитное плечо, как правило в несколько раз ниже, чем в целом для счёта. Это как раз мой случай. Но чтобы правильно составить претензию и избежать повторения подобной ситуации в будущем, мне нужно разобраться, какие позиции были открыты с нормальным кредитным плечом, а какие - с повышенным.
В техподдержке брокера открыто говорят о том, что повышенное кредитное плечо устанавливается не в целом для счёта, а для конкретных ордеров и происходит это после открытия позиции. Таким образом, запрос AccountFreeMarginChek использовать бесполезно.
Собственно, отсюда и возникает вопрос: Есть ли какой-то способ достоверно узнать, какой размер залога фактически используется для каждой отдельно взятой позиции в терминале в том случае, если известно, что брокер может устанавливать для каждой позиции свой размер кредитного плеча?
Но в регламенте некоторых брокеров (не будем показывать пальцем) прописано что для позиций, открываемых при определённых условиях (в пятницу вечером, методом усреднения и т.п.), устанавливается особое кредитное плечо, как правило в несколько раз ниже, чем в целом для счёта. Это как раз мой случай. Но чтобы правильно составить претензию и избежать повторения подобной ситуации в будущем, мне нужно разобраться, какие позиции были открыты с нормальным кредитным плечом, а какие - с повышенным.
1) Брокер всегда прав.
2) Если брокер неправ, читай правило №1.
Спасибо, почитал. Там на 7-й странице есть скрипт для вычисления расчётного значения маржи для каждой открытой позиции. Я его немного подправил с учётом того, что у меня не CFD, а FOREX и скомпилировал вот в таком виде:
В подавляющем большинстве случаев значение итоговой маржи, рассчитанное данным скриптом, совпадает с фактическим. Но, увы, не в моём случае. Проблема в том, что в формуле расчёта маржи отдельно взятого ордера используется значение кредитного плеча, действующего в данный момент.
Но в регламенте некоторых брокеров (не будем показывать пальцем) прописано что для позиций, открываемых при определённых условиях (в пятницу вечером, методом усреднения и т.п.), устанавливается особое кредитное плечо, как правило в несколько раз ниже, чем в целом для счёта. Это как раз мой случай. Но чтобы правильно составить претензию и избежать повторения подобной ситуации в будущем, мне нужно разобраться, какие позиции были открыты с нормальным кредитным плечом, а какие - с повышенным.
В техподдержке брокера открыто говорят о том, что повышенное кредитное плечо устанавливается не в целом для счёта, а для конкретных ордеров и происходит это после открытия позиции. Таким образом, запрос AccountFreeMarginChek использовать бесполезно.
Собственно, отсюда и возникает вопрос: Есть ли какой-то способ достоверно узнать, какой размер залога фактически используется для каждой отдельно взятой позиции в терминале в том случае, если известно, что брокер может устанавливать для каждой позиции свой размер кредитного плеча?
Не тратьте время на бесполезные переписки. Это прописано в регламенте и спорить всё равно, что бороться с ветряными мельницами.
Тут дело не в символе, в во времени открытия. У многих это за 15 минут до закрытия на выходные. И через 15 минут в понедельник плечо возвращается в нормальное значение.
Не тратьте время на бесполезные переписки. Это прописано в регламенте и спорить всё равно, что бороться с ветряными мельницами.
Претензию я хочу составить главным образом для того, чтобы получить разъяснения касательно правил применения повышенного кредитного плеча. В регламенте это прописано не очень чётко.
Главное же, что я хочу понять, это как избежать повторения сложившейся ситуации в будущем. Конкретно в регламенте моего брокера искомый пункт содержит расплывчатую формулировку "компания оставляет за собой право". То есть они могут применить повышенные маржинальные требования к конкретному ордеру, а могут и не применить. Поэтому мне очень важно разобраться, каким образом можно выявить в терминале позиции, к которым было применено повышенное кредитное плечо (отличное от того, что выдаёт AccountLeverage). Например для того, чтобы оперативно закрыть такие позиции, информировать трейдера и приостановить торговлю.
Наверняка существует какой-то способ запросить у терминала размер залога для отдельно взятой позиции. Просто я пока его не знаю, а найти в документации не могу.
Претензию я хочу составить главным образом для того, чтобы получить разъяснения касательно правил применения повышенного кредитного плеча. В регламенте это прописано не очень чётко.
Главное же, что я хочу понять, это как избежать повторения сложившейся ситуации в будущем. Конкретно в регламенте моего брокера искомый пункт содержит расплывчатую формулировку "компания оставляет за собой право". То есть они могут применить повышенные маржинальные требования к конкретному ордеру, а могут и не применить. Поэтому мне очень важно разобраться, каким образом можно выявить в терминале позиции, к которым было применено повышенное кредитное плечо (отличное от того, что выдаёт AccountLeverage). Например для того, чтобы оперативно закрыть такие позиции, информировать трейдера и приостановить торговлю.
Наверняка существует какой-то способ запросить у терминала размер залога для отдельно взятой позиции. Просто я пока его не знаю, а найти в документации не могу.
Я не знаю как у вашего брокера, а есть такие случаи когда всё было нормально, закрываем позицию и получаем увеличенную маржу. Никак это отследить нельзя. И никто не даст никаких разъяснений. Выход один: Не торговать в то время когда могут увеличить маржу. Вероятней всего это регулируется процентом маржи, а не плечом.
Посчитайте маржу и плечо самостоятельно, в момент открытия позиции по формулам из открытых источников.
Запишите плечо в комментарий или в магик, либо вообще - запишите сразу маржу с поправкой на плечо
И будет что вспомнить
Я не знаю как у вашего брокера, а есть такие случаи когда всё было нормально, закрываем позицию и получаем увеличенную маржу.
У моего брокера это так: открываем позицию и получаем увеличенную маржу. Причём в каких-то случаях получаем, а в каких-то нет ("компания оставляет за собой право...").
Выход один: Не торговать в то время когда могут увеличить маржу. Вероятней всего это регулируется процентом маржи, а не плечом.
В моём случае, это, увы, не поможет. Маржу могут увеличить в любое время. И регулируется это именно плечом. Во всяком случае в регламенте говорится именно о плече. Я бы очень хотел избежать в данной теме обсуждения торговых условий конкретного брокера. На самом деле меня интересует, как можно получить у терминала информацию о величине залога для отдельно взятой позиции.
Посчитайте маржу и плечо самостоятельно, в момент открытия позиции по формулам из открытых источников.
Запишите плечо в комментарий или в магик, либо вообще - запишите сразу маржу с поправкой на плечо
И будет что вспомнить
Я пробовал это сделать. Но проблема в том, что маржа увеличивается после открытия позиции. Иными словами, перед открытием позиции я получаю расчётное значение маржи для неё. И сразу после успешного вызова OrderSend запрашиваю у терминала величину AccountMargin. И она полностью соответствует моим ожиданиям. Но через некоторое время это величина резко увеличивается! И значение AccountMargin оказывается в десятки раз больше, чем сумма маржи каждого открытого ордера, полученная сразу после его открытия.
Мой вопрос можно свести к тому, каким образом в каждый момент времени можно получить от терминала фактическое значение маржи для конкретного ордера.
Для счёта в целом это AccountMargin() или AccountInfoDouble(ACCOUNT_MARGIN). То есть имеется целых два способа получить это значение. Наверняка существует хотя бы один способ получить величину маржи для ордера. Просто я о нём пока не знаю, поэтому и спрашиваю.
Я пробовал это сделать. Но проблема в том, что маржа увеличивается после открытия позиции. Иными словами, перед открытием позиции я получаю расчётное значение маржи для неё. И сразу после успешного вызова OrderSend запрашиваю у терминала величину AccountMargin. И она полностью соответствует моим ожиданиям. Но через некоторое время это величина резко увеличивается! И значение AccountMargin оказывается в десятки раз больше, чем сумма маржи каждого открытого ордера, полученная сразу после его открытия.
Мой вопрос можно свести к тому, каким образом в каждый момент времени можно получить от терминала фактическое значение маржи для конкретного ордера.
Для счёта в целом это AccountMargin() или AccountInfoDouble(ACCOUNT_MARGIN). То есть имеется целых два способа получить это значение. Наверняка существует хотя бы один способ получить величину маржи для ордера. Просто я о нём пока не знаю, поэтому и спрашиваю.
не надо запрашивать
считаем по формулам
и плечо тоже по формулам
терминал не отслеживает текущее плечо, а выдает такое, которое было при загрузке терминала
поэтому и запрашиваемая функцией маржа другая
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Внезапно столкнулся с ситуацией, в которой залог по открытым позициям существенно (в 20 раз) увеличился. Есть подозрение, что брокер увеличил маржинальные требования для открытых позиций. Это предположение подтверждается необычно высоким значением AccountMargin, которое в несколько раз превышает расчётное значение для данного инструмента и установленного кредитного плеча.
На одном из счетов, оказавшихся в такой ситуации, я был вынужден закрыть с убытком последние открытые позиции, имеющие наибольший объём, дабы снизить нагрузку на депозит и не допустить Stop Out. И в какой-то момент (после закрытия очередной убыточной позиции) значение AccountMargin вернулось к расчётному уровню. Не исключено, что я заметил это не сразу и по этой причине не могу с уверенностью утверждать, для каких именно позиций были применены повышенные маржинальные требования.
На другом счёте я пока ничего не предпринимал, кроме открытия локирующего ордера. Сейчас мне нужно составить претензию брокеру, в которой указать оредера, которые были открыты с повышенными залоговыми требованиями. И в этой связи возникает вопрос:
Есть ли какой-то способ узнать размер залога (маржи) для каждой открытой позиции в терминале отдельно? В терминале я вижу только общую сумму залога, это же значение возвращает функция AccountMargin(). В справочнике MQL4 я не нашёл подходящей функции с префиксом Order. Логично было бы предположить, что это значение можно получить функцией OrderGetDouble(), но в перечислении ENUM_ORDER_PROPERTY_DOUBLE я опять же не нашёл подходящего значения.
Пожалуйста, подскажите, как на самом деле можно получить размер залога для отдельно взятой открытой позиции в терминале МТ4?