Общие вопросы по разработке > Ошибка при сравнении Bool и Double

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Ошибка при сравнении Bool и Double

Непрочитанное сообщение Den » 26 окт 2017, 20:49

Добрый день друзья !

компилирование выдает ошибку

Код: Выделить всё

function Evaluate()
{
if ...

S = (Input.Close[0]) - Input.Open[0]);

if (1 <= S[0] <= 2)


как тут задать числовой диапазон значению S (от 1 до 2-х)?
Вложения
jui.png
jui.png (1.92 КБ) 19053 просмотра

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение evge » 26 окт 2017, 21:15

1 <= S[0] возвращает Boolean, затем сравнивается с <= 2

итого

Boolean сравнивается с числом.

можно попробовать правильно написать, так:

Код: Выделить всё

if (S[0] >= 1 && S[0] <= 2) {...}
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение Den » 26 окт 2017, 21:22

Евгений, именно так у меня и стоит сейчас,

Код: Выделить всё

if (( S[0] >= 1 && S[0] <= 2 || S[0] >= 2 && S[0] <= 3 || ...


но это почему-то не работает, он указывает значения менее 1 почему-то. Вот поэтому я и спросил

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение Den » 26 окт 2017, 21:33

вот к примеру показывает значения менее 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);

 

}
}
}



Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение evge » 27 окт 2017, 06:55

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. Но как пример конечно пусть будет :)
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение evge » 27 окт 2017, 07:03

Den писал(а):вот к примеру показывает значения менее 14 центов почему-то, хотя ограничение стоит больше 14 центов


Ну какие условие, такие и показания :)

Den писал(а):

Код: Выделить всё

if (Input.High[0] > Input.Low[0])


Код: Выделить всё

if (Input.Low[0] < Input.High[0])




Что это?

Условие бессмысленное, т.к. обратных ситуаций и "не бывает". Разве что иногда High и Low у бара могут быть равны при нулевом изменении цены за 1 бар, ну это очень редко и скорее на неликвидах :)

Что вы этими условиями фильтруете?
никогда такого не было и вот опять

ensh
Сообщения: 218
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение ensh » 27 окт 2017, 11:31

Den писал(а):Евгений, именно так у меня и стоит сейчас,

Код: Выделить всё

if (( S[0] >= 1 && S[0] <= 2 || S[0] >= 2 && S[0] <= 3 || ...


но это почему-то не работает, он указывает значения менее 1 почему-то. Вот поэтому я и спросил


В условии необходимы дополнительные скобочки

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение Den » 27 окт 2017, 12:14

ну вот не правильно, всё равно :)


Действительно, от 1 до 3 это как пример. Ведь могут быть меньшие цифры, на бренте там вообще единицы - центы .

вообще код приведен был для примера , что значения менее единицы он показывает, при том, что условие стоит не менее единицы.

Но и со скобками он показывает почему-то значения меньшие, чем указаны.

и по условию вы правильно говорите, действительно других ситуаций не бывает.

Условие там простое - рост или падение

Код: Выделить всё

if ( Input.High[0] < Input.High[1] )
условно падение

Код: Выделить всё

if ( Input.Low[0] > Input.Low[1] )
условно рост

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение evge » 27 окт 2017, 12:17

Покажите итоговый код ("без ошибок" последних) и что хотите от кода получить. На выходе постараюсь дать исправленный код.
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Ошибка при сравнении Bool и Double

Непрочитанное сообщение Den » 27 окт 2017, 12:33

Евгений, вот еще деталь - сигнал появляется в момент совпадения условия и пропадает при выходе за границу указанного диапазона. А как его зафиксировать, чтобы стрелка не пропадала?


Код: Выделить всё

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);

 

}
}
}




Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 18 гостей