La funzione ObjectFind() restituisce il numero della finestra principale. E questo numero è 0. D'altra parte, 0 == false, quindi ne consegue che se la funzione restituisce 0, restituisce comunque false. Naturalmente, non lo userei perché se la funzione restituisce -1, cioè un errore, potremmo considerare la posizione dell'oggetto non nella finestra principale. Oltre a questo, non si sa mai quali correzioni saranno fatte...
Quindi non discutere e non studiare come fare...
La funzione ObjectFind() non restituisce il numero della finestra principale. Restituirà il numero di finestra in cui è stato trovato l'oggetto (0, 1, 2...) o -1 se l'oggetto non esiste.
Mi chiedo se "-1" è falso o vero.
Il tipo bool è usato per memorizzare i valori booleani true o false, con una rappresentazione numerica di 1 o 0 rispettivamente .
La funzione ObjectFind() non restituisce il numero della finestra principale. È il numero della finestra in cui si trova l'oggetto (0,1,2...) o -1 se non c'è nessun oggetto.
Stavo parlando del caso specifico in cui l'oggetto si trova nella finestra principale. Non discutere e non imparare a farlo...
La funzione ObjectFind() restituisce il numero della finestra principale. E questo numero è 0. D'altra parte, 0 == falso, quindi ne consegue che se la funzione restituisce 0, restituisce comunque falso. Naturalmente, non lo userei perché se la funzione restituisce -1, cioè un errore, potremmo considerare la posizione dell'oggetto non nella finestra principale. Oltre a questo, non si sa mai quali correzioni saranno fatte...
Quindi non discutere e non imparare a farlo...
Mi rendo conto che non si dovrebbe fare così, ma ho dovuto farlo per motivi di estetica (== 0 in ogni condizione sembra brutto). E ho bisogno solo dell'oggetto nella finestra principale.
So che non dovrei farlo, ma ho dovuto farlo per amore dell'estetica (== 0 in ogni condizione sembra brutto). E ho bisogno solo dell'oggetto nella finestra principale.
Problema: le linee gialle e grigie ("Stop Sell" e "not allowed") si creano costantemente e sfarfallano quando si preme il pulsante sul grafico. E ObjectCreate() restituisce costantemente true invece di false, cioè crea come se fosse in un'altra finestra e questo potrebbe spiegare lo sfarfallio... Ma la finestra è solo quella principale e non ci sono anomalie né con la linea verde ("Buy Stop") né con quella rossa ("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);
}
No Makar, è così:
La funzione ObjectFind() restituisce il numero della finestra principale. E questo numero è 0. D'altra parte, 0 == false, quindi ne consegue che se la funzione restituisce 0, restituisce comunque false. Naturalmente, non lo userei perché se la funzione restituisce -1, cioè un errore, potremmo considerare la posizione dell'oggetto non nella finestra principale. Oltre a questo, non si sa mai quali correzioni saranno fatte...
Quindi non discutere e non studiare come fare...
La funzione ObjectFind() non restituisce il numero della finestra principale. Restituirà il numero di finestra in cui è stato trovato l'oggetto (0, 1, 2...) o -1 se l'oggetto non esiste.
Mi chiedo se "-1" è falso o vero.
Il tipo bool è usato per memorizzare i valori booleani true o false, con una rappresentazione numerica di 1 o 0 rispettivamente .La funzione ObjectFind() non restituisce il numero della finestra principale. È il numero della finestra in cui si trova l'oggetto (0,1,2...) o -1 se non c'è nessun oggetto.
Stavo parlando del caso specifico in cui l'oggetto si trova nella finestra principale. Non discutere e non imparare a farlo...
MakarFX #:
Mi chiedo se "-1" è falso o vero?
Il tipo bool è destinato a memorizzare i valori logici true o false, la cui rappresentazione numerica è 1 o 0, rispettivamente .falso è solo 0. Tutto il resto è vero
falso è solo 0. Tutto il resto è vero
No Makar, è così:
La funzione ObjectFind() restituisce il numero della finestra principale. E questo numero è 0. D'altra parte, 0 == falso, quindi ne consegue che se la funzione restituisce 0, restituisce comunque falso. Naturalmente, non lo userei perché se la funzione restituisce -1, cioè un errore, potremmo considerare la posizione dell'oggetto non nella finestra principale. Oltre a questo, non si sa mai quali correzioni saranno fatte...
Quindi non discutere e non imparare a farlo...
Mi rendo conto che non si dovrebbe fare così, ma ho dovuto farlo per motivi di estetica (== 0 in ogni condizione sembra brutto). E ho bisogno solo dell'oggetto nella finestra principale.
So che non dovrei farlo, ma ho dovuto farlo per amore dell'estetica (== 0 in ogni condizione sembra brutto). E ho bisogno solo dell'oggetto nella finestra principale.
Poi fate come segue
se non c'è un oggetto, si ottiene "-1", cioè vero
Problema: le linee gialle e grigie ("Stop Sell" e "not allowed") si creano costantemente e sfarfallano quando si preme il pulsante sul grafico. E ObjectCreate() restituisce costantemente true invece di false, cioè crea come se fosse in un'altra finestra e questo potrebbe spiegare lo sfarfallio... Ma la finestra è solo quella principale e non ci sono anomalie né con la linea verde ("Buy Stop") né con quella rossa ("Stop Loss").
Poi fate come segue
se non c'è un oggetto, si ottiene "-1", cioè vero
Ho provato, devo solo cambiare i nomi degli oggetti (invertire) perché l'eccezione funzioni. Ma in questo modo non viene creata nessuna linea.
Ho provato, solo che devi cambiare il nome degli oggetti. Ma questo non crea nessuna linea.
Io l'ho creato e anche voi, solo che il prezzo è "0".