Ich kann mich nicht erinnern) gibt es eine Zeile Und wie prüfe ich, ob sich diese Zeile geändert hat
CHARTEVENT_OBJECT_CHANGE
Ändern der Eigenschaften eines grafischen Objekts über den Eigenschaftsdialog
Der Parameter "sparam" gibt den Namen des geänderten Objekts zurück. Wenn es sich um Ihr eigenes Objekt handelt, überprüfen Sie die Eigenschaften, die für Ihr Objekt entscheidend sind.
Ändern der Eigenschaften eines grafischen Objekts über den Eigenschaftsdialog
Der Parameter "sparam" gibt den Namen des geänderten Objekts zurück. Wenn es sich um Ihr Objekt handelt, überprüfen Sie die Eigenschaften, die für Ihr Objekt entscheidend sind.
Wie ohne ein Objekt, wenn wir wissen, dass der Preis eine Linie ist, müssen wir prüfen, ob er sich geändert hat, ist es klar, dass wir den Preis vergleichen müssen).
Wie ohne ein Objekt, wissen wir den Preis und das ist die Linie, ist es notwendig, um zu überprüfen, ob es sich geändert hat oder nicht, ist es klar, dass es notwendig ist, diesen Preis zu vergleichen Ich weiß nicht, wie)
welche Art von
wo man ein Maß für den Preis erhält2))
der Preis des letzten Balkens und wird zu Price2, vergleichen Sie Bid mit einem beliebigen Preis des letzten Balkens Ihrer Wahl - Open, Close, High, Low.
Wenn Sie Zwischenpreise wünschen, müssen Sie die Tick-Historie speichern und den vorherigen Preis von dort übernehmen. Dann wird das Gebot mit dem Preis des vorherigen Ticks verglichen.
Und was ist der Sinn der Preisnormalisierung? Sie müssen berechnete Werte normalisieren, die später in Handelsaufträgen verwendet werden, und der Preis ist bereits normalisiert.
Die Suchmethode in der folgenden Tabelle ist etwas anders:
#property strict/******************************************************************************/bool AddValue(double &array[], constdouble value) {
constint size = ArraySize(array);
if (ArrayResize(array, size + 1) != size + 1) {
returnfalse; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound(double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND) {
switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
returnfalse; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставилreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/boolFilTrenLin(string name) {
const string dt_123 = TimeToStr(TimeCurrent(),TIME_SECONDS); //const datetime vremnin= StrToTime(dt_123); // Присваиваем время в секундах const datetime vrem2kor= ObjectGet(name,OBJPROP_TIME2);// время второй координатыMqlDateTime str1;
TimeToStruct(vrem2kor,str2);
const int PjatPon=str1.sec;
if(PjatPon+3600>=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массивPrint(" PjatPon ", PjatPon," vremnin ",vremnin," vrem2kor ",vrem2kor);
returnfalse;
}
returntrue;
}
/******************************************************************************/void FillAndPrint(double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize(array);
Print("Найдено объектов: ", limit);
for (int i = 0; i < limit; i++) {
Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
}
} else {
Print("Чёрт!");
}
}
Halten Sie es nicht für frech, ichweiß nicht einmal mehr, wie ich es ansprechen soll, aber ich kann es nicht ändern. Ich dachte, wenn ich ein Array zusammenstellen könnte, dann würden die Bedingungen herausgefiltert werden und das Signal wie nichts anderes filtern.
Kümmern Sie sich nicht um mich, ichweiß nicht einmal mehr, wie ich es ansprechen soll, aber ich kann nichts dagegen tun. Ich dachte, wenn ich ein Array erstellen könnte, dann wären die Bedingungen für die Filterung des Signals ein Kinderspiel.
Die Funktion TimeCurrent() ist überladen. Wenn Sie die Beschreibung des Typs datetime lesen, werden Sie feststellen, dass die erste Variante der ersten Funktion ausreicht:
Wir können auf die andere Seite gehen, nicht um die Differenz der Zeitpunkte zu erhalten, sondern um diese Zeitpunkte zu vergleichen (gleichzeitig können wir wieder einen bedingten Ausdruck verwenden):
01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:292 EURUSDm,H1: initialized
01:30:312 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:332 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:352 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: uninit reason 001:30:38 Script 2 EURUSDm,H1: removed
Wenn man das Wesentliche der angewandten Ideen verstanden hat und sich daran erinnert, was der Datentyp datetime ist, sollte die Arbeit mit Zeitpunkten keine Schwierigkeiten bereiten, wenn die erforderliche Genauigkeit Sekundeneinheiten nicht überschreitet.
Die Funktion TimeCurrent() ist überladen. Wenn Sie die Beschreibung des Typs datetime lesen, werden Sie feststellen, dass die erste Version der Funktion in Ordnung ist:
Das tut sie:
Wir können auch in die andere Richtung gehen, nicht um die Differenz der Zeitmomente zu erhalten, sondern um diese Momente zu vergleichen (gleichzeitig können wir wieder einen bedingten Ausdruck verwenden):
Laufen gibt:
Wenn Sie die Ideen verstanden haben und sich an den datetime-Typ erinnern, sollte die Arbeit mit Zeitpunkten kein Problem sein, solange die erforderliche Genauigkeit nicht über Sekundeneinheiten hinausgeht.
Um ehrlich zu sein, habe ich noch nicht herausgefunden, wie man es anwendet. Es fehlt noch ein Millimeter, es wäre eine Schande, aufzuhören, wenn es fast fertig ist.
Aufgabe, schreibe den Preis nicht in das Array, wenn das Objekt time(2nd parameter+3600sec>current)||(1st parameter time - 2nd parameter time)<3600sec )
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюдаreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/bool FilTrenLin(string name) {
constdatetime dt = TimeCurrent();
constdatetime dt1 = ObjectGet(name,OBJPROP_TIME1);
constdatetime dt2 = ObjectGet(name,OBJPROP_TIME2);
Print(" DiffInSecs(dt,dt2) ", DiffInSecs(dt,dt2)," DiffInSecs(dt2,dt1)) ",DiffInSecs(dt2,dt1)," dt1 ",dt1);
if(DiffInSecs(dt,dt2)<3600||DiffInSecs(dt2,dt1)<3600)// Если время объекта второго параметра + 3600 сек > текущего времени,
или если разница первого и второго параметра времени объекта < 3600 сек, то запускаем ошибку, чтоб цена не записалась в массив.
{ returnfalse;
}
returntrue;
}
/******************************************************************************/long DiffInSecs(constdatetime dt1, constdatetime dt2) {
return dt1 - dt2;
}
Ja, vielen Dank, Sie sind einfach unbeschreiblich hilfreich, so klar! Awesomeooo!!!
Es wäre toll, wenn Sie sich wichtige Fähigkeiten auf möglichst direkte und effiziente Weise selbst beibringen könnten.
Und wenn andere auf die gleiche Weise davon profitieren können.
Mir fällt nichts ein) gibt es eine Zeile Und wie prüfe ich, ob sich die Zeile geändert hat
Ich kann mich nicht erinnern) gibt es eine Zeile Und wie prüfe ich, ob sich diese Zeile geändert hat
CHARTEVENT_OBJECT_CHANGE
Ändern der Eigenschaften eines grafischen Objekts über den Eigenschaftsdialog
CHARTEVENT_OBJECT_CHANGE
Ändern der Eigenschaften eines grafischen Objekts über den Eigenschaftsdialog
Wie ohne ein Objekt, wenn wir wissen, dass der Preis eine Linie ist, müssen wir prüfen, ob er sich geändert hat, ist es klar, dass wir den Preis vergleichen müssen).
welche Art von
wo man ein Maß für den Preis erhält2))
Wie ohne ein Objekt, wissen wir den Preis und das ist die Linie, ist es notwendig, um zu überprüfen, ob es sich geändert hat oder nicht, ist es klar, dass es notwendig ist, diesen Preis zu vergleichen Ich weiß nicht, wie)
welche Art von
wo man ein Maß für den Preis erhält2))
der Preis des letzten Balkens und wird zu Price2, vergleichen Sie Bid mit einem beliebigen Preis des letzten Balkens Ihrer Wahl - Open, Close, High, Low.
Wenn Sie Zwischenpreise wünschen, müssen Sie die Tick-Historie speichern und den vorherigen Preis von dort übernehmen. Dann wird das Gebot mit dem Preis des vorherigen Ticks verglichen.
Und was ist der Sinn der Preisnormalisierung? Sie müssen berechnete Werte normalisieren, die später in Handelsaufträgen verwendet werden, und der Preis ist bereits normalisiert.
der Preis auf dem letzten Balken wird Price2 sein
Wenn Sie Zwischenkurse wünschen, müssen Sie die Tick-Historie speichern und den vorherigen Preis von dort übernehmen.
Ich habe alles herausgefunden :)
Nein, das würde mit meinen Bars nicht funktionieren.
Die Suchmethode in der folgenden Tabelle ist etwas anders:
Halten Sie es nicht für frech, ichweiß nicht einmal mehr, wie ich es ansprechen soll, aber ich kann es nicht ändern. Ich dachte, wenn ich ein Array zusammenstellen könnte, dann würden die Bedingungen herausgefiltert werden und das Signal wie nichts anderes filtern.
Kümmern Sie sich nicht um mich, ichweiß nicht einmal mehr, wie ich es ansprechen soll, aber ich kann nichts dagegen tun. Ich dachte, wenn ich ein Array erstellen könnte, dann wären die Bedingungen für die Filterung des Signals ein Kinderspiel.
Die Funktion TimeCurrent() ist überladen. Wenn Sie die Beschreibung des Typs datetime lesen, werden Sie feststellen, dass die erste Variante der ersten Funktion ausreicht:
Das tut sie:
Wir können auf die andere Seite gehen, nicht um die Differenz der Zeitpunkte zu erhalten, sondern um diese Zeitpunkte zu vergleichen (gleichzeitig können wir wieder einen bedingten Ausdruck verwenden):
Startup gibt:
Wenn man das Wesentliche der angewandten Ideen verstanden hat und sich daran erinnert, was der Datentyp datetime ist, sollte die Arbeit mit Zeitpunkten keine Schwierigkeiten bereiten, wenn die erforderliche Genauigkeit Sekundeneinheiten nicht überschreitet.
Die Funktion TimeCurrent() ist überladen. Wenn Sie die Beschreibung des Typs datetime lesen, werden Sie feststellen, dass die erste Version der Funktion in Ordnung ist:
Das tut sie:
Wir können auch in die andere Richtung gehen, nicht um die Differenz der Zeitmomente zu erhalten, sondern um diese Momente zu vergleichen (gleichzeitig können wir wieder einen bedingten Ausdruck verwenden):
Laufen gibt:
Wenn Sie die Ideen verstanden haben und sich an den datetime-Typ erinnern, sollte die Arbeit mit Zeitpunkten kein Problem sein, solange die erforderliche Genauigkeit nicht über Sekundeneinheiten hinausgeht.
Um ehrlich zu sein, habe ich noch nicht herausgefunden, wie man es anwendet. Es fehlt noch ein Millimeter, es wäre eine Schande, aufzuhören, wenn es fast fertig ist.
Aufgabe, schreibe den Preis nicht in das Array, wenn das Objekt time(2nd parameter+3600sec>current)||(1st parameter time - 2nd parameter time)<3600sec )