Как получить программно "Процент маржи" - страница 8

 
Alexey Viktorov:

Ну и гемор... Проверь как у тебя считает.

GOLD у метаквотов (процент маржи - 1, плечо -300), CFD

2017.06.05 21:57:42.015 Script gold_test_vik2 GOLD,H4: removed
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: uninit reason 0
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: ******** AccountMargin = 19188.75 USD
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: ******** Процент маржи 300 Маржа ордера GOLD 0.05 = 19188.75
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: initialized

На кроссах и при локированных позициях расчеты также неверны, но лично мне это не важно, и я вижу что в вашем скрипте это просто не обрабатывается... Не думаю что стоит тратить на это усилия, если все сложности пока в любом случае связаны c расчетом процента маржи и залога хотя бы одного ордера по CFD. 

p.s. а еще мне начинает казаться, что совсем неслучайно разработчики не дали прямого доступа к проценту маржи :D

 

Может поделишься опытом как на MetaQuote-Demo открыть демку с плечом 300? У меня максимум 100...


GOLD на MetaQuote-Demo

2017.06.06 09:07:32.780 Data Folder: D:\MetaTrader 4\Programming
2017.06.06 09:07:32.780 Windows 7 Home Premium (x64 based PC), IE 11.00, UAC, 4 x AMD FX-4170 Quad-Core Processor , RAM: 10402 / 12255 Mb, HDD: 31535 / 244198 Mb, GMT+03:00
2017.06.06 09:07:32.780 MetaTrader 4 build 1090 started (MetaQuotes Software Corp.)

Распечатка

2017.06.06 09:09:25.812 test GOLD,H1: ******** AccountMargin = 160.95 USD
2017.06.06 09:09:25.812 test GOLD,H1: ******** Процент маржи 1 Маржа ордера GOLD 0.05 = 160.9525

Снимки



 
Alexey Viktorov:

Может поделишься опытом как на MetaQuote-Demo открыть демку с плечом 300? У меня максимум 100...


уупс... запутался в терминалах с этими тестами. Эта была инста, в остальном все правильно, GOLD, процент маржи  - 1, плечо 300, скрины выше...

сори!

 
ir0407:
Процент маржи - это не высчитанный залог. Это всего лишь один из компонентов для расчета залога. А результат этого расчета(по формулам из таблицы) возвращается в валюте маржи, которую потом(если она отличается от валюты депо) нужно конвертировать в валюту депо.

И вот это у меня тоже в голове всё никак не укладывается. Например берем формулу:

Lots*Contract_Size/Leverage

Где, Lots - это у нас лот в базовой валюте инструмента и контракт - также в базовой, а затем если нужно еще и на курс умножаем базовой валюты к валюте котировки. И при все при этом результат получаем в валюте маржи. Как так? 

 
K-2SO:

И вот это у меня тоже в голове всё никак не укладывается. Например берем формулу:

Где, Lots - это у нас лот в базовой валюте инструмента и контракт - также в базовой, а затем если нужно еще и на курс умножаем базовой валюты к валюте котировки. И при все при этом результат получаем в валюте маржи. Как так? 

Эта формула

Lots*Contract_Size/Leverage

годится для расчётов маржи валют USD***


Для начала определяется какая нужна цена для перевода в валюту депозита.

Если название инструмента начинается с валюты депозита, в частном случае USD, то цена не учитывается

Если ордер OP_BUY то нужна цена Bid

Если ордер OP_SELL то Ask

double price = stringFind == 0 ? 1 : type%2 == OP_BUY ? bid : ask;
percentage = NormalizeDouble(
                             margin          // Маржа получена в валюте депозита с учётом плеча
                           /(contractSize    // Размер контракта в базовой валюте
                            *price           // Умножаем на текущую цену и получаем в валюте депозита
                            /100)            // Это для того чтобы коэффициент перевести в проценты
                           *(calcMode == 0 ? leverage : 1) // Это получено методом научно-технического тыка.
                                    // Если способ расчёта 0 - Forex; то надо учесть плечо
                                    //                     1 - CFD; то плечо не учитывается
                                    //                     2 - Futures; 3 - CFD на индексы НЕ проверялись, их у меня нету...
                           , 0);
orderMargin = (orderLots         // правильно, в базовой валюте
              *contractSize      // и это тоже в базовой
              *orderOpenPrice    // а вот тут переводим в валюту депозита
              *percentage/100)   // у меня слов не хватает чтобы объяснить что это такое, но видимо очень нужное.
             /(calcMode == 0 ? leverage : 1);  // Это тоже получено методом научно-технического тыка.

Надеюсь что всё понятно объяснил...

 
Alexey Viktorov:

Надеюсь что всё понятно объяснил...

