MQL4 - automated forex trading   /  

Форум

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

К списку тем Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
69
Berserk 11.09.2006 15:34 

Вопрос к знатокам 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;

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

Бесплатная Groupware для групп разработчиков

Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение.


avatar
1447
Itso 11.09.2006 15:53 

avatar
69
Berserk 11.09.2006 16:11 

Ну-ну :)

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

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

avatar
1447
Itso 11.09.2006 16:54 
Berserk писал (а):

Ну-ну :)

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

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

PointCorrection=MathPow(10.0,DIGITS-4);

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

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

avatar
69
Berserk 11.09.2006 17:22 
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;
Неужто по другому не сделать ?

Злиться нельзя...


avatar
1447
Itso 11.09.2006 19:50 
Цена 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)

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


avatar
69
Berserk 11.09.2006 20:26 
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 нет размера маржи на открытие и его приходится доставать таким образом :(
Или я плохо искал ?
К списку тем  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий