Jump to content
Sign in to follow this  
Koha

Как посчитать объем всех открытых ордеров в советнике?

Recommended Posts

Koha

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

Share this post


Link to post
Share on other sites
AntFX

Зачем Вам считать ИКП?


1

Share this post


Link to post
Share on other sites
Ivan Gurov

double MyVolume()
{
  double v = 0;
  int i, k = OrdersTotal();
  
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) v+=OrderLots();
  }
  
  return(v);
}
  • Thanks 1

Share this post


Link to post
Share on other sites
AntFX

Или так - тогда это будет нетто-объем всех рыночных ордеров (селл берется с обратным знаком и вычитатся из бая).

double MyVolume(string symbol="")
{
  double v = 0;
  
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS) && (symbol=="" || OrderSymbol()==symbol) && OrderType()<2){
      v+=(OrderLots()*(OrderType()==OP_BUY?1:-1));
    }
  }
  
  return(v);
}
Edited by AntFX
  • Thanks 1

1

Share this post


Link to post
Share on other sites
Ivan Gurov

Или так - тогда это будет нетто-объем всех рыночных ордеров (селл берется с обратным знаком и вычитатся из бая).

double MyVolume(string symbol="")
{
  double v = 0;
  
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS) && (symbol=="" || OrderSymbol()==symbol) && OrderType()<2){
      v+=(OrderLots()*(OrderType()==OP_BUY?1:-1));
    }
  }
  
  return(v);
}

 

Кстати, да. =)  Такой вариант правильнее. =)

Я просто навскидку накидал что то.. Не подумал.. =)

Share this post


Link to post
Share on other sites
Koha

Зачем Вам считать ИКП?

Для более качественной оценки работы советника. 

Share this post


Link to post
Share on other sites
AntFX

Для более качественной оценки работы советника. 

А конкретнее?


1

Share this post


Link to post
Share on other sites
Koha

А конкретнее?

Раньше я смотрел только на возможность заточить советника на максимизацию прибыли. Теперь появились такие обстоятельства как торговое плечо 1:100, оно же на выходные 1:30, обязательства погасить отрицательный баланс в случае такового. Считаете что игнорировать ИКП в такой ситуации разумно? Я так не считаю.

Share this post


Link to post
Share on other sites
AntFX
Считаете что игнорировать ИКП в такой ситуации разумно? Я так не считаю.

Тогда Вам нужно суммировать не объемы ордеров, а маржу, использованную всеми открытыми ордерами, с помощью функции OrderMargin() в цикле, аналогичном приведенному выше (только без разделения на buy и sell). Предположим, у Вас получилось 5000, средства в этот момент 10000, а плечо 1:100. Из этого следует, что ИКП в этот момент составляет 5000*100/10000=50.

Edited by AntFX
  • Thanks 1

1

Share this post


Link to post
Share on other sites
Koha

Тогда Вам нужно суммировать не объемы ордеров, а маржу, использованную всеми открытыми ордерами, с помощью функции OrderMargin() в цикле, аналогичном приведенному выше (только без разделения на buy и sell). Предположим, у Вас получилось 5000, средства в этот момент 10000, а плечо 1:100. Из этого следует, что ИКП в этот момент составляет 5000*100/10000=50.

Маржа при различном уровне плеча разная. Мне нужно было просчитать ИКП. Зная текущее ИКП посчитать максимальное это всего лишь одна строчка кода через оператор ЕСЛИ.

Edited by Koha

Share this post


Link to post
Share on other sites
AntFX
Маржа при различном уровне плеча разная. Мне нужно было просчитать ИКП. Зная текущую ИКП посчитать максимальную это всего лишь одна строчка кода через оператор ЕСЛИ.

Для определения плеча используйте функцию AccountLeverage(), если оно не является константой. Без информации об установленном плече Вы ИКП не посчитаете. Я уже дал Вам точную формулу для расчета ИКП.

Edited by AntFX

1

Share this post


Link to post
Share on other sites
Koha

Для определения плеча используйте функцию AccountLeverage(), если оно не является константой. Без информации об установленном плече Вы ИКП не посчитаете. Я уже дал Вам точную формулу для расчета ИКП.

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

Share this post


Link to post
Share on other sites
AntFX
Не понимаю почему установленное плечо влияет на подсчет используемого плеча.

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

Edited by AntFX

1

Share this post


Link to post
Share on other sites
Koha

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

Номинальную цену лота легко определить по Ask если базовый актив доллар, т.е. по GPB/USD по Ask текущую цену лота посчитать легко, тогда как EUR/GPB по Ask посчитать задача крайне сложная при долларовом депозите.

Share this post


Link to post
Share on other sites
AntFX

 

 

Номинальную цену лота легко определить по Ask если базовый актив доллар, т.е. по GPB/USD по Ask текущую цену лота посчитать легко, тогда как EUR/GPB по Ask посчитать задача крайне сложная при долларовом депозите.

Ок, считайте по Ask. )


1

Share this post


Link to post
Share on other sites
NightFox

Тогда Вам нужно суммировать не объемы ордеров, а маржу, использованную всеми открытыми ордерами, с помощью функции OrderMargin() в цикле, аналогичном приведенному выше (только без разделения на buy и sell). Предположим, у Вас получилось 5000, средства в этот момент 10000, а плечо 1:100. Из этого следует, что ИКП в этот момент составляет 5000*100/10000=50.

А можно ваш вариант увидеть кодом ?

 

И еще у меня маржа с 2000 снижается до 200,  подскажите как подсчитать  сколько будет задействовано маржи и сколько останется свободных средств.

Допустим у меня 5000 баланс, просадка 1500, маржа 60, свободных средств 3500.

Edited by NightFox

Share this post


Link to post
Share on other sites
AntFX

 

 

А можно ваш вариант увидеть кодом ?

Да в общем-то цикл и не нужен, ИКП можно получить так:

 

double leverage_used = (AccountMargin() * AccountLeverage()) / AccountEquity()

 

 

 

И еще у меня маржа с 2000 снижается до 200,  подскажите как подсчитать  сколько будет задействовано маржи и сколько останется свободных средств. Допустим у меня 5000 баланс, просадка 1500, маржа 60, свободных средств 3500.

Задействованная маржа не меняется от просадки, меняются только средства. И как итог отношение средств и маржи.


1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×