эмм... мне кажется мы о разных вещах опять. Я просто попутно решил попробовать уточнить не сам метод подсчета маржи (не сами вычисления), а как так получается, что на выходе формулы расчета маржи, где мы практически не работаем с валютой маржи, мы получаем результат именно в валюте маржи. Во всяком случае так я это понял из сообщения ir0407. И поэтому и привел саму простую формулу расчета, где еще нет учета котировок...

Касательно остального (расчетов методом научного тыка), то я как бы тоже уже все это перепробовал, но замечу, что единого решения до сих не найдено. Я перепутал брокеров, но результаты-нет, то есть на инсте ваш последний вариант при указанных выше параметрах, все также выдает космические цифры:  https://www.mql5.com/ru/forum/193833/page8#comment_5243991

p.s. но за комменты спасибо! Во всяком случае  понятен ход мышления,  описанных вами расчетов)

 
K-2SO:

эмм... мне кажется мы о разных вещах опять. Я прост попутно решил попробовать уточнить не сам метод подсчета маржи (не сами вычисления), а как так получается, что на выходе формулы расчета маржи, где мы практически не арботаем с валютой маржи, мы получаем результат именно в валюте маржи. Во всяком случае так я это понял из сообщения ir0407. И поэтому и привел саму простую формулу расчета, где еще нет учета котировок...

Касательно остального (расчетов методом научного тыка), то я как бы тоже уже все это перепробовал, но замечу, что единого решения до сих не найдено. Я перепутал брокеров, но результаты-нет, то есть на инсте ваш последний вариант при указанных выше параметрах, все также выдает космические цифры:  https://www.mql5.com/ru/forum/193833/page8#comment_5243991

p.s. но за комменты спасибо! Во всяком случае  понятен ход мышления,  описанных вами расчетов)

На инсте я даже демку не хочу открывать. Если не затруднит, в дебагере можешь показать какие промежуточные значения получаются. Как на моём скрине


 
Alexey Viktorov:

На инсте я даже демку не хочу открывать. Если не затруднит, в дебагере можешь показать какие промежуточные значения получаются. Как на моём скрине



И опять мой косяк! Видимо когда разбирал как работает ваш код, кое что изменял в нем (забыл вернуть), поэтому и выдало такую ошибку. Сейчас (на всякий случай) заново скопировал оригинал - верно и на инсте считает. Потестирую тогда еще у других брокеров. 
 

Снимаю шляпу, у вас почти получилось! У всех трех ранее рассматриваемых брокеров с разным процентом маржи, расчет для золота (для ордеров в одном направлении) верен.

Но вот с экзотикой скрипт все еще не справляется. Остановился вот на брокере fxcm. Процент маржи для золота 70000, для обычных валютных пар 130, валюта маржи походу везде USD. И нигде ничто не считается корректно! (. Я сам к нему уже два дня ключ ищу и собственно в результате этого и ищу теперь ответ на вопрос, как так получается что в результате расчетов по базовым валютам и их курсов с валютами котировок, мы получаем валюту маржи... может дело в этом, а может и в том, что у этого брокера процент маржи учитывается даже для обычных валютных пар.

Здесь можно скачать терминал ru.files.fm/u/xfezz883#_   , распаковать, запустить по экзешнику, завести демку...

 
K-2SO:

Снимаю шляпу, у вас почти получилось! У всех трех ранее рассматриваемых брокеров с разным процентом маржи, расчет для золота (для ордеров в одном направлении) верен.

Но вот с экзотикой скрипт все еще не справляется. Остановился вот на брокере fxcm. Процент маржи для золота 70000, для обычных валютных пар 130, валюта маржи походу везде USD. И нигде ничто не считается корректно! (. Я сам к нему уже два дня ключ ищу и собственно в результате этого и ищу теперь ответ на вопрос, как так получается что в результате расчетов по базовым валютам и их курсов с валютами котировок, мы получаем валюту маржи... может дело в этом, а может и в том, что у этого брокера процент маржи учитывается даже для обычных валютных пар.

Здесь можно скачать терминал ru.files.fm/u/xfezz883#_   , распаковать, запустить по экзешнику, завести демку...

Кроссы посчитать не проблема. Просто надо брать котировку по которой переводится валюта маржи в валюту депозита.

Например EURJPY price

double price = stringFind == 0 ? 1 : type%2 == OP_BUY ? bid : ask;

если депозит в USD, надо считать по EURUSD. А CADJPY считать по USDCAD. Тут надо посмотреть как складывать валюту депозита с валютой маржи, не вбивать-же тупо списком.

Да и встречные не особо затруднительно имея MarketInfo(symbol, MODE_MARGINHEDGED). Единственная проблема, это сначала надо найти встречные, а дальше разложить часть встречными, а остаток по полной...

В общем, от всего написанного я вижу пользу только в том, что при рискованной стратегии можно заранее узнать маржу которая будет взята когда активируется отложка и чтобы не нарваться на ошибку вовремя удалить отложку если средств не хватит. Когда-то я боролся с этим при размещении советника в маркет.