На одном из форумов уже отвечал на Ваш же вопрос. Отвечу и здесь.
Здравствуйте. Вопрос нужный задали. Особенно важный для тех, кто бездумно использует роботов, и не учитывает, что функция 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 - текущая цена продажи финансового инструмента.
Кстати, вот такой простенький код будет показывать плечо в верхнем левом углу окна с графиком финансового инструмента:
//+------------------------------------------------------------------+ //| 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)); }