Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 15

 
Renat Akhtyamov:
будем смотреть код
Вы его перемешайте.
 
A1exPit:
Вы его перемешайте.
тогда удачи
 
Renat Akhtyamov:
тогда удачи
В заданном вопросе разве код важен нет? Нет бы сразу написал - не знаю, но как то работает.
 
A1exPit:
В заданном вопросе разве код важен нет? Нет бы сразу написал - не знаю, но как то работает.

вопрос по коду, соответственно без кода никак

Вы спрашиваете в вопросе про модифи или про перебор ордеров?

вот и  я не знаю - что Вам нужно. Но ошибка в коде - 100%

 

Пожалуйста, подскажите, как средствами MQL4 получить величину маржи по каждой открытой позиции в терминале?

Я обычно делал так:

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

При торговле по EUR/USD эта конструкция прекрасно работала и я был уверен, что её логика правильная.

Но теперь я хочу получить тот же результат для EUR/JPY (или EUR/CHF). Очевидно, что вместо OrderOpenPrice() мне нужно умножать величину стандартного лота на курс базовой валюты к валюте депозита (в моём случае на EUR/USD). Но вот что это за курс? Тот, что был в момент открытия позиции или тот, что есть сейчас (в тот момент, когда мы хотим узнать сумму залога по этой позиции)?

 
Babu Bonappan:

Пожалуйста, подскажите, как средствами MQL4 получить величину маржи по каждой открытой позиции в терминале?

Я обычно делал так:

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

При торговле по EUR/USD эта конструкция прекрасно работала и я был уверен, что её логика правильная.

Но теперь я хочу получить тот же результат для EUR/JPY (или EUR/CHF). Очевидно, что вместо OrderOpenPrice() мне нужно умножать величину стандартного лота на курс базовой валюты к валюте депозита (в моём случае на EUR/USD). Но вот что это за курс? Тот, что был в момент открытия позиции или тот, что есть сейчас (в тот момент, когда мы хотим узнать сумму залога по этой позиции)?

margin = MarketInfo(OrderSymbol(),MODE_MARGINREQUIRED) * OrderLots();

Результат будет не точный.

Либо находить курс нужной пары по графику через время открытия ордера, при необходимости учитывать спред (бид/аск) и вычислять более точное значение маржи на момент открытия ордера по формуле

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

 
А что если в момент открытия ордера в поле комментария записывать курс EUR/USD а потом его оттуда считывать?
 
Babu Bonappan:
А что если в момент открытия ордера в поле комментария записывать курс EUR/USD а потом его оттуда считывать?

Комментарий для других целей.

Вот как узнать цену:

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double bid_X=iClose(Symbol_X,Period(),bs);
 
Renat Akhtyamov:

Комментарий для других целей.

Вот как узнать цену:

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double price_X=iClose(Symbol_X,Period(),bs);

Так ведь если мы торгуем на, допустим, дневных графиках, то таким образом получим цену открытия дня, где-то в середине которого был открыт интересующий нас ордер, разве нет? А она может существенно отличаться от той цены, которая была на момент открытия.

 
Babu Bonappan:

Так ведь если мы торгуем на, допустим, дневных графиках, то таким образом получим цену открытия дня, где-то в середине которого был открыт интересующий нас ордер, разве нет? А она может существенно отличаться от той цены, по которой он был открыт. 

Никто не настаивает на применении Period()

Укажите явным образом PERIOD_M15, к примеру или другой

Причина обращения: