Переменная BestOd=OderPluseCount/OderTotal типа double, остальные int.
То есть, как только встречается значение меньше 1, то автоматом компилятор превращает его в 0... Последние два выражения из констант вообще удивительные результаты дают - вроде, одно и тоже, а нет )))
Пробовал разные подстановки, - все, что больше 1 имеет корректную дробную часть.
Переменная BestOd=OderPluseCount/OderTotal типа double, остальные int.
То есть, как только встречается значение меньше 1, то автоматом компилятор превращает его в 0... Последние два выражения из констант вообще удивительные результаты дают - вроде, одно и тоже, а нет )))
Пробовал разные подстановки, - все, что больше 1 имеет корректную дробную часть.
Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме:
Но тип double по этой схеме самый старший. А у меня были оба int. Поэтому и результат целочисленный. Введение константы старшего типа (double, float), преобразовал все int к нему.
Век живи, - век учись, а в документацию заглядывай )))
Как в советнике, который перебирает и модифицирует открытые позиции, сделать так, что бы он при очередном проходе не модифицировал повторно те ордера, которые прошли модификацию. Как то их надо "помазать"
Всем Доброго времени суток!
Мозг припух; в документации ответа не нашел, но может кто сталкивался. Вот такая строчка в советнике (доля положительных сделок):
Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);
Выдает в журнал (например):
3/6=0.00=0 0 40
При этом если решение от 1:
3/3=1.00=1 0 40
Переменная BestOd=OderPluseCount/OderTotal типа double, остальные int.
То есть, как только встречается значение меньше 1, то автоматом компилятор превращает его в 0... Последние два выражения из констант вообще удивительные результаты дают - вроде, одно и тоже, а нет )))
Пробовал разные подстановки, - все, что больше 1 имеет корректную дробную часть.
Всем Доброго времени суток!
Мозг припух; в документации ответа не нашел, но может кто сталкивался. Вот такая строчка в советнике (доля положительных сделок):
Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);
Выдает в журнал (например):
3/6=0.00=0 0 40
При этом если решение от 1:
3/3=1.00=1 0 40
Переменная BestOd=OderPluseCount/OderTotal типа double, остальные int.
То есть, как только встречается значение меньше 1, то автоматом компилятор превращает его в 0... Последние два выражения из констант вообще удивительные результаты дают - вроде, одно и тоже, а нет )))
Пробовал разные подстановки, - все, что больше 1 имеет корректную дробную часть.
Попробуй так
DoubleToStr((double)(OderPluseCount/OderTotal),2)
Попробуй так
DoubleToStr((double)(OderPluseCount/OderTotal),2)
Не помогает. Но спасибо )
DoubleToStr((double)(OderPluseCount/(OderTotal*1.0)),2)
Так работает, Спасибо. Похоже на шаманство )))
Честно говоря, я больше переживаю не за отображение, а за правильный расчет BestOd. Пришлось и его править.
Сделал так:
BestOd=(OderPluseCount/(OderTotal*1.0));
Этому есть какое-то объяснение? Ведь если бы не принт, отловить такую ошибку очень сложно. В каких случаях она может вылезти?
Так работает, Спасибо. Похоже на шаманство )))
Честно говоря, я больше переживаю не за отображение, а за правильный расчет BestOd. Пришлось и его править.
Сделал так:
BestOd=(OderPluseCount/(OderTotal*1.0));
Этому есть какое-то объяснение? Ведь если бы не принт, отловить такую ошибку очень сложно. В каких случаях она может вылезти?
Сам нашел ответ в справочнике, раздел "Приведение типов".
Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме:
Но тип double по этой схеме самый старший. А у меня были оба int. Поэтому и результат целочисленный. Введение константы старшего типа (double, float), преобразовал все int к нему.
Век живи, - век учись, а в документацию заглядывай )))
У меня тоже вопрос к спецам. Я ранее не имел дело с индикаторами.
Возможно ли на графике в отдельном окне изобразить график баланса по мэйджику, но без привязки к барам?
То есть чтобы рисовалась кривая линия наподобие той, которая рисуется в тестере стратегий, чтобы она вся умещалась в одном окне.