Маржа на открытие позиции в валюте депозита

 

Вопрос к знатокам MQL-4.

Возникла необходимость вычислить маржу на открытие позиции в валюте депозита.
Как оказалось, (может, я ошибаюсь!?) стандартной константы в MQL-4 нет...
Нашел следующее решение (работает в Альпари с их нестандартными лотсайзами по 70000 и 200000).
Для лонгов:

  double Lots;
  double TICKVALUE,TICKSIZE,LOTSIZE,ASK,Margin,PointCorrection;
  int    LEVERAGE,DIGITS;

TICKVALUE=MarketInfo(Symbol(), MODE_TICKVALUE);
TICKSIZE=MarketInfo(Symbol(), MODE_TICKSIZE);
LOTSIZE=MarketInfo(Symbol(), MODE_LOTSIZE);
ASK=MarketInfo(Symbol(), MODE_ASK);
DIGITS=MarketInfo(Symbol(), MODE_DIGITS);
LEVERAGE = AccountLeverage();
 
if(DIGITS==5)PointCorrection=10;
if(DIGITS==4)PointCorrection=1;
if(DIGITS==3)PointCorrection=0.1;
if(DIGITS==2)PointCorrection=0.01;
if(DIGITS==1)PointCorrection=0.001;
if(DIGITS==0)PointCorrection=0.0001;
 
Margin=Lots*MathCeil(LOTSIZE/1000000)*100000*ASK*(TICKVALUE*PointCorrection)*(TICKSIZE*PointCorrection)*LEVERAGE*0.1;

Работает, но выглядит громоздко и некрасиво :(
Может кто подскажет более элегантное решение ???

 

Ну-ну :)

Валюта GBPJPY
Маржа на открытие лотом 0,1 в Альпари 130,60 $
Выведи мне 130,60 $ через MarketInfo(Symbol(), MODE_POINT)=0,01...

Не разобравшись, нехер ссылки тыкать...
 
Berserk:

Ну-ну :)

Валюта GBPJPY
Маржа на открытие лотом 0,1 в Альпари 130,60 $
Выведи мне 130,60 $ через MarketInfo(Symbol(), MODE_POINT)=0,01...

Не разобравшись, нехер ссылки тыкать...
Ладно.
Тогда - так:

PointCorrection=MathPow(10.0,DIGITS-4);

DIGITS тоже нужно поставить как double

Offtopic: Berserk=Неистовый?
 
Itso:
Ладно.
Тогда - так:

PointCorrection=MathPow(10.0,DIGITS-4);

DIGITS тоже нужно поставить как double

Offtopic: Berserk=Неистовый?


Насчет степени понятно...
Не нравится конструкция:


Margin=Lots*MathCeil(LOTSIZE/1000000)*100000*ASK*(TICKVALUE*PointCorrection)*(TICKSIZE*PointCorrection)*LEVERAGE*0.1;
Неужто по другому не сделать ?

Злиться нельзя...
 
Цена Lots поинтoв:

(XXXUSD):
PointSize = Lots x LotSize x TickSize

(USDYYY) :
PointSize = Lots x LotSize x TickSize / CurrentQuote(USDYYY)

(XXXYYY):
PointSize = Lots x LotSize x TickSize x BaseQuote(XXXUSD) / CurrentQuote(USDYYY)
PointSize = Lots x LotSize x TickSize / BaseQuote(USDXXX) / CurrentQuote(USDYYY)
PointSize = Lots x LotSize x TickSize x BaseQuote(XXXUSD) x CurrentQuote(YYYUSD)
PointSize = Lots x LotSize x TickSize / BaseQuote(USDXXX) x CurrentQuote(YYYUSD)

При кроссов нужно подобрать формулу в зависимосто ит того - какие пары есть.
Тут скриптик крутился, который считал цену одного поинта по формулам что выше - только не знаю где пропал.
 
Itso:
Цена Lots поинтoв:

(XXXUSD):
PointSize = Lots x LotSize x TickSize

(USDYYY) :
PointSize = Lots x LotSize x TickSize / CurrentQuote(USDYYY)

(XXXYYY):
PointSize = Lots x LotSize x TickSize x BaseQuote(XXXUSD) / CurrentQuote(USDYYY)
PointSize = Lots x LotSize x TickSize / BaseQuote(USDXXX) / CurrentQuote(USDYYY)
PointSize = Lots x LotSize x TickSize x BaseQuote(XXXUSD) x CurrentQuote(YYYUSD)
PointSize = Lots x LotSize x TickSize / BaseQuote(USDXXX) x CurrentQuote(YYYUSD)

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



Цену пункта - то, что ты описал, как PointSize, как раз можно получить через MarketInfo(Symbol(), MODE_TICKVALUE)...
Это значение и используется в приведенной выше формуле.
Интересно, почему в MarketInfo нет размера маржи на открытие и его приходится доставать таким образом :(
Или я плохо искал ?
Причина обращения: