Функция ObjectFind() возвращает номер главного окна. А этот номер равен 0. С другой стороны 0 == false, отсюда следует что если функция вернула 0, то это всё-равно что вернула false. Конечно это применять я-бы не стал, если вдруг функция вернёт -1, то-есть ошибка, то можно считать расположение объекта не в главном окне. Да плюс ко всему мало-ли какие исправления внесут…
В общем не спорь и не учись так делать…
Функция ObjectFind() возвращает не номер главного окна. А номер окна где объект найден(0,1,2...) или -1 если объекта нет.
Интересно "-1" - это false или true?
Тип bool предназначен для хранения логических значений true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно.
Функция ObjectFind() возвращает номер главного окна. А этот номер равен 0. С другой стороны 0 == false, отсюда следует что если функция вернула 0, то это всё-равно что вернула false. Конечно это применять я-бы не стал, если вдруг функция вернёт -1, то-есть ошибка, то можно считать расположение объекта не в главном окне. Да плюс ко всему мало-ли какие исправления внесут…
В общем не спорь и не учись так делать…
Осознаю что так делать не стоит, но пришлось ради эстетики (== 0 в каждом условии по уродски выглядит). И мне объект нужен только в главном окне.
Проблема: постоянно создаются и мерцают желтые и серые линии ("Stop Sell" и "not allowed") при нажатой кнопке на графике. Причем ObjectCreate() постоянно возвращает true а не false, то есть оно создаёт как будто в другое окно и этим можно было бы объяснить мерцание... но окно только главное и с зеленой линией ("Buy Stop") аномалий не наблюдается как и с красной ("Stop Loss").
voidOnChartEvent(constint id, constlong &lparam, constdouble &dparam, conststring &sparam)
{
datetimestatic dt = 0;
doublestatic price = 0;
intstatic window = 0;
stringstatic line_name;
if(id==CHARTEVENT_OBJECT_CLICK){
...
//Нажатие на SO в зависимоти от расположения панели создаёт линиюif(sparam=="Button Stop Order"){
if(panel_position == 1 || panel_position == 2){
line_name = "Buy Stop";
CreateLine(line_name, clrGreen);
}
if(panel_position == 3 || panel_position == 4){
line_name = "Sell Stop";
CreateLine(line_name, clrYellow);
}
}
//Нажатие на линию удаляет её и создаёт краснуюif(sparam=="Buy Stop" || sparam=="Sell Stop"){
ObjectDelete(line_name);
line_name = "Stop Loss";
CreateLine(line_name, clrRed);
}
//Нажатие на красной линии удаляет её и отжимает кнопкуif(sparam=="Stop Loss"){
ObjectDelete(line_name);
button_name = "Button Stop Order";
ms=GetMicrosecondCount();
}
}
//Если кнопка SO нажата, то линия будет следовать за курсоромif(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){
int x = (int)lparam;
int y = (int)dparam;
//Переведём координаты X, Y в дату и времяif(ChartXYToTimePrice(0,x,y,window,dt,price)){
//Линия меняет цвет с зелёного на желтыйif(price < Bid){
if(ObjectFind("Buy Stop") == window || ObjectFind("not allowed") == window){
ObjectDelete(line_name);
line_name = "Sell Stop";
CreateLine(line_name, clrYellow);
}
}
//Линия меняет цвет с желтого на зелёныйif(price > Ask){
if(ObjectFind("Sell Stop") == window || ObjectFind("not allowed") == window){
ObjectDelete(line_name);
line_name = "Buy Stop";
CreateLine(line_name, clrGreen);
}
}
//Линия меняет цвет на серый если в зоне спредаif(price > Bid && price < Ask){
if(ObjectFind("Buy Stop") == window || ObjectFind("Sell Stop") == window){
ObjectDelete(line_name);
line_name = "not allowed";
CreateLine(line_name, clrGray);
}
}
//Прикрепляем линию к курсоруif(id == CHARTEVENT_MOUSE_MOVE)
if(ObjectMove(0,line_name,0,0,price))
ChartRedraw(0);
}
}elseif(ObjectFind(line_name) == window) Print(ObjectDelete(line_name));
//Если нажать Esc то удалится линия и кнопка отожметсяif(id == CHARTEVENT_KEYDOWN && lparam == 27){
button_name = "Button Stop Order";
ms=GetMicrosecondCount();
}
}
//----------------------------------------------------------------------void CreateLine(conststring name, constcolor clr)
{
Print(ObjectCreate(0, name, OBJ_HLINE, 0,0,0));
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_STYLE, 3);
}
Нет Макар, это выглядет так:
Функция ObjectFind() возвращает номер главного окна. А этот номер равен 0. С другой стороны 0 == false, отсюда следует что если функция вернула 0, то это всё-равно что вернула false. Конечно это применять я-бы не стал, если вдруг функция вернёт -1, то-есть ошибка, то можно считать расположение объекта не в главном окне. Да плюс ко всему мало-ли какие исправления внесут…
В общем не спорь и не учись так делать…
Функция ObjectFind() возвращает не номер главного окна. А номер окна где объект найден(0,1,2...) или -1 если объекта нет.
Интересно "-1" - это false или true?
Тип bool предназначен для хранения логических значений true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно.Функция ObjectFind() возвращает не номер главного окна. А номер окна где объект найден(0,1,2...) или -1 если объекта нет.
Я говорил о конкретном случае где объект расположен в главном окне. Не спорь и не учись так делать…
MakarFX #:
Интересно "-1" - это false или true?
Тип bool предназначен для хранения логических значений true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно.false это только 0. Всё остальное true
false это только 0. Всё остальное true
Нет Макар, это выглядет так:
Функция ObjectFind() возвращает номер главного окна. А этот номер равен 0. С другой стороны 0 == false, отсюда следует что если функция вернула 0, то это всё-равно что вернула false. Конечно это применять я-бы не стал, если вдруг функция вернёт -1, то-есть ошибка, то можно считать расположение объекта не в главном окне. Да плюс ко всему мало-ли какие исправления внесут…
В общем не спорь и не учись так делать…
Осознаю что так делать не стоит, но пришлось ради эстетики (== 0 в каждом условии по уродски выглядит). И мне объект нужен только в главном окне.
Осознаю что так делать не стоит, но пришлось ради эстетики (== 0 в каждом условии по уродски выглядит). И мне объект нужен только в главном окне.
Тогда сделай так
если объекта нет, то получишь "-1", т.е. true
Проблема: постоянно создаются и мерцают желтые и серые линии ("Stop Sell" и "not allowed") при нажатой кнопке на графике. Причем ObjectCreate() постоянно возвращает true а не false, то есть оно создаёт как будто в другое окно и этим можно было бы объяснить мерцание... но окно только главное и с зеленой линией ("Buy Stop") аномалий не наблюдается как и с красной ("Stop Loss").
Тогда сделай так
если объекта нет, то получишь "-1", т.е. true
Я пробовал, только нужно поменять название объектов (инверсировать), чтоб исключение работало. Но так вообще линии не создаются.
Я пробовал, только нужно поменять название объектов. Но так вообще линии не создаются.
у меня создается и у тебя тоже, только цена "0"