Расчет залоговых средств. В чем ошибка? - страница 2

 
Eugeni Neumoin #:

Получается, что нет возможности в программе правильно рассчитать размер залоговых средств.

Возьмите бесплатно в Маркете какую-нибудь популярную торговую панель. Ее автор должен был этот вопрос досконально изучить на огромном количестве ситуаций у клиентов.

Если будет неправильно работать, то 99%, что нельзя.

 
Alexey Viktorov #:

Возвращает размер свободных средств, которые останутся после открытия указанного ордера по текущей цене на текущем счете.


AccountEquity() — AccountFreeMarginCheck() разве не будет равна марже?

Вчера проверял для 1 лота.

Сейчас проверил для 5 лотов. Результат тот же. Не получается Каменный цветок...

Не равна марже.

 
fxsaber #:

Возьмите бесплатно в Маркете какую-нибудь популярную торговую панель. Ее автор должен был этот вопрос досконально изучить на огромном количестве ситуаций у клиентов.

Если будет неправильно работать, то 99%, что нельзя.

Да у меня что-то вроде торговой панельки. Но в нее встроены 3 индикатора по разметке структуры рынка. Панелька заточена под одну из стратегий, которую используют с третьим индикатором.

Но во всех трех индикаторах такая панелька просто необходима.

Сейчас отлаживаю различные режимы работы. Экстремальные ситуации. Для неэкстремальных режимов она уже отлажена и работает идеально.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Расчет залоговых средств. В чем ошибка?

Eugeni Neumoin, 2024.05.25 05:58

В спецификациях инструментов нашел:

Маржинальные требования:

Процент от номинальной стоимости сделки, выраженный в USD, который будет заблокирован на торговом счёте при открытии позиции.

Маржинальные требования могут меняться в зависимости от размера позиции.

=============================

Получается, что нет возможности в программе правильно рассчитать размер залоговых средств.


Можно проверить ещё такой вариант:

Если открыто 6 лотов и надо открыть ещё 2.5 лота, то получить маржу для позиции 8.5 лотов и вычесть текущий размер маржи. 

Может это и бред, но я проверить не могу.

 
Alexey Viktorov #:

Можно проверить ещё такой вариант:

Если открыто 6 лотов и надо открыть ещё 2.5 лота, то получить маржу для позиции 8.5 лотов и вычесть текущий размер маржи. 

Может это и бред, но я проверить не могу.

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

 
Alexey Viktorov #:


 Крипта в выходные торгуется. 

Сейчас на эфире проверил формулу  AccountEquity() — AccountFreeMarginCheck() .

Получается вообще какой-то бред.

Рассчитал маржу для одного лота.

В спецификации на инструмент это 0.5%.

Получается 18.7447. Открыл одну сделку на 1 лот. Примерно расчетная сумма и получилась. Почему примерно? Когда стал смотреть итоговую сумму на счете, рынок успел сдвинуться.

В программе  AccountEquity()  показывает не то, что было на самом деле.

А вот по формуле  AccountEquity() — AccountFreeMarginCheck() получил значение маржи на 1 лот = 0,00099999..... Это явно отличается от расчетного значения  18.7447 и, тем более, от реально полученного.

Бред.

===============

Задачу, поставленную изначально, я решил чисто математически. Без всяких вычислений маржи. Но тема, поднятая в  этой ветке форума, выявила ПРОБЛЕМУ!!!.

Изначально требовалось вычислить количество лотов, которые можно открыть в противоположную сторону, уже открытым. Для этого не обязательно вычислять маржу. Просто берем разницу между Buy и Sell ордерами.

Разницу между количеством открытых ордеров помноженную на сумму лотов в каждом ордере.

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

============

Для чего все это было затеяно?

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

А в турнирах идет жестокая резня на экстремальных режимах для депозита.

Вот и возникла задача, которую пришлось решать.

 

Предполагал, что формула  AccountEquity() — AccountFreeMarginCheck() поможет в вычислении маржи для крипты у брокеров, у которых MarketInfo(Symbol(),MODE_MARGINREQUIRED)==0.

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

Да и у разных брокеров могут быть разные условия. Универсального решения пока не просматривается.

Сейчас сделал в программе индивидуальный расчет для биткоина и эфира только для форекс клуба. Для остальных монет не стал это делать.

Вычисление размера маржи, фиксируемой при открытии одного ордера, важно для расчета % риска на сделку. 

Если для инструмента MarketInfo(Symbol(),MODE_MARGINREQUIRED)==0, приходится просто задавать принудительно какое-то значение лотности на ордер. 

А когда можно вычислить значение маржи, то можно рассчитать значение лотности для заданного процента риска.

=============

Пока писал это сообщение, придумал решение. Надо сделать еще один параметр, в котором прописывать % маржи на сделку. В этом случае не потребуется вычислять

MarketInfo(Symbol(),MODE_MARGINREQUIRED)
 
Eugeni Neumoin #:

 

Изначально требовалось вычислить количество лотов, которые можно открыть в противоположную сторону, уже открытым. Для этого не обязательно вычислять маржу. Просто берем разницу между Buy и Sell ордерами.

А вот на это вы обращаете внимание?


 
      // определяем возможность открытия встречных ордеров
      double margininit=MarketInfo(Symbol(),MODE_MARGININIT);
      double marginhedget=MarketInfo(Symbol(),MODE_MARGINHEDGED);
      double marginfree=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
      if (marginfree>0 && (margininit>marginhedget || (margininit==0 && marginhedget==0)))
        {
-------
Вот это условие : margininit>marginhedget
Alexey Viktorov #
:

А вот на это вы обращаете внимание?


Конечно, обращаю на это внимание. Где-то в начеле обсуждения был приведен код, в котором это условие учтено.

 
А для брокеров, которые не "берут" маржу для встречных ордеров условие 
margininit==0 && marginhedget==0