Как вычислить маржу? - страница 2

 
Renat Akhtyamov:

не надо запрашивать

считаем по формулам

Формула, которую я использую для расчёта маржи отдельно взятого, такова:

OrderMargin = (OrderLots()*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE)*OrderOpenPrice())/AccountInfoInteger(ACCOUNT_LEVERAGE);

В подавляющем большинстве случаев сумма таких значений по всем открытым ордерам равна AccountInfoDouble(ACCOUNT_MARGIN).

Однако в случае, описанном мной выше, эта формула даёт неверное значение. Причина в том, что при подсчёте используется постоянная (для всех ордеров) величина AccountInfoInteger(ACCOUNT_LEVERAGE). В то время как на самом деле (в моём частном случае) она не является постоянной. Мой брокер, согласно регламенту, может уменьшать значение кредитного плеча в несколько десятков раз для отдельных ордеров

Иными словами, для 9-ти ордеров в терминале по этой формуле мы получим верное значение маржи (они имеют стандартное кредитное плечо), а для 10-го и 11-го ордера  неверное (для них брокер установил повышенное кредитное плечо спустя пять минут после открытия).

Возможно, Вы, Ренат, сможете подсказать другую формулу, которая бы позволила верно подсчитать кредитное плечо для отдельно взятого ордера?
Пожалуйста, учтите, что оно может быть изменено брокером в любой момент после открытия позиции.

На всякий случай замечу, что описанная ситуация  не плод моего больного воображения. Это то, что происходило на моём счёте сегодня ночью.

 
Janis Ozols:

Формула, которую я использую для расчёта маржи отдельно взятого, такова:

В подавляющем большинстве случаев сумма таких значений по всем открытым ордерам равна AccountInfoDouble(ACCOUNT_MARGIN).

Однако в случае, описанном мной выше, эта формула даёт неверное значение. Причина в том, что при подсчёте используется постоянная (для всех ордеров) величина AccountInfoInteger(ACCOUNT_LEVERAGE). В то время как на самом деле (в моём частном случае) она не является постоянной. Мой брокер, согласно регламенту, может уменьшать значение кредитного плеча в несколько десятков раз для отдельных ордеров

Иными словами, для 9-ти ордеров в терминале по этой формуле мы получим верное значение маржи (они имеют стандартное кредитное плечо), а для 10-го и 11-го ордера  неверное (для них брокер установил повышенное кредитное плечо спустя пять минут после открытия).

Возможно, Вы, Ренат, сможете подсказать другую формулу, которая бы позволила верно подсчитать кредитное плечо для отдельно взятого ордера?
Пожалуйста, учтите, что оно может быть изменено брокером в любой момент после открытия позиции.

На всякий случай замечу, что описанная ситуация  не плод моего больного воображения. Это то, что происходило на моём счёте сегодня ночью.

естественно что будет по другому

реальное плечо какое было в момент открытия?

я Вам черным по белому написал - запоминайте реальное плечо в комментарии или в магике при открытии сделки

причем, плечо нужно вычислять а не запрашивать

ps

плечо на момент открытия сделки будет тем, какое оно есть

после открытия ничего уже не изменится, да и в принципе не важно

VOL=MarketInfo("EURUSD",MODE_LOTSIZE);

LEVERAGE=NormalizeDouble(VOL/MarketInfo("USDCHF",MODE_MARGINREQUIRED),0);

в обзоре рынка обязательное наличие евро и франка

код для MQL4

если же плечо плавает на разных инструментах по разному и не одновременно, то производим расчет по этому же принципу
 
Renat Akhtyamov:

реальное плечо какое было в момент открытия?

В момент открытия реальное кредитное плечо было 1:1000. Маржа при открытии позиции SELL объёмом 0.10 по EUR/USD при Вid = 1.1800 сразу же после открытия составляла 11.80 USD. На тот момент на счёте было ещё 9 сделок, маржа по которым равнялась 86.20 USD. После открытия позиции маржа стала равна 98.00 USD. Через две минуты брокер изменил кредитное плечо для последней открытой позиции до 1:33. При этом её маржа стала равна 357.58 (вместо 11.80 в момент открытия), а общая маржа счёта — 443.78 USD.

