Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 638

 

Meine Frage richtet sich an einen Neuling:

Ich habe vor kurzem herausgefunden, dass MetaEditor nicht im Terminal geöffnet wird und der Befehl "Ändern" in Expert Advisors und Indikatoren nicht funktioniert ............. Bitte helfen Sie mir dabei. Bitte helfen Sie mir, es herauszufinden.

 
gnawingmarket:

Meine Frage richtet sich an einen Neuling:

Ich habe kürzlich herausgefunden, dass MetaEditor sich nicht im Terminal öffnet und der Befehl "Ändern" in Expert Advisors und Indikatoren nicht funktioniert ............. Bitte helfen Sie mir dabei. Ich danke Ihnen.


Ich werde versuchen, diese Frage zu beantworten.

Es besteht keine Möglichkeit mehr, alte Codes zu korrigieren.

 
Aber Sie haben einen Prinzen gekrönt.
 
tara:
Wenigstens hast du einen Prinzen, den du krönen kannst.


Sie wissen alles! Heute konnte ich nicht herausfinden, wer mich zum Administrator gemacht hat, und ich habe das Passwort nicht bekommen, und ich habe nicht daran gedacht zu fragen! Ich werde es morgen holen! Warum bist du auf?

Danke, Tara, für deine Teilnahme! Ich habe mir alles von meinem Nachbarn aus der Nachbarschaft zurückgeben lassen! Experte für Informatik!

 
Top2n:

Ja, ich verstehe, dass es eine Menge dummer Fragen gibt. Ehrlich gesagt, ich habe es den ganzen Tag versucht, aber ohne Ergebnis.

Ich schreibe die Preiswerte von mehreren Trendlinien auf dem aktuellen Balken in ein Array.

Wie kann ich einen Wert aus einem Array löschen, wenn es kein Objekt gibt?

artmedia70:

Wenn wir die Werte der Trendlinienpreise bei jedem Tick durchgehen, das Array initialisieren und seine Dimension erhöhen, wenn wir den nächsten notwendigen Preis der notwendigen Trendlinie finden, dann besteht keine Notwendigkeit, die Werte der gelöschten Trendlinien aus dem Array zu entfernen. Das Array wird dynamisch sein und jedes Mal bei jedem Tick nur Werte von bestehenden Objekten enthalten.


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem=ObjectName(i); 
  string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
  string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell")   //первый массив цен на селл
  if(DWnem=DW)//если имя равно "downtrendline"
   if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy")   //второй массивцен на бай
 if(DWnem=DW2)
 if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
  array[i]=ObjectGetValueByShift(DWnem,1);

  }   return;
   }

	          
 

Ich versuche, einen Oszillator um 0 aus dem Schlusskurs in einem separaten Fenster zu machen, aber ich kann nicht. Vielleicht hat es jemand schon getan, könnten Sie mir bitte die Formel sagen?

D.h. wir haben Close[i] Preis, ich brauche diesen Preis zu gehen über/unter Null wie in MACD/CCI, in einem separaten Fenster, aber versuchen, wie ich kann, kann ich nicht tun es ohne zusätzliche Werte wie MA: jetzt bekomme ich etwas ähnliches, wenn ich subtrahieren iClose-iMA, aber vielleicht gibt es Varianten ohne Glättung?

Oder im Bereich 0,0...1,0, wenn es keinen Weg um Null herum gibt...

 
Top2n:

Die Suchmethode in der folgenden Tabelle ist etwas anders:

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))) {
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}

/******************************************************************************/
void FillAndPrint(double &array[], const bool buy) {
  if (MassTrendNumber(array, buy)) {
    const int limit = ArraySize(array);

    Print("Найдено объектов: ", limit);

    for (int i = 0; i < limit; i++) {
      Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
    }
  } else {
    Print("Чёрт!");
  }
}

/******************************************************************************/
void OnStart() {
  double masS[];
  double masB[];

  Print("Sell:");
  FillAndPrint(masS, false);

  Print("Buy:");
  FillAndPrint(masB, true);
}

Fügen Sie dem Diagramm zwei weiße Trendlinien mit den entsprechenden Namen hinzu, und Sie haben es:

04:14:34 Script 2 EURUSDm,H1: loaded successfully
04:14:34 2 EURUSDm,H1: initialized
04:14:34 2 EURUSDm,H1: Sell:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.36268
04:14:34 2 EURUSDm,H1: Buy:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.35668
04:14:34 2 EURUSDm,H1: uninit reason 0
04:14:34 Script 2 EURUSDm,H1: removed

Schreiben Sie keine kilometerlangen Funktionen, sondern unterteilen Sie das Programm in kurze "Phrasen" - "Bausteine". Kleine "Bausteine" ergeben größere, und größere Bausteine ergeben noch größere Bausteine. Sie sehen, es ist möglich.

Übergeben Sie alle Ihre Daten ausschließlich über Parameter an Funktionen.

Achten Sie darauf, Fehler zu behandeln, wenn die aufgerufene Funktion fehlschlägt, und weitere Maßnahmen, wenn der Fehler ignoriert wird, haben schwerwiegende Folgen. Die große Mehrheit der Programmabstürze (im Allgemeinen) tritt auf, weil die Fehlerbehandlung in keiner Weise programmiert ist.

Wenn z.B. ArrayResize(), das zur Vergrößerung des Arrays aufgerufen wurde, einen Fehler zurückgibt und der Programmierer dies nicht überprüft hat und auf das vermeintlich vergrößerte Array verweist, tritt ein Fehler auf, der dazu führt, dass das MQL4-Programm später nicht mehr funktioniert. Der Expert Advisor zum Beispiel stoppt den Handel, indem er offene Positionen belässt. Ist das nicht großartig?

Versuchen Sie, "array[0] = 0;" vor der Schleife in der Funktion MassTrendNumber() einzufügen, und stellen Sie sicher, dass das Skript nach dem Array-Überlauffehler beendet wird.

 
evillive:

Ich versuche, einen Oszillator um 0 aus dem Schlusskurs in einem separaten Fenster zu machen, aber ich kann nicht. Vielleicht hat es jemand schon getan, könnten Sie mir bitte die Formel sagen?

D.h. wir haben Close[i] Preis, ich brauche diesen Preis zu gehen über/unter Null wie in MACD/CCI, in einem separaten Fenster, aber egal wie hart ich versuche, ich kann es nicht tun, ohne zusätzliche Werte wie MA: jetzt bekomme ich etwas ähnliches, wenn ich subtrahieren iClose-iMA, aber vielleicht gibt es Varianten ohne Glättung?

Oder im Bereich 0,0...1,0, wenn es keinen Weg um Null herum gibt...


https://www.mql5.com/ru/code/9340
 

Oh, das ist richtig. Nichts ist neu in dieser Welt )))
 
simpleton:

Die folgende Suchmethode ist etwas anders:

Fügen Sie dem Diagramm zwei weiße Trendlinien mit den entsprechenden Namen hinzu, und schon haben Sie es:

Schreiben Sie keine kilometerlangen Funktionen, sondern unterteilen Sie das Programm in kurze "Phrasen" - "Bausteine". Kleine "Bausteine" ergeben größere, und größere Bausteine ergeben noch größere Bausteine. Sie sehen, es ist möglich.

Übergeben Sie alle Daten nur über Parameter an die Funktionen.

Achten Sie darauf, dass Fehler behandelt werden, wenn die aufgerufene Funktion fehlschlägt; wird der Fehler ignoriert, hat dies schwerwiegende Folgen. Die große Mehrheit der Programmabstürze (im Allgemeinen) tritt auf, weil die Fehlerbehandlung in keiner Weise programmiert ist.

Wenn z.B. ArrayResize(), das zur Vergrößerung des Arrays aufgerufen wurde, einen Fehler zurückgibt und der Programmierer dies nicht überprüft hat und auf das vermeintlich vergrößerte Array verweist, tritt ein Fehler auf, der dazu führt, dass das MQL4-Programm später nicht mehr funktioniert. Der Expert Advisor zum Beispiel stoppt den Handel, indem er offene Positionen belässt. Ist das nicht großartig?

Versuchen Sie, "array[0] = 0;" vor der Schleife in MassTrendNumber() einzufügen und stellen Sie sicher, dass das Skript nach dem Array-Überlauffehler beendet wird.


Ja, vielen Dank, Sie sind einfach unbeschreiblich hilfreich, so klar! Awesomeooo!!!