Die Funktion ObjectFind() gibt die Nummer des Hauptfensters zurück. Und diese Zahl ist 0. Andererseits ist 0 == false. Daraus folgt, dass die Funktion, wenn sie 0 zurückgibt, immer noch false zurückgibt. Natürlich würde ich dies nicht verwenden, denn wenn die Funktion -1 zurückgibt, d. h. einen Fehler, können wir davon ausgehen, dass sich das Objekt nicht im Hauptfenster befindet. Und außerdem weiß man nie, welche Korrekturen vorgenommen werden...
Also streiten Sie nicht und lernen Sie nicht, wie man es macht...
Die Funktion ObjectFind() gibt die Nummer des Hauptfensters nicht zurück. Es wird die Nummer des Fensters zurückgegeben, in dem das Objekt gefunden wurde (0, 1, 2...) oder -1, wenn das Objekt nicht existiert.
Ich frage mich, ob "-1" falsch oder richtig ist.
Der Typ bool wird verwendet, um die booleschen Werte true oder false zu speichern , mit einer numerischen Darstellung von 1 bzw. 0 .
Die Funktion ObjectFind() gibt die Nummer des Hauptfensters nicht zurück. Es ist die Nummer des Fensters, in dem das Objekt gefunden wurde (0,1,2...) oder -1, wenn es kein Objekt gibt.
Ich habe über den speziellen Fall gesprochen, in dem sich das Objekt im Hauptfenster befindet. Streiten Sie nicht und lernen Sie nicht, wie man es macht...
Die Funktion ObjectFind() gibt die Nummer des Hauptfensters zurück. Und diese Zahl ist 0. Andererseits ist 0 == false. Daraus folgt, dass die Funktion, wenn sie 0 zurückgibt, immer noch false zurückgibt. Natürlich würde ich dies nicht verwenden, denn wenn die Funktion -1 zurückgibt, d. h. einen Fehler, können wir davon ausgehen, dass sich das Objekt nicht im Hauptfenster befindet. Und außerdem weiß man nie, welche Korrekturen vorgenommen werden...
Also streiten Sie nicht und lernen Sie nicht, wie man es macht...
Mir ist klar, dass man das nicht tun sollte, aber ich musste es aus ästhetischen Gründen tun (== 0 in jedem Zustand sieht hässlich aus). Und ich brauche nur das Objekt im Hauptfenster.
Ich weiß, ich sollte das nicht tun, aber ich musste es aus ästhetischen Gründen tun (== 0 in jedem Zustand sieht hässlich aus). Und ich brauche nur das Objekt im Hauptfenster.
Problem: Gelbe und graue Linien ("Stop Sell" und "not allowed") werden ständig erzeugt und flackern, wenn die Schaltfläche im Chart gedrückt wird. Und ObjectCreate() gibt ständig true statt false zurück, d.h. es erstellt wie in einem anderen Fenster und das könnte das Flackern erklären... Aber das Fenster ist nur das Hauptfenster und es gibt keine Anomalien sowohl bei der grünen Linie ("Buy Stop") als auch bei der roten Linie ("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);
}
Wenn es kein Objekt gibt, erhalten Sie "-1", d.h. wahr.
Ich habe es versucht, ich muss nur die Objektnamen ändern (invertieren), damit die Ausnahme funktioniert. Auf diese Weise entstehen aber überhaupt keine Linien.
MakarFX #: Ich habe es erstellt und Sie auch, nur der Preis ist "0".
Ja, in der Tat 8 Stück, aber es ist nicht sichtbar auf dem Diagramm, die Tatsache, dass der Preis ist 0 spielt keine Rolle, die Linie noch klammert sich an den Cursor (folgt ihm)
Nein, Makar, es sieht so aus:
Die Funktion ObjectFind() gibt die Nummer des Hauptfensters zurück. Und diese Zahl ist 0. Andererseits ist 0 == false. Daraus folgt, dass die Funktion, wenn sie 0 zurückgibt, immer noch false zurückgibt. Natürlich würde ich dies nicht verwenden, denn wenn die Funktion -1 zurückgibt, d. h. einen Fehler, können wir davon ausgehen, dass sich das Objekt nicht im Hauptfenster befindet. Und außerdem weiß man nie, welche Korrekturen vorgenommen werden...
Also streiten Sie nicht und lernen Sie nicht, wie man es macht...
Die Funktion ObjectFind() gibt die Nummer des Hauptfensters nicht zurück. Es wird die Nummer des Fensters zurückgegeben, in dem das Objekt gefunden wurde (0, 1, 2...) oder -1, wenn das Objekt nicht existiert.
Ich frage mich, ob "-1" falsch oder richtig ist.
Der Typ bool wird verwendet, um die booleschen Werte true oder false zu speichern , mit einer numerischen Darstellung von 1 bzw. 0 .Die Funktion ObjectFind() gibt die Nummer des Hauptfensters nicht zurück. Es ist die Nummer des Fensters, in dem das Objekt gefunden wurde (0,1,2...) oder -1, wenn es kein Objekt gibt.
Ich habe über den speziellen Fall gesprochen, in dem sich das Objekt im Hauptfenster befindet. Streiten Sie nicht und lernen Sie nicht, wie man es macht...
MakarFX #:
Ich frage mich, ob "-1" falsch oder richtig ist?
Der Typ bool ist für die Speicherung der booleschen Werte true oder false vorgesehen , deren numerische Darstellung 1 bzw. 0 ist .false ist nur 0. Alles andere ist true.
false ist nur 0. Alles andere ist true.
Nein, Makar, es sieht so aus:
Die Funktion ObjectFind() gibt die Nummer des Hauptfensters zurück. Und diese Zahl ist 0. Andererseits ist 0 == false. Daraus folgt, dass die Funktion, wenn sie 0 zurückgibt, immer noch false zurückgibt. Natürlich würde ich dies nicht verwenden, denn wenn die Funktion -1 zurückgibt, d. h. einen Fehler, können wir davon ausgehen, dass sich das Objekt nicht im Hauptfenster befindet. Und außerdem weiß man nie, welche Korrekturen vorgenommen werden...
Also streiten Sie nicht und lernen Sie nicht, wie man es macht...
Mir ist klar, dass man das nicht tun sollte, aber ich musste es aus ästhetischen Gründen tun (== 0 in jedem Zustand sieht hässlich aus). Und ich brauche nur das Objekt im Hauptfenster.
Ich weiß, ich sollte das nicht tun, aber ich musste es aus ästhetischen Gründen tun (== 0 in jedem Zustand sieht hässlich aus). Und ich brauche nur das Objekt im Hauptfenster.
Gehen Sie dann wie folgt vor
wenn es kein Objekt gibt, erhalten Sie "-1", d.h. true
Problem: Gelbe und graue Linien ("Stop Sell" und "not allowed") werden ständig erzeugt und flackern, wenn die Schaltfläche im Chart gedrückt wird. Und ObjectCreate() gibt ständig true statt false zurück, d.h. es erstellt wie in einem anderen Fenster und das könnte das Flackern erklären... Aber das Fenster ist nur das Hauptfenster und es gibt keine Anomalien sowohl bei der grünen Linie ("Buy Stop") als auch bei der roten Linie ("Stop Loss").
Gehen Sie dann wie folgt vor
Wenn es kein Objekt gibt, erhalten Sie "-1", d.h. wahr.
Ich habe es versucht, ich muss nur die Objektnamen ändern (invertieren), damit die Ausnahme funktioniert. Auf diese Weise entstehen aber überhaupt keine Linien.
Ich habe es ausprobiert, man muss nur den Namen der Objekte ändern. Dabei entstehen aber überhaupt keine Linien.
Ich habe es erstellt und Sie auch, nur der Preis ist "0".