Я пытаюсь найти способ (или формулу), которая поможет мне, перебирая открытые позиции в терминале, своевременно обнаруживать те, для которых фактическая величина залога многократно превышает расчётную (ту, что была актуальна на момент открытия позиции).

Renat Akhtyamov:

я Вам черным по белому написал - запоминайте реальное плечо в комметарии или в магике при открытии сделки

Вы меня, пожалуйста, извините за назойливость, но я никак не могу понять, чем мне в данной ситуации может помочь сохранённое в момент открытия позиции кредитное плечо в данной ситуации?

 
Janis Ozols:

В момент открытия реальное кредитное плечо было 1:1000. Маржа при открытии позиции SELL объёмом 0.10 по EUR/USD при Вid = 1.1800 сразу же после открытия составляла 11.80 USD. На тот момент на счёте было ещё 9 сделок, маржа по которым равнялась 86.20 USD. После открытия позиции маржа стала равна 98.00 USD. Через две минуты брокер изменил кредитное плечо для последней открытой позиции до 1:33. При этом её маржа стала равна 357.58 (вместо 11.80 в момент открытия), а общая маржа счёта — 443.78 USD.

Я пытаюсь найти способ (или формулу), которая поможет мне, перебирая открытые позиции в терминале, своевременно обнаруживать те, для которых фактическая величина залога многократно превышает расчётную (ту, что была актуальна на момент открытия позиции).

Вы меня, пожалуйста, извините за назойливость, но я никак не могу понять, чем мне в данной ситуации может помочь сохранённое в момент открытия позиции кредитное плечо в данной ситуации?

то что Вы описываете вполне возможно только при закрытии части лока, т.к. почти у всех ДЦ счас неттинг

при этом. у открытой позиции маржа изменится

в течении этих 2-х минут сделки закрывали?

 
Renat Akhtyamov:

после открытия ничего уже не изменится

Вот в этом то и коварство! Плечо для отдельно взятого ордера в моём случае было изменено ПОСЛЕ открытия позиции. И не сразу, а через некоторое время. Это подтвердил сотрудник тех. поддержки брокера, после чего я смог воспроизвести эту ситуацию у себя на счёте.

Renat Akhtyamov:

то что Вы описываете вполне возможно только при закрытии части лока, т.к. почти у всех ДЦ счас неттинг

в течении этих 2-х минут сделки закрывали?

Нет, я не закрывал сделок и не использовал локи. В терминале были сделки только одного направления. После открытия очередной позиции SELL объёмом 0.1 я некоторое время наблюдал в терминале значение Margin = 98.00. Спустя примерно 2 минуты прямо у меня на глазах эта цифра стала равна 443.78. При этом ни одной строчки в журнал не добавилось, никаких советников подключено не было. Открыт один график, в обзоре рынка один символ.

После закрытия злополучной сделки с небольшим убытком маржа счёта снова стала равна 86.20.

 
Janis Ozols:

Вот в этом то и коварство! Плечо для отдельно взятого ордера в моём случае было изменено ПОСЛЕ открытия позиции. И не сразу, а через некоторое время. Это подтвердил сотрудник тех. поддержки брокера, после чего я смог воспроизвести эту ситуацию у себя на счёте.

Нет, я не закрывал сделок и не использовал локи. В терминале были сделки только одного направления. После открытия очередной позиции SELL объёмом 0.1 я некоторое время наблюдал в терминале значение Margin = 98.00. Спустя примерно 2 минуты прямо у меня на глазах эта цифра стала равна 443.78. При этом ни одной строчки в журнал не добавилось, никаких советников подключено не было. Открыт один график, в обзоре рынка один символ.

принтуйте плечо, время открытия и маржу

формула и код выше

ну и разбирайтесь с ДЦ, согласно лога

лично я в эти неподтвержденные ничем сказки не верю.
 
Renat Akhtyamov:

ну и разбирайтесь с ДЦ, согласно лога

