Как я устал - ... :) Решетов, Вы что не догоняете, что это уже прочитал . :) И не раз. И нет там этих формул и даже более того там чушь написана, скажу я по секрету. :)
Прежде чем ловить котяру в светлой комнате, необходимо знать ответ на:
что делать когда валюта депо не совпадает с валютой котировки:
- операция купли продажи, и соотв. учёт направления бид\аск
- тупой пересчет по средней, как например по курсу ММВБ на день совершения операции
- свой вариант
;) удачи в поисках!!!
Ранее переделал функцию из CodeBase для рассчета маржи для Buy и Sell. Так как тоже обратил внимание, что считается только по Bid...
//| Возвращает сумму залога за указанный лот //| _Ask = true - (MODE_ASK)маржа для покупки считается //| = false (MODE_BID)маржа для продажи считается double MarginCalculate(string sy ="0" , double lot= 1, bool _Ask = true) { if (sy=="0") sy=Symbol(); string first = StringSubstr(sy,0,3); // первый символ, например EUR string second = StringSubstr(sy,3,3); // второй символ, например USD string currency = AccountCurrency(); // валюта депозита, например USD double leverage = AccountLeverage(); // кредитное плечо, например 100 // размер контракта, например 100000 double contract = MarketInfo(sy, MODE_LOTSIZE); double priceASK_BID = MarketInfo(sy, iif (_Ask, MODE_ASK, MODE_BID) ); //---- допускаем только стандартные форексные символы XXXYYY if(StringLen(sy) != 6) { Print("MarginCalculate: '",sy,"' must be standard forex symbol XXXYYY"); return(0.0); } //---- проверка наличия данных if(priceASK_BID <= 0 || contract <= 0) { Print("MarginCalculate: no market information for '",sy,"'"); return(0.0); } //---- проверяем самые простые варианты - без кроссов if(first == currency) return(contract*lot / leverage); // USDxxx if(second == currency) return(contract*priceASK_BID*lot / leverage); // xxxUSD //---- проверяем обычные кроссы, ищем прямое преобразование через валюту депозита string base = currency + first; // USDxxx if(MarketInfo(base, MODE_BID) > 0) return(contract / MarketInfo(base, iif (_Ask, MODE_ASK, MODE_BID))*lot / leverage); //---- попробуем наоборот base = first + currency; // xxxUSD if(MarketInfo(base, MODE_BID) > 0) return(contract*MarketInfo(base, iif (_Ask, MODE_ASK, MODE_BID))*lot / leverage); //---- нет возможности прямого перерасчета Print("MarginCalculate: can not convert '",sy,"'"); return(0.0); }//end_funcПроверьте, может ошибся. В тестере не работает однозначно.
Гляньте вот такой скрипт кстати -
string cs[]={"EURUSD","USDJPY","EURJPY","GBPUSD"}; int start() { for ( int i=0;i<ArraySize(cs);i++){ double ms = AccountFreeMarginCheck (cs[i], OP_SELL, 1 ); double mb = AccountFreeMarginCheck (cs[i], OP_BUY , 1 ); if ( ms != mb ) Print(cs[i]," != ",DoubleToStr(ms,9),",",DoubleToStr(mb,9)); else Print(cs[i]," == ",DoubleToStr(ms,9),",",DoubleToStr(mb,9)); } }
И вот кстати и документы
http://www.fcsm.ru/catalog.asp?ob_no=3650
И вот по гуглу - Гугл поиск - site:www.fcsm.ru маржа расчет
Как я устал - ... :) Решетов, Вы что не догоняете, что это уже прочитал . :) И не раз.
А мне это нужно, догонять или не догонять? Мне плевать с высокой колокольни, кто там устал или запарился.
Просили ссылку, получите и распишитесь в получении.
Мое дело - предложить, Ваше право - отказаться.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Киньте ссылки на ВЫВОД формул расчета маржи и прибыли при маржинальной торговле валютами.
Интересует ТОЛЬКО в терминах
B - базовая валюта пары
C - валюта котировки
D - валюта депо
Ask_BC
Bid_BC
SALE
------
1) B->C
2) C->B
3) Profit = B1-B2
4) Profit_D = ????
BUY
-----
1) C->B
2) B->C
3) Profit = C1-C2
4) Profit_D = ????
MARGIN
------------
MB = VB / Плечо --
MD = ????
***************
Ну вот примерно так, как там все считается я знаю, интересует как эит форумлы получаеются. А то :) опять не сходится. :)