Видимо, temp1 изначально только объявлен, т.е. по умолчанию инициализирован нулём, и обретает ненулевое значение только в случае попадания в тело if(). А Lot вычисляется всегда, вот иногда и попадается нулевой temp1 в знаменателе. Нужно менять логику алгоритма.
Уважаемые программисты, я столкнулся со следующей проблемой:
мне надо запрограммировать формулу Лот=Баланс*процент_риска/макс_убыток
то есть торгуемый лот для следующей сделки равен произведению
текущего баланса счета на процен риска (в виде 0,2) деленый на
максимально убыточную сделку.
код у меня получился следующий
if (temp < -1000)
{
temp1 = MathAbs(temp);
}
Lot = NormalizeDouble(AccountBalance()*0.2/temp1,1);
по умолчанию максимально допустимым убытком принимается -1000$.
но при увеличении лота она будет расти. поэтому размер лота
для следующей сделки должен определяться после закрытия текущей.
дело упрощается тем, что открытие следующей происходит только
после закрытия предыдущей.
при подстановке кода в советник выдается ошибка деления на ноль.
в чем проблема? помогите разобраться. как подставить текущий
баланс и отслеживать, чтоб формула всегда считалась с использованием
максимальной убыточной сделки?
Попробуй объявить temp!=0, или ввести функцию пересчета депо со всеми "+" и "-" с возвращением переменной temp значения нового баланса после всех манипуляций с открытием/закрытием позиций в коде советника и помести выполнение этой функции в советнике до блока расчета лота. Так,на мой взгляд, должен замкнуться круг пересчета и ты не будешь получать temp=0. Если не прав, поправьте логику.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые программисты, я столкнулся со следующей проблемой:
мне надо запрограммировать формулу Лот=Баланс*процент_риска/макс_убыток
то есть торгуемый лот для следующей сделки равен произведению текущего баланса счета на процен риска (в виде 0,2) деленый на максимально убыточную сделку.
код у меня получился следующий
if (temp < -1000)
{
temp1 = MathAbs(temp);
}
Lot = NormalizeDouble(AccountBalance()*0.2/temp1,1);
по умолчанию максимально допустимым убытком принимается -1000$. но при увеличении лота она будет расти. поэтому размер лота для следующей сделки должен определяться после закрытия текущей. дело упрощается тем, что открытие следующей происходит только после закрытия предыдущей.
при подстановке кода в советник выдается ошибка деления на ноль. в чем проблема? помогите разобраться. как подставить текущий баланс и отслеживать, чтоб формула всегда считалась с использованием максимальной убыточной сделки?