С ДЦ я разобрался. Их ответ очень простой читайте регламент, там всё написано. И там действительно написано, что компания оставляет за собой право изменять кредитное плечо для отдельно взятых позиций, открытых при определённых условиях. После этого я задал уточняющий вопрос могу ли я получить реальное кредитное плечо для очередной позиции ДО её открытия? Используя для этого запросы MarketInfo(_Symbol,MODE_MARGINREQUIRED), AccountFreeMarginCheck() или какие либо другие? На что получил ответ НЕТ, уменьшенное кредитное плечо будет установлено ПОСЛЕ открытия позиции, соответствующей условиям из регламента, исходя из текущей рыночной ситуации. 

Renat Akhtyamov:
лично я в эти неподтвержденные ничем сказки не верю.

Я ни в коем случае не ставлю своей целью убедить Вас в чём-либо! Более того, я очень рад, что Вы не сталкивались с подобной ситуацией. Я и сам с ней столкнулся впервые за несколько лет работы с данным брокером.

Резюмируя всё сказанное Вами, верно ли я понимаю, что не существует нативного способа получить средствами MQL4 фактический (не расчётный) размер залога для отдельно взятой открытой позиции в терминале в произвольный момент времени при условии, что эта величина не была сохранена где-либо ранее? 

 
Janis Ozols:

С ДЦ я разобрался. Их ответ очень простой читайте регламент, там всё написано. И там действительно написано, что компания оставляет за собой право изменять кредитное плечо для отдельно взятых позиций, открытых при определённых условиях. После этого я задал уточняющий вопрос могу ли я получить реальное кредитное плечо для очередной позиции ДО её открытия? Используя для этого запросы MarketInfo(_Symbol,MODE_MARGINREQUIRED), AccountFreeMarginCheck() или какие либо другие? На что получил ответ НЕТ, уменьшенное кредитное плечо будет установлено ПОСЛЕ открытия позиции, соответствующей условиям из регламента, исходя из текущей рыночной ситуации. 

Я ни в коем случае не ставлю своей целью убедить Вас в чём-либо! Более того, я очень рад, что Вы не сталкивались с подобной ситуацией.Я и сам с ней столкнулся впервые за несколько лет работы с данным брокером.

Резюмируя всё сказанное Вами, верно ли я понимаю, что не существует нативного способа получить средствами MQL4 фактический (не расчётный) размер залога для отдельно взятой открытой позиции в терминале в произвольный момент времени при условии, что эта величина не была сохранена где-либо ранее? 

потому что я знакомлюсь с регламентом ДО, а не ПОСЛЕ

и если мне что то не подходит я не работаю в таком месте

 
Janis Ozols:

Резюмируя всё сказанное Вами, верно ли я понимаю, что не существует нативного способа получить средствами MQL4 фактический (не расчётный) размер залога для отдельно взятой открытой позиции в терминале в произвольный момент времени при условии, что эта величина не была сохранена где-либо ранее? 

Да, так и есть.

Только, скорее всего, плечо меняется не для отдельной сделки, а для инструмента целиком, но сути это не меняет.

Добавлю-ка я алерт в свой информер на этот случай...

 

Функция AccountLeverage() намекает, что плечо меняется у счета. У отдельных символов плечо может отличаться от плеча счета в зависимости от экзотики символа (Fx Minors, Fx Exotics, Fx Rub) и объема позиции. В любом случае нужно читать регламент и спецификации контрактов.

В интересное время любая торговая операция меняет плечо счета. Чтобы плечо изменилось, нужно совершить торговую операцию. Я как-то удалил забытый и бесперспективный отложенный ордер. Так сказать, навел порядок. В итоге плечо счета уменьшили с 500 до 100.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Торговля осуществляется посредством отправки с помощью функции OrderSend() приказов на открытие позиций, а также приказов на установку, модификацию и удаление отложенных ордеров. Каждый торговый приказ содержит указание на тип запрашиваемой торговой операции. Торговые операции описаны в перечислении ENUM_TRADE_REQUEST_ACTIONS...