Посмотрите функцию
double MarketInfo( | string symbol, int type) |
Возвращает различную информацию о финансовых инструментах, перечисленных в окне "Обзор рынка". Часть информации о текущем финансовом инструменте хранится в предопределенных переменных.
Стоимость пункта. Такой функции в языке нет. Придётся написать её самостоятельно.
Все валютые пары можно условно разделить на три категории:
- пары с прямой котировкой (EURUSD, GBPUSD, все ***USD)
- пары с обратной котировкой (USDJPY, USDCHF, все USD***)
- кросс-курсы (GBPCHF, EURJPY, т.е. все без USD в паре).
Для валютных пар с прямой котировкой стоимость пункта, выраженная в долларах, расчитывается по формуле
цена пипса = размер лота * размер тика
где:
- размер лота в е.б.в (обычно 100.000)
- шаг тика, например для EURUSD он составляет 0.0001. Для валют с прямой котировкой стоимость пункта постоянна и не зависит от текущей котировки.
Пример:
Для EURUSD размер лота 100000
тик - 0.0001
пипс = 100000 * 0.0001 = $10.00
Для валютных пар с обратной котировкой:
пипс = размер лота * шаг тика / котировка
Для валютных пар с обратной котировкой стоимость пункта меняется в зависимости от текущей котировки.
Пример.
Для USDJPY размер лота 100000, тик - 0.01. При котировке 129.20
пипс = 100000 * 0.01 / 129.20 = $7.74
Для кросс-курсов:
пипс = размер лота * тик * текущая котировка базовой валюты к доллару США / текущая котировка пары
Пример для GBPCHF: при котировке 2.3000 и базовой котировке 1.4550
100000 * 0.0001 * 1.4550 / 2.3000 = $6.33
Существует ли в MQL4 функция, возвращающая значение стоимости 1 пункта в валюте депозита. Заранее спасибо.
MarketInfo(Symbol(),MODE_TICKVALUE) — стоимость 1 пункта в валюте депозита для 1 лота.
Не пункта, а тика. В общем случае тик может не совпадать с пунктом.
Стоимость пункта:
Lots * MarketInfo(Symbol(),MODE_TICKVALUE) / MarketInfo(Symbol(),MODE_TICKSIZE)
где Lots - объем позиции.
Не пункта, а тика. В общем случае тик может не совпадать с пунктом.
Во всех практических случаях это совпадает.
А если не совпадёт, сколько времени убъётся на поиск ошибки?
Делать надо хорошо, плохо - само получится.
Не пункта, а тика. В общем случае тик может не совпадать с пунктом.
Стоимость пункта:
Lots * MarketInfo(Symbol(),MODE_TICKVALUE) / MarketInfo(Symbol(),MODE_TICKSIZE)
где Lots - объем позиции.
Это именно стоимость пункта - то есть минимальной единицы изменения валюты. https://www.mql5.com/ru/forum/105383
Кстати Ваша формула ошибочна ибо Вы делите на размер пункта то есть получите огромные лоты.
Это именно стоимость пункта - то есть минимальной единицы изменения валюты. https://www.mql5.com/ru/forum/105383
Кстати Ваша формула ошибочна ибо Вы делите на размер пункта то есть получите огромные лоты.
Да, точно, MODE_TICKVALUE возвращает не пункты, а абсолютное значение (спасибо Метаквотам за "точности" в документировании).
Правильно так:
Lots * MarketInfo(Symbol(),MODE_TICKVALUE) / ( MarketInfo(Symbol(),MODE_TICKSIZE) / MarketInfo(Symbol(),MODE_POINT) )
double StoimPunkt(string B)
{RefreshRates();
double S = MarketInfo(B,MODE_TICKVALUE)/(MarketInfo(B,MODE_TICKSIZE)/MarketInfo(B,MODE_POINT));
return(S);}
//+-----------------------------------------------------
всегда пользовался этой функцией, это стоимость пункта при 1 лоте
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования