Лот в % от депозита. - страница 2

 
Nickolay72:
  Помогите плиззз.Как задать в роботе размер лота,равным проценту от депозита?

1. Определяемся с депозитом: баланс, эквити, свободные средства, соответственно функции для их определения AccountBalance(), AccountEquity(), AccountFreeMargin(). Скорее подойдет AccountFreeMargin().

2. Рассчитываем: lots=AccountFreeMargin()/1000.0*(Risk/100.0); // Risk - собственно параметр в процентах

3. Нормализуем: lots=NormalizeDouble(lots,n); // n - количество знаков после запятой у лота. Есть и более универсальный метод нормализации лота, но это самый простой, для наглядности.

Это самый просто метод расчета лота.

Еще можно с учетом залоговых требований. Например, если плечо 200, то с депозитом 1000 можно открыть 1 лот. Если же плечо 100, то можно открыть только 0.7. Если с учетом залоговых требований (плеча), то с плечом 200 лот 1 будет означать 100%, а с плечом 100 - 0.7 лотов будет соответствовать 100%. Кому-то нравится так, изредка, но в основном нет. Средства необходимые для открытия 1 лота определяются функцией MarketInfo(Symbol(),MODE_MARGINREQUIRED); Значит делим средства на значение этой функции и узнаем сколько лотов всего можно открыть - это 100%, от него отсчитываем нужный процент. Не забываем нормализовать.    

 
интересный алгоритм.
 
Nickolay72:
  Помогите плиззз.Как задать в роботе размер лота,равным проценту от депозита?

немного отвлекаясь, поучительная задачка :

- имеется советник дающий 55% успешных сделок при фиксированных небольших TP=SL

- через сколько сделок депо удвоится если входить по 1% от депо?

- как изменится депо через 100 сделок ??

 

И снова здравствуйте.Проблема с определением лота существует.Вот такой код:

 bool ModLots()

{

 if(OrdersHistoryTotal()==0)

 {

  double FreeMarg =AccountFreeMargin();

  double One_Lot =MarketInfo(NULL,MODE_MARGINREQUIRED);

  double Step =MarketInfo(NULL,MODE_LOTSTEP);

  double Min_Lot =MarketInfo(NULL,MODE_MINLOT);

  double Max_Lot =MarketInfo(NULL,MODE_MAXLOT);

  double lot =MathFloor(FreeMarg*Risk/100/One_Lot/Step)*Step;

  if(lot<Min_Lot) Lot=Min_Lot;

  if(lot>Max_Lot) Lot=Max_Lot;

 }

 return(true);

}

Все остальные функции советника работают.Компилятор не ругается, при отладке Лот дает 0.0 ,в тестере выскакивает:" invalid lots amount for OrderSend function ".Подскажите где проблема?Голову уже сломал,это уже последний вариант кода определения лота,и все не работает.


 
Maxim Kuznetsov:

немного отвлекаясь, поучительная задачка :

- имеется советник дающий 55% успешных сделок при фиксированных небольших TP=SL

- через сколько сделок депо удвоится если входить по 1% от депо?

- как изменится депо через 100 сделок ??

Нет такого понятия депо. Есть баланс и средства )) Надо уточнить понятия.

И определить, сколько позиций разрешено открывать одновременно. 

 
bool ModLots()
{
 if(OrdersHistoryTotal()==0)
 {
  string Symb =Symbol();
  double FreeMarg =AccountFreeMargin();
  double One_Lot =MarketInfo(NULL,MODE_TICKVALUE);
  double Step =MarketInfo(NULL,MODE_LOTSTEP);
  double Min_Lot =MarketInfo(NULL,MODE_MINLOT);
  double Max_Lot =MarketInfo(NULL,MODE_MAXLOT);
  double lot =MathFloor((FreeMarg*Risk/100/One_Lot/Step)*Step);
  if(lot<Min_Lot) Lot=Min_Lot;
  if(lot>Max_Lot) Lot=Max_Lot;
 }

 return(true);

Вот так вот правильно.Работет.Но в тестере ошибка 134.Не пойму как исправить.На евро-долларе при 1000 в кармане выдает 25.0 лотов,хотя на калькуляторе получается 0.25,как и нужно.Где косяк,как получить правильное значение в советнике??? 

 
Alexey Volchanskiy:

Нет такого понятия депо. Есть баланс и средства )) Надо уточнить понятия.

И определить, сколько позиций разрешено открывать одновременно. 

от AccountBalance() конечно..Ещё можно помянуть что спред учтён в отношении SL=TP.

задача элементарная - не стоит проявляться в критике постановки :-) EA дожидается ему ведомых условий и открывает ордер по инструменту и получает или +-сколько-то пунктов. Причём + с большей вероятностью. И снова начинает ждать неких условий.

 
Maxim Kuznetsov:

от AccountBalance() конечно..Ещё можно помянуть что спред учтён в отношении SL=TP.

задача элементарная - не стоит проявляться в критике постановки :-) EA дожидается ему ведомых условий и открывает ордер по инструменту и получает или +-сколько-то пунктов. Причём + с большей вероятностью. И снова начинает ждать неких условий.

Задачу по программированию всегда надо описывать четко и однозначно, не должно возникать двояких толкований. Вот девушке по ушам ездить - тут как раз все наоборот, должно быть заложено несколько скрытых вариантов, она сама интуитивно выберет нужный )) 
 
Alexey Volchanskiy:
Задачу по программированию всегда надо описывать четко и однозначно, не должно возникать двояких толкований. Вот девушке по ушам ездить - тут как раз все наоборот, должно быть заложено несколько скрытых вариантов, она сама интуитивно выберет нужный )) 
это задача по элементарной математике :-)
 
Как здесь мальчики на форуме изъясняются, все блондинки мира отдыхают.
Причина обращения: