Расчеты стоимости пунктов прямых, обратных и кроссовых пар

 

Всем привет!

Задача вроде тривиальная, но уже изломал голову. Поясню на примере, чтобы было проще. Возьмем три пары: EUR/USD, USD/JPY и EUR/JPY (обратная, прямая и кроссовая относительно USD). Обозначим их текущие котировки как x1, x2 и x3 соответственно (далее все тоже соответственно). Обозначим как v1, v2 и v3 объемы сделок по этим инструментам. Как p1, p2 и p3 размер 1 пункта пары (0.00001, 0.01 и 0.01). Как s1, s2 и s3 стоимость пункта пары. Выпишем формулы расчета стоимости 1 пункта каждой пары:

Для обратной (EUR/USD) s1 = p1*v1

Для прямой (USD/JPY) s2 = p2*v2/x2

Для кроссовой (EUR/JPY) s3 = p3*v3*x1/x3

Пусть задан объем v1. Задача рассчитать объемы v2 и v3 такие, чтобы стоимости пунктов по всем парам были равны. Напрямую вроде как нельзя приравнять s1=s2=s3, потому что для s1 пункт в 5 знаке, а для s2 и s3 во втором. Пробовал всякие пропорции добавлять уже в тупую типа  s1=s2*p1/p2=s3*p1/p3 или наоборот s1=s2*p2/p1=s3*p3/p1. Везде при расчетах получаются огромные объемы v2 и v3. Туплю явно. Задача тривиальная, но не могу найти подводный камень. Подскажите, как объемы v2 и v3 правильно посчитать?

Заранее спасибо! 

 

Сначала одно замечание, а потом если найду свои записи дам формулу (если никто не поможет).

Если котировка EURUSD 5 знаков, то USDJPY и EURJPY будут 3 знака. Или это спец.ДЦ какое-то?

 
Alexey Viktorov:

Сначала одно замечание, а потом если найду свои записи дам формулу (если никто не поможет).

Если котировка EURUSD 5 знаков, то USDJPY и EURJPY будут 3 знака. Или это спец.ДЦ какое-то?

Да, правильно;) А я уже нашел, в чем тупил) Нужно было и правда напрямую приравнять s1=s2=s3, но полученные v2 и v3 я забывал делить на размер 1 лота (100000). Так что спасибо, но вопрос снят)
 
Я надысь вечером в уме баксойену пробовал п. посчитать. Понятно, что 1/100, но заколдобило.)
 
Yuriy Asaulenko:
Я надысь вечером в уме баксойену пробовал п. посчитать. Понятно, что 1/100, но заколдобило.)
На 1/100 умножать конечно можно, но это не универсальная формула. Так, как я написал, вроде универсально выходит.
 
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE_LOSS)
 
Aliaksandr Yemialyanau:
Интересная функция, не попадал еще на нее) Спасибо! Но, в справке по mql4 написано, что SYMBOL_TRADE_TICK_VALUE_LOSS не поддерживается. Я хоть и не написал этого, но про три пары я упомянул. Никакой советник без тестирования невозможен. А в тестере мультивалютное (а именно такой советник я пишу) тестирование невозможно стандартными средствами. То есть стандартные функции будут работать только для того символа, на котором запущено тестирование
 
gammaray:
Интересная функция, не попадал еще на нее) Спасибо! Но, в справке по mql4 написано, что SYMBOL_TRADE_TICK_VALUE_LOSS не поддерживается. Я хоть и не написал этого, но про три пары я упомянул. Никакой советник без тестирования невозможен. А в тестере мультивалютное (а именно такой советник я пишу) тестирование невозможно стандартными средствами. То есть стандартные функции будут работать только для того символа, на котором запущено тестирование
Думал речь о MQL5. В любом случае, а тем более для мультивалютников, лучше перейти на пятый метатрейдер - там и возможностей языка больше и тестер лучше. 
 
Aliaksandr Yemialyanau:
Думал речь о MQL5. В любом случае, а тем более для мультивалютников, лучше перейти на пятый метатрейдер - там и возможностей языка больше и тестер лучше. 
Язык там очень как-то пугает (одна команда закрытия ордера чего стоит))). Правда смотрел довольно поверхностно. А чем там тестре лучше, если вкратце?
Причина обращения: