Насколько я понимаю, для деления целых чисел есть %.
Понятно, что здесь какие-то проблемы с округлением чисел. Но вопрос остается открытым: как, не зная точности делителя, получить правильный результат?
Да вот и я ломаю голову, как добиться округления.
Нужно это для следующего. Необходимо открыть позу с объемом, рассчитанным в процентах от баланса, эквити или свободных средств. Чаще всего результат выходит с огромным количеством точек после запятой. Мне необходимо округлить это значение до ближайшего согласно LOTSTEP. Я делаю так:
Accuracy = A-MathMod(A, LotStep)+LotStep; // округление к большему Accuracy = A-MathMod(A, LotStep); // округление к меньшемув результате, когда A кратно LotStep я получаю значение LotStep. В принципе, можно просто проверять на равенство этих двух значений. Но, опять же, мне неизвестна точность LotStep, чтобы сравнить два вещественных числа. Ее можно вычислить как значение десятичного логарифма, если LotStep является степенью 10, а что делать в случае, если оно равно 0.2, например?
Да вот и я ломаю голову, как добиться округления.
Нужно это для следующего. Необходимо открыть позу с объемом, рассчитанным в процентах от баланса, эквити или свободных средств. Чаще всего результат выходит с огромным количеством точек после запятой. Мне необходимо округлить это значение до ближайшего согласно LOTSTEP. Я делаю так:
в результате, когда A кратно LotStep я получаю значение LotStep. В принципе, можно просто проверять на равенство этих двух значений. Но, опять же, мне неизвестна точность LotStep, чтобы сравнить два вещественных числа. Ее можно вычислить как значение десятичного логарифма, если LotStep является степенью 10, а что делать в случае, если оно равно 0.2, например?extern double Lots=0.1; extern Risk=0; double GetLots(string _Symbol){ double MaxLot=MarketInfo(_Symbol,MODE_MAXLOT); double MinLot=MarketInfo(_Symbol,MODE_MINLOT); double StepLot=MarketInfo(_Symbol,MODE_LOTSTEP); double lot=Lots; if (Risk>0) lot=MathRound(AccountBalance()*Risk/1000/StepLot)*StepLot; lot=MathMax(MathMin(lot,MaxLot),MinLot); return(lot); }Можно примерно так сделать. Размер лота пропорционален шагу изменения. И проверяется что бы был в допустимом диапазоне.
Спасибо, интересный подход.
А при умножении вещественных чисел мы не приобретем ненужные знаки после запятой?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Подскажите, в чем моя ошибка или подвох?
Как же тогда получить правильный результат 0?