A função ObjectFind() retorna o número da janela principal. E este número é 0. Por outro lado, 0 == falso, portanto, se a função retorna 0, ela ainda retorna falso. Claro, eu não usaria isto porque se a função retornar -1, ou seja, um erro, podemos considerar a localização do objeto não na janela principal. Além disso, nunca se sabe que consertos serão feitos...
Portanto, não discuta e não estude como fazer isso...
A função ObjectFind() não retorna o número da janela principal. Ele retornará o número de janelas onde um objeto foi encontrado (0, 1, 2...) ou -1 se nenhum objeto foi encontrado.
Pergunto-me se "-1" é falso ou verdadeiro.
O tipo bool é usado para armazenar os valores booleanos verdadeiros ou falsos, com uma representação numérica de 1 ou 0 respectivamente .
A função ObjectFind() não retorna o número da janela principal. É o número de janelas onde o objeto é encontrado (0,1,2...) ou -1 se não houver objeto.
Eu estava falando de um caso específico onde o objeto está localizado na janela principal. Não discuta e não aprenda a fazer isso...
A função ObjectFind() retorna o número da janela principal. E este número é 0. Por outro lado, 0 == falso, portanto, se a função retorna 0, ela ainda retorna falso. Claro, eu não usaria isto porque se a função retornar -1, ou seja, um erro, podemos considerar a localização do objeto não na janela principal. Além disso, nunca se sabe que consertos serão feitos...
Portanto, não discuta e não aprenda a fazer isso...
Percebo que você não deveria fazer isso, mas tive que fazê-lo por uma questão de estética (=== 0 em todas as condições parece feio). E eu só preciso do objeto na janela principal.
Eu sei que não deveria fazer isso, mas tive que fazer por uma questão de estética (=== 0 em todas as condições parece feio). E eu só preciso do objeto na janela principal.
Problema: As linhas amarelas e cinzas ("Stop Sell" e "not allowed") são constantemente criadas e cintilantes quando o botão é pressionado na tabela. E ObjectCreate() retorna constantemente verdadeiro ao invés de falso, ou seja, cria como se estivesse em outra janela e isso poderia explicar a cintilação... Mas a janela é apenas a principal e não há anomalias com a linha verde ("Buy Stop"), assim como com a vermelha ("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);
}
Não Makar, é o que parece:
A função ObjectFind() retorna o número da janela principal. E este número é 0. Por outro lado, 0 == falso, portanto, se a função retorna 0, ela ainda retorna falso. Claro, eu não usaria isto porque se a função retornar -1, ou seja, um erro, podemos considerar a localização do objeto não na janela principal. Além disso, nunca se sabe que consertos serão feitos...
Portanto, não discuta e não estude como fazer isso...
A função ObjectFind() não retorna o número da janela principal. Ele retornará o número de janelas onde um objeto foi encontrado (0, 1, 2...) ou -1 se nenhum objeto foi encontrado.
Pergunto-me se "-1" é falso ou verdadeiro.
O tipo bool é usado para armazenar os valores booleanos verdadeiros ou falsos, com uma representação numérica de 1 ou 0 respectivamente .A função ObjectFind() não retorna o número da janela principal. É o número de janelas onde o objeto é encontrado (0,1,2...) ou -1 se não houver objeto.
Eu estava falando de um caso específico onde o objeto está localizado na janela principal. Não discuta e não aprenda a fazer isso...
MakarFX #:
Eu me pergunto se "-1" é falso ou verdadeiro?
O tipo bool é destinado a armazenar os valores booleanos verdadeiros ou falsos, cuja representação numérica é 1 ou 0, respectivamente .falso é apenas 0. Tudo o resto é verdade
falso é apenas 0. Tudo o resto é verdade
Não Makar, é o que parece:
A função ObjectFind() retorna o número da janela principal. E este número é 0. Por outro lado, 0 == falso, portanto, se a função retorna 0, ela ainda retorna falso. Claro, eu não usaria isto porque se a função retornar -1, ou seja, um erro, podemos considerar a localização do objeto não na janela principal. Além disso, nunca se sabe que consertos serão feitos...
Portanto, não discuta e não aprenda a fazer isso...
Percebo que você não deveria fazer isso, mas tive que fazê-lo por uma questão de estética (=== 0 em todas as condições parece feio). E eu só preciso do objeto na janela principal.
Eu sei que não deveria fazer isso, mas tive que fazer por uma questão de estética (=== 0 em todas as condições parece feio). E eu só preciso do objeto na janela principal.
Em seguida, faça o seguinte
se não houver nenhum objeto, você receberá "-1", ou seja, verdadeiro
Problema: As linhas amarelas e cinzas ("Stop Sell" e "not allowed") são constantemente criadas e cintilantes quando o botão é pressionado na tabela. E ObjectCreate() retorna constantemente verdadeiro ao invés de falso, ou seja, cria como se estivesse em outra janela e isso poderia explicar a cintilação... Mas a janela é apenas a principal e não há anomalias com a linha verde ("Buy Stop"), assim como com a vermelha ("Stop Loss").
Em seguida, faça o seguinte
se não houver nenhum objeto, você recebe "-1", ou seja, verdadeiro
Eu tentei, só preciso mudar os nomes dos objetos (inverter) para que a exceção funcione. Mas desta forma as linhas não são criadas de forma alguma.
Eu tentei, só você tem que mudar o nome dos objetos. Mas isto não cria nenhuma linha.
Eu o criei e você também, apenas o preço é "0".