| / | Форум |
|
Berserk
11.09.2006 15:34
Вопрос к знатокам MQL-4. Возникла необходимость вычислить маржу на открытие позиции
в валюте депозита. 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 станет намного проще ставить задачи и контролировать их выполнение. |
|
Itso
11.09.2006 15:53
|
|
Berserk
11.09.2006 16:11
Itso писал (а): http://docs.mql4.com/ru/predefined/variables/point Ну-ну :) Валюта GBPJPY Маржа на открытие лотом 0,1 в Альпари 130,60 $ Выведи мне 130,60 $ через MarketInfo(Symbol(), MODE_POINT)=0,01... Не разобравшись, нехер ссылки тыкать... |
|
Itso
11.09.2006 16:54
Berserk писал (а): Ладно.Itso писал (а): http://docs.mql4.com/ru/predefined/variables/point Ну-ну :) Валюта GBPJPY Маржа на открытие лотом 0,1 в Альпари 130,60 $ Выведи мне 130,60 $ через MarketInfo(Symbol(), MODE_POINT)=0,01... Не разобравшись, нехер ссылки тыкать... Тогда - так: PointCorrection=MathPow(10.0,DIGITS-4); DIGITS тоже нужно поставить как double Offtopic: Berserk=Неистовый? |
|
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;Неужто по другому не сделать ? Злиться нельзя... |
|
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) При кроссов нужно подобрать формулу в зависимосто ит того - какие пары есть. Тут скриптик крутился, который считал цену одного поинта по формулам что выше - только не знаю где пропал. |
|
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 нет размера маржи на открытие и его приходится доставать таким образом :( Или я плохо искал ? |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий