lisa писал(а):Haos писал(а):Вообще-то стрелка и т.п. не должны появляться пока бар не закроется. Это азы сигналов. Какой смысл сначала войти по стрелке, а потом увидеть, что это был ложный сигнал?
А чтобы не появлялось ничего пока бар не закроется в строчке:
- Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i >= 0; i--)
убери "=":
- Код: выделить все
for(int i = Bars - ExtCountedBars - 1; i > 0; i--)
Такой вариант не подходит, хотелось бы чтобы индикатор работал в реальном времени.
перед if'ами добавить пару строк
- Код: выделить все
Buffer2[i] = 0;
Buffer1[i] = 0;
и на будущее всегда сравнивай значения одного типа, иначе привыкнешь в некорректному коду и будешь думать, что запись нормальная, а она будет неправильно сравнивать..
у тебя Rs это тип double, а в сравнении используются 90 и 10, а это тип int..
тут два варианта, вместо
- Код: выделить все
if (Rs > 90)
написать так
- Код: выделить все
if (Rs > 90.0)
или так
- Код: выделить все
if (Rs - 90 > 0)
в последнем случае при выполнении арифметического действия 90 будет приведено автоматически к типу double..
ну и так для справки
в случае, если ты сравниваешь не просто double значения, а ценовые значения типа Ask/Bid, Close[i], High[i] и т.п. или значения индикаторов типа iMa(), которые выдают именно ценовые значения, то нужно сравнивать нормализуя значения к какому-то знаку после запятой, вот с такими значения очень часто бывает некорректное сравнения, если сравнивать без нормализации, для этого есть специальная функция
например, если Ask больше цены закрытия предыдущего бара
- Код: выделить все
if (NormalizeDouble(Ask - Close[1], Digits) > 0)