Определение стоимости 1 пункта.

 
Существует ли в MQL4 функция, возвращающая значение стоимости 1 пункта в валюте депозита. Заранее спасибо.
 

Посмотрите функцию

double MarketInfo( string symbol, int type)

Возвращает различную информацию о финансовых инструментах, перечисленных в окне "Обзор рынка". Часть информации о текущем финансовом инструменте хранится в предопределенных переменных.

 

Если вы (кроме валют) работаете с товарными и фондовыми инструментами, то вам, возможно, понадобятся две функции:

- стоимость и число пунктов в тике.

MarketInfo(Symbol, MODE_TICKVALUE) и MarketInfo(Symbol, MODE_TICKSIZE)

 

Стоимость пункта. Такой функции в языке нет. Придётся написать её самостоятельно.


Все валютые пары можно условно разделить на три категории:
- пары с прямой котировкой (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

 
nys2000:
Существует ли в MQL4 функция, возвращающая значение стоимости 1 пункта в валюте депозита. Заранее спасибо.
MarketInfo(Symbol(),MODE_TICKVALUE) — стоимость 1 пункта в валюте депозита для 1 лота.
 
Andrei01:
MarketInfo(Symbol(),MODE_TICKVALUE) — стоимость 1 пункта в валюте депозита для 1 лота.


Не пункта, а тика. В общем случае тик может не совпадать с пунктом.

Стоимость пункта:

Lots * MarketInfo(Symbol(),MODE_TICKVALUE) / MarketInfo(Symbol(),MODE_TICKSIZE)

где Lots - объем позиции.

 
PapaYozh:


Не пункта, а тика. В общем случае тик может не совпадать с пунктом.

Во всех практических случаях это совпадает.
 
Andrei01:
Во всех практических случаях это совпадает.


А если не совпадёт, сколько времени убъётся на поиск ошибки?

Делать надо хорошо, плохо - само получится.

 
PapaYozh:


Не пункта, а тика. В общем случае тик может не совпадать с пунктом.

Стоимость пункта:

Lots * MarketInfo(Symbol(),MODE_TICKVALUE) / MarketInfo(Symbol(),MODE_TICKSIZE)

где Lots - объем позиции.

Это именно стоимость пункта - то есть минимальной единицы изменения валюты. https://www.mql5.com/ru/forum/105383

Кстати Ваша формула ошибочна ибо Вы делите на размер пункта то есть получите огромные лоты.

 
Andrei01:

Это именно стоимость пункта - то есть минимальной единицы изменения валюты. 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 лоте

Файлы:
info.mq4  5 kb
Причина обращения: