Расчет плеча без AccountLaverage для разных инструментов

Retrade

Интересующийся
Здравствуйте. Как расчитать кредитное плечо по выбранному инструменту, в случае, если брокер изменил плечо для некоторых инструментов.

Например, AccountLaverage выдает по всем инструментам плечо 500, а по GBPUSD брокер снизил до 1:50. Как узнать это плечо расчетной формулой?
 

Cemen4yk1

Местный житель
Здравствуйте. Как расчитать кредитное плечо по выбранному инструменту, в случае, если брокер изменил плечо для некоторых инструментов.

Например, AccountLaverage выдает по всем инструментам плечо 500, а по GBPUSD брокер снизил до 1:50. Как узнать это плечо расчетной формулой?
вроде они маржинальные требования увеличивали, а не плечо снижали, например некоторые меняли способ расчёта маржи, и вместо например способа расчёта "Forex" можно было увидеть "CFD" по фунту и евро, маржи такой способ расчёта жрёт в 4 раза больше при том же плече
 

Retrade

Интересующийся
вроде они маржинальные требования увеличивали, а не плечо снижали, например некоторые меняли способ расчёта маржи, и вместо например способа расчёта "Forex" можно было увидеть "CFD" по фунту и евро, маржи такой способ расчёта жрёт в 4 раза больше при том же плече
Спасибо за наводку, но MODE_MARGINCALCMODE - Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы показывает 0 - Forex.
 

AlexeyVik

Программист mql4 mql5
Чтобы решить эту задачу надо вспомнить что такое кредитное плечо и формулу расчёта маржи с учётом плеча.
:D Хотел словами расписать, но нихрена не получилось. Надеюсь из кода сам поймёшь.

Код:
  double lot = 0.1;
  double accountFreeMargin = AccountFreeMargin();
  double marginCheck = AccountFreeMarginCheck(_Symbol, OP_BUY, lot);
  double margin = accountFreeMargin-marginCheck;
  double CONTRACT_SIZE = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE);
  double rateContract = Ask*CONTRACT_SIZE*lot;
  int symbolLeverage = (int)round(rateContract/margin);
 

Retrade

Интересующийся
Чтобы решить эту задачу надо вспомнить что такое кредитное плечо и формулу расчёта маржи с учётом плеча.
Хотел словами расписать, но нихрена не получилось. Надеюсь из кода сам поймёшь.

То, что ты словами расписал, я понял, а из кода нихрена :D.

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

Мне же нужно, чтобы выводилась информация о плече еще до открытия позиции. Или чтоб выводился параметр, который свидетельствует о том, что плечо занижено (или маржа увеличена).
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
То, что ты словами расписал, я понял, а из кода нихрена :D.

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

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

Retrade

Интересующийся
К сожалению AccountFreeMarginCheck в индикаторе выдает ошибку: FreeMarginCheck function cannot be called from a custom indicator, а мне расчет для индикатора нужен.
 

moneyinnetwork

Интересующийся
На одном из форумов уже отвечал на Ваш же вопрос. Отвечу и здесь.
Здравствуйте. Вопрос нужный задали. Особенно важный для тех, кто бездумно использует роботов, и не учитывает, что функция AccountLeverage() возвращает кредитное плечо, которое установлено для торгового счета в целом, но не для отдельного финансового инструмента. А мы-то знаем не по наслышке, что по ряду финансовых инструментов эти плечи у брокеров могут различаться (любят брокеры их менять, например, перед важными событиями), причем, существенно.
Здесь придется определять "истинное" кредитное плечо через функцию информации об инструменте, а именно функцию MarketInfo.
Если в качестве идентификатора запроса для текущего финансового инструмента ( Symbol() ) указать параметр MODE_MARGINREQUIRED:
MarketInfo(Symbol(), MODE_MARGINREQUIRED),
то функция вернет нам размер свободных средств, необходимых для открытия 1 лота на покупку. Причем, размер залога будет рассчитан с учетом "истинного" кредитного плеча, установленного для финансового инструмента.
Отсюда уже можно определить и "истинное" кредитное плечо по конкретному финансовому инструменту, но опять-таки следует использовать еще пару вызовов MarketInfo:
MarketInfo(Symbol(),MODE_TICKVALUE)*Bid/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_POINT),
где:
MarketInfo(Symbol(),MODE_TICKVALUE) - размер минимального изменения цены инструмента в валюте депозита,
MarketInfo(Symbol(),MODE_POINT) - pазмер пункта в валюте котировки,
Bid - текущая цена продажи финансового инструмента.
Кстати, вот такой простенький код будет показывать плечо в верхнем левом углу окна с графиком финансового инструмента:
PHP:
//+------------------------------------------------------------------+ //|                                                real_leverage.mq4 | //+------------------------------------------------------------------+ #property copyright "" #property link      "" #property version   "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ int OnInit()  {    return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick()  {       Comment("Реальное плечо "+Symbol()+": "+DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE)*Bid/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_POINT),1)); }
 
Последнее редактирование модератором:

Retrade

Интересующийся
Еще раз спасибо moneyinnetwork. Как раз то, что мне было нужно и работает корректно.
 

Retrade

Интересующийся
Еще раз спасибо moneyinnetwork. Как раз то, что мне было нужно и работает корректно.

Поспешил я с выводами. По паре USDCHF советник показывает реальное плечо 1:500, а по факту 1:50. Причем, пока не попытаешься открыть позицию или не посмотришь маржинальные требования по инструменту на сайте брокера, об этом не узнаешь. Так что вопрос остается.
 
Последнее редактирование:

moneyinnetwork

Интересующийся
Поспешил я с выводами. По паре USDCHF советник показывает реальное плечо 1:500, а по факту 1:50. Причем, пока не попытаешься открыть позицию или не посмотришь маржинальные требования по инструменту на сайте брокера, об этом не узнаешь. Так что вопрос остается.
Что хоть за брокер? Сделайте тогда парсер с сайта что ли, чтобы располагать точными данными. Или перед открытием ордеров делать проверку на достаточность средств.
 
Последнее редактирование:

Retrade

Интересующийся
Брокер GKFX _http://www.gkfx.ru/trade_specs/margin_requirements.html , средств для работы с плечом 1:500 хватает точно.
 

moneyinnetwork

Интересующийся
Буду ковырять. Тема более интересная, чем кажется с первого взгляда. :)
 

Retrade

Интересующийся
У меня показывает 500, но открыть позицию разумеется можно объемом, не превышающим объем при плече 50. Было бы не плохо добиться положительного результата, многие оценили бы возможность знать реальное кредитное плечо по инструменту.
 

moneyinnetwork

Интересующийся
Ну, вместо слов, как говорится:

Влад | 21:42
Доброго вечера. Подскажите, а корректные ли данные передаются в МТ по марже?

21:48 Yuri в чате.

Yuri | 21:48
Здравствуйте

Yuri | 21:50
Данные можете сверить, используя калькулятор трейдера: __http://www.gkfx.ru/trade_specs/traders_calculator.html
Также, маржинальые требования указаны здесь: __http://www.gkfx.ru/trade_specs/margin_requirements.html

Влад | 21:52
Скажите сейчас по USDCHF какое реальное плечо? На сайте 1:50, а на самом деле сколько из МТ?
Просто МТ возвращает размер залога на 1 лот 1075 долларов, т.е. плечо из МТ получается 100.

Влад | 21:53
это запрос по параметру MODE_MARGINREQUIRED

Мне кажется просто неправильно внесены (неоткорректированы) эти параметры в админке.

Yuri | 21:57
Кстати, 100 по USDCHF
На сайте, значит не поменяли

Влад | 21:58
Вот и я про тоже. Т.е. MODE_MARGINREQUIRED из МТ правильно выдает всегда?


Yuri | 21:59
да

Влад | 21:59
Просто один товарищ говорит, что реальное плечо по факту сейчас 50. Я проверить не могу.
А проверьте плечо по USDRUB

Влад | 22:01
мне сова 100 показывает


Yuri | 22:01
Тоже 100

Влад | 22:02
на сайте 1 к 20
то есть моя сова правильно считает

Yuri | 22:04
Да.
Вообще, можно проверять так: __http://www.gkfx.ru/trade_specs/traders_calculator.html

Влад | 22:04
так там расчет как у меня в сове

Yuri | 22:04
По всем валютным инструментам маржа должна быть примерно одинакова - не отличаться в разы
Калькулятор трейдера берёт данные напрямую из MT, как и ваша сова
так что тут уж как кому удобнее

Влад | 22:05
Спасибо. Разобрались.

Я вот только не понял, почему у Вас 500 показывает, а у меня 100. Вы код случайно не модифицировали?

Я вот только не понял, почему у Вас 500 показывает, а у меня 100. Вы код случайно не модифицировали?
Ага. В общем у меня такая мысль, что он Вам правильно показывает.
У Вас же плечо по счету 500, а у меня плечо по счету 100. МТ для наших счетов и возвращает с учетом реального плеча размер залога по конкретному инструменту. Т.е. в Вашем случае залог меньше в 5 раз, чем в моем. Отсюда и расчет разный. Просто сейчас сняты, видимо, маржинальные ограничения.
Т.е. все работает правильно. В Вашем случае маржа меньше в 5 раз (200 долларов на 1 лот), соответственно, реальное плечо больше в 5 раз, из чего и идет расчет. Как-то так.
 
Последнее редактирование:

Retrade

Интересующийся
Код ни в коем случае не менял. Все проверяю на демке. Депо $1000, плечо на счете 500. Максимальный объем, с которым можно открыть позицию по USDCHF - 0,50 (0,51 уже не открывает Not enough money), что соответствует для депозита $1000 с плечом 1:50. Если бы плечо по USDCHF было 1:100, максимальный объем бы составил 1.00.

Вы попробуйте у себя в терминале на $1000 открыть по USDCHF позицию 1.00 лотом или чуть меньше 0.95. Если плечо указанное в советнике соответствует плечу для USDCHF, позиция, разумеется, будет открыта.

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

moneyinnetwork

Интересующийся
Пока я вижу, что советник показывает плечо на счете, но не для выбранного инструмента.
Он выдает то, что ему выдает МТ. У них настройки неправильные. Вот и весь ответ.
Открываешь демо-счет, указываешь плечо 1:100, а выдает маржу на 1 лот 200 баксов. А это говорит, что реальное плечо по инструменту как бы 1:500. Но когда открываешь позу в 0.5 лот указывает маржу в терминале 1000, что соответствует плечу 1:50. Долбите поддержку, чтобы обновили настройки. У них с этим, насколько я понял проблемы, причем, систематические по тех.
части.
Их калькулятор выдает тоже самое, что и мой код. Так что, здесь никто не поможет кроме грамотных и ответственных спецов, которые будут своевременно менять настройки в МТ.
 
Последнее редактирование:
Верх