Страница 1 из 5
Ошибка при сравнении Bool и Double
Добавлено: 26 окт 2017, 20:49
Den
Добрый день друзья !
компилирование выдает ошибку
Код: Выделить всё
function Evaluate()
{
if ...
S = (Input.Close[0]) - Input.Open[0]);
if (1 <= S[0] <= 2)
как тут задать числовой диапазон значению S (от 1 до 2-х)?
Re: Ошибка при сравнении Bool и Double
Добавлено: 26 окт 2017, 21:15
evge
1 <= S[0] возвращает Boolean, затем сравнивается с <= 2
итого
Boolean сравнивается с числом.
можно попробовать правильно написать, так:
Re: Ошибка при сравнении Bool и Double
Добавлено: 26 окт 2017, 21:22
Den
Евгений, именно так у меня и стоит сейчас,
Код: Выделить всё
if (( S[0] >= 1 && S[0] <= 2 || S[0] >= 2 && S[0] <= 3 || ...
но это почему-то не работает, он указывает значения менее 1 почему-то. Вот поэтому я и спросил
Re: Ошибка при сравнении Bool и Double
Добавлено: 26 окт 2017, 21:33
Den
вот к примеру показывает значения менее 14 центов почему-то, хотя ограничение стоит больше 14 центов
Код: Выделить всё
function Initialize()
{
IndicatorName = "BRENT";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Violet);
AddShadowSeries("U", DrawAs.Custom, Color.Lime);
AddSeries("H", DrawAs.Custom, Color.Black);
AddSeries("L", DrawAs.Custom, Color.Black);
AddGlobalVariable("CountUp", Types.Int, 0);
AddGlobalVariable("CountDn", Types.Int, 0);
PriceStudy = true;
}
function Evaluate()
{
if (Input.High[0] > Input.Low[0])
D = Input.High[0] - Input.Low[0];
{
if (Input.Low[0] < Input.High[0])
U = Input.High[0] - Input.Low[0];
{
if ( U[0] >= 0.14 && U[0] <= 0.15)
L[0] = Input.High[0];
L.DrawArrowDown(Color.HotPink, LineStyles.Solid, 3, Color.HotPink, 10);
if ( D[0] >= 0.14 && D[0] <= 0.15)
H[0] = Input.Low[0];
H.DrawArrowUp(Color.Cyan, LineStyles.Solid, 3, Color.Cyan, 10);
}
}
}
Re: Ошибка при сравнении Bool и Double
Добавлено: 27 окт 2017, 06:55
evge
Den писал(а):Евгений, именно так у меня и стоит сейчас,
Код: Выделить всё
if (( S[0] >= 1 && S[0] <= 2 || S[0] >= 2 && S[0] <= 3 || ...
но это почему-то не работает, он указывает значения менее 1 почему-то. Вот поэтому я и спросил
ну вот не правильно, всё равно
Код: Выделить всё
if ( (S[0] >= 1 && S[0] <= 2) || (S[0] >= 2 && S[0] <= 3) || ...
Найдите отличие от вашего условия и станет понятнее почему так.
Вообще странное условие.
Если S[0] будет в интервале от 1 до 3, то нет надобности проверять два раза в интервалах от 1 до 2 и от 2 до 3. Достаточно проверить от 1 до 3. Но как пример конечно пусть будет
Re: Ошибка при сравнении Bool и Double
Добавлено: 27 окт 2017, 07:03
evge
Den писал(а):вот к примеру показывает значения менее 14 центов почему-то, хотя ограничение стоит больше 14 центов
Ну какие условие, такие и показания
Что это?
Условие бессмысленное, т.к. обратных ситуаций и "не бывает". Разве что иногда High и Low у бара могут быть равны при нулевом изменении цены за 1 бар, ну это очень редко и скорее на неликвидах
Что вы этими условиями фильтруете?
Re: Ошибка при сравнении Bool и Double
Добавлено: 27 окт 2017, 11:31
ensh
Den писал(а):Евгений, именно так у меня и стоит сейчас,
Код: Выделить всё
if (( S[0] >= 1 && S[0] <= 2 || S[0] >= 2 && S[0] <= 3 || ...
но это почему-то не работает, он указывает значения менее 1 почему-то. Вот поэтому я и спросил
В условии необходимы дополнительные скобочки
Re: Ошибка при сравнении Bool и Double
Добавлено: 27 окт 2017, 12:14
Den
ну вот не правильно, всё равно
Действительно, от 1 до 3 это как пример. Ведь могут быть меньшие цифры, на бренте там вообще единицы - центы .
вообще код приведен был для примера , что значения менее единицы он показывает, при том, что условие стоит не менее единицы.
Но и со скобками он показывает почему-то значения меньшие, чем указаны. и по условию вы правильно говорите, действительно других ситуаций не бывает.
Условие там простое - рост или падение
условно падение
условно рост
Re: Ошибка при сравнении Bool и Double
Добавлено: 27 окт 2017, 12:17
evge
Покажите итоговый код ("без ошибок" последних) и что хотите от кода получить. На выходе постараюсь дать исправленный код.
Re: Ошибка при сравнении Bool и Double
Добавлено: 27 окт 2017, 12:33
Den
Евгений, вот еще деталь - сигнал появляется в момент совпадения условия и пропадает при выходе за границу указанного диапазона. А как его зафиксировать, чтобы стрелка не пропадала?
Код: Выделить всё
function Initialize()
{
IndicatorName = "BRENT";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Violet);
AddShadowSeries("U", DrawAs.Custom, Color.Lime);
AddSeries("H", DrawAs.Custom, Color.Black);
AddSeries("L", DrawAs.Custom, Color.Black);
PriceStudy = true;
}
function Evaluate()
{
if (Input.High[0] < Input.High[1])
D = (Math.Max(Input.High[0],Input.High[1]) - Input.Low[0]);
{
if (Input.Low[0] > Input.Low[1])
U = (Input.High[0] - (Math.Min(Input.Low[0],Input.Low[1])));
{
if ((U[0] >= 0.14 && U[0] <= 0.15) || (U[0] >= 0.19 && U[0] <= 0.20))
L[0] = Input.High[0];
L.DrawArrowDown(Color.HotPink, LineStyles.Solid, 3, Color.HotPink, 10);
if ((D[0] >= 0.14 && D[0] <= 0.15) || (D[0] >= 0.19 && D[0] <= 0.20))
H[0] = Input.Low[0];
H.DrawArrowUp(Color.Cyan, LineStyles.Solid, 3, Color.Cyan, 10);
}
}
}