Курсы пересчета в валюту депозита

 

Уважаемые разработчики!

Скажите, пожалуйста, какие курсы используются в МQL4 функции OrderProfit() для пересчета в валюту депозита (Биды или Аски?)

в следующих случаях:

1) Валюта депозита не входит в валютную пару, по которой выставлен ордер

2) Валюта депозита совпадает с первой валютой пары, по которой выставлен ордер

3) Нет прямой котировки для пересчета валюты котировки пары, по которой выставлен ордер, в валюту депозита и надо использовать обратные значения

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

 

MarketInfo(Symbol, MODE_TICKVALUE) дает стоимость одного пункта изменения цены (MarketInfo(Symbol,MODE_TICKSIZE) - как правило равный Point он же MarketInfo(Symbol,MODE_POINT) в валюте депозита

MarketInfo() можно использовать, когда надо "посмотреть" на параметры другого символа

 
EverAlex:

MarketInfo(Symbol, MODE_TICKVALUE) дает стоимость одного пункта изменения цены (MarketInfo(Symbol,MODE_TICKSIZE) - как правило равный Point он же MarketInfo(Symbol,MODE_POINT) в валюте депозита

MarketInfo() можно использовать, когда надо "посмотреть" на параметры другого символа


Мне интересна формула расчета, а не значение курса пересчета (его то как раз легко выяснить). Ну например, валюта депозита USD, пара AUDCAD, покупаю 1 лот по 1.01988, продаю по 1.02988. Прибыль составила 1000CAD. По какому курсу OrderProfit() пересчитывает 1000CAD в доллары?

Надо поделить на Bid или на Ask текущей котировки USDCAD? А если по ордеру не прибыль, а убыток?

Вопрос именно про это)

 

Для BUY: ProfitPoints = (OrderClosePrice() - OrderOpenPrice())/Point; // сколько пунктов заработали или потеряли.

Для SELL: (ProfitPoints = OrderOpenPrice() - OpenClosePrice())/Point;

N = ProfitPoints / OrderProfit(); // N = сколько пунктов в 1 единице прибыли/убытка в базовой валюте ордера (т.е. метры поделили на деньги, получили сколько за 1 ед. валюты можно купить метров)

ProfitBablo = ProfitPoints * N * MarketInfo(Symbol, MODE_TICKVALUE); // PofitBablo = N пунктов, умноженное на стоимость пункта в валюте депозита (т.е. пересчитали метры в валюту депозита)

Т.е. TICKVALUE - это коэффициент пересчета одного пункта символа из базовой валюты ордера в валюту депозита.


Купили 100м кабеля за 137USD (прошли 100пунктов и заработали $137. Значит $1 = 0.7299 пунктов).

TICKVALUE 1.37 (1e = $1.37USD)

Значит, для покупки 100м кабеля нужно 100 евро (100пт*0.7299*1.37=100е)

 
EverAlex:

для BUY: ProfitPoints = OrderClosePrice() - OrderOpenPrice(); // сколько пунктов заработали или потеряли

для SELL: ProfitPoints = OrderOpenPrice() - OpenClosePrice();

N = ProfitPoints / OrderProfit(); // N = сколько пунктов в 1 единице прибыли/убытка в базовой валюте ордера (т.е. метры поделили на деньги, получили сколько за 1 ед. валюты можно купить метров)

ProfitBablo = ProfitPoints * N * MarketInfo(Symbol, MODE_TICKVALUE); // PofitBablo = N пунктов, умноженное на стоимость пункта в валюте депозита (т.е. пересчитали метры в валюту депозита)

Т.е. TICKVALUE - это коэффициент пересчета одного пункта символа из базовой валюты ордера в валюту депозита.


Купили 100м кабеля за 137USD (прошли 100пунктов и заработали $137).

TICKVALUE 1.37 (EUR/USD)

Значит, для покупки 100м кабеля нужно 100 евро


Вопрос не про это) Вопрос про то, каким образом OrderProfit(), MarketInfo() и прочие встроенные функции выбирают курс пересчета в валюту депозита, а не его текущее значение.

Ну вот в вашем примере, полученное вами значение 1.37 окажется равным текущему Биду или текущему Аску котировки EURUSD?

 

Да хрен его знает Bid или Ask будет браться ))

А если валюта депозита - рубли, то там вообще цепочка получается.

И на каждом этапе пересчета могут браться Ask и Bid.

Для пары AUDCAD CAD пересчитается в USD, потом USD пересчитаются в RUR.

И есть подозрение, что курс USD не будет одинаковым.

Есть простор для ваших экспериментов ))

На форуме была целая ветка по этому поводу (ищите по "TICKVALUE").


PS: в формуле забыл ProfitPoints (можно ProfitBablo) разделить на Point (для пересчета дельты цены в пункты, т.к. TICKVALUE - это цена за пункт).