[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 776

 
vasya_vasya:
indem Sie ein Errow-Objekt erstellen, in dem Sie den Symbolcode auswählen, oder indem Sie ein Label-Objekt verwenden

Danke) Schade, dass es einfach keine Punkte gibt(
 
FoxUA:
Ich bin kein Arbeiter, aber ich versuche, einen Expert Advisor für die Woche zu schreiben, an der ich gearbeitet habe. Ich versuche, einen EA für einen Job zu schreiben, aber ich habe erst vor einer Woche mehr als nur seinen Namen und seine Anwendung gelernt, Ich weiß nicht, was es bewirkt, aber ich fand es schwierig, Dinge auseinander zu nehmen, ohne zu wissen, wofür sie da sind, also beschloss ich, etwas Neues zu machen, aber natürlich kann man nicht alles sehen, ich habe nur das getan, was ich tun wollte: Ich habe den VORGEMERKTEN Auftrag zum VORGEMERKTEN Preis abgenommen, und es war keine große Sache. ABER ICH DANKE IHNEN FÜR IHRE ZEIT,

Nichts für ungut. Ihr Code ist für einen Anfänger zu kompliziert. Man muss vom Einfachen zum Komplexen übergehen. Das Lernen muss systematisch erfolgen, sonst nützt es nichts.
 
Kann ich mql4 verwenden, um die Nummer des Balkens oder einen anderen Preisparameter dieses Balkens herauszufinden, wenn der Zeitpunkt seiner (dieses Balkens) Öffnung bekannt ist?
 
drknn:

Seien Sie nicht beleidigt. Ihr Code ist für einen Anfänger zu kompliziert. Man muss vom Einfachen zum Komplexen übergehen. Sie müssen systematisch an das Lernen herangehen, sonst ist es sinnlos.

Ich stimme nicht mit Ihnen dort, sollten Sie ein Ziel im Auge haben und der Rest wird folgen, aber Sie brauchen Hilfe. Wie für die Komplexität, was ist nicht so kompliziert und einfach mit dem Beispiel-Handelsroboter? Ich mache nicht eine große EA mit komplizierten Berechnungen, sondern eine einfache, die den Markt ein öffnet, hängt, ändert und löscht das ganze Brett, um den Betrieb und die Methoden der Auswirkungen auf die andere zu lernen!
 
FoxUA:

Ich stimme Ihnen da nicht zu, Sie sollten ein Ziel haben, alles andere wird folgen, aber natürlich können Sie nicht ohne Hilfe tun. Was die Komplexität betrifft, was denken Sie, ist einfach und leicht zu bauen? Ich mache nicht einen großen EA mit komplexen Berechnungen und Indikatoren, sondern ein einfaches, das einen Markt öffnet, dann ändert und löscht das ganze Brett, um das Funktionsprinzip und die Methoden zu lernen, die den anderen beeinflussen!


Ändern Sie die Logik der Codekonstruktion und die Logik der Benennung von Variablen. Das ist das erste, was Sie tun sollten. Es ist in Ordnung, wenn ein Variablenname länger als 5 Zeichen ist. Im Kampf um die Klarheit des Codes ist die Klarheit der Namen, die Abgrenzung der Blöcke durch Leerzeichen, Absatzzeichen und Kommentare verdammt wichtig. Je mehr Sie eine Sprache lernen (und nicht nur MQL), desto komplizierter wird Ihr Code. Wenn Sie es sich nicht zur Gewohnheit machen, leicht lesbare Variablennamen zu vergeben, und wenn Sie es sich nicht zur Gewohnheit machen, den Code in Blöcken (mit Erklärungen) zu organisieren, werden Sie früher oder später einen Code erstellen, bei dem es Ihnen schwer fallen wird, den logischen Fehler zu finden, und Sie werden sich selbst dafür verfluchen, dass Sie Ihren Code so unlesbar gemacht haben.

Wenn der von Ihnen gezeigte Code für Sie als Anfänger nicht kompliziert erscheint, ist das nur ein Pluspunkt für Sie.

 
FoxUA:
Nun, was empfehlen Sie? Ihre Meinung würde mich sehr interessieren!

Hier ist ein Beispiel für Code, der in Blöcken organisiert ist und bei dem die Namen der Variablen keine Zweifel daran aufkommen lassen, warum eine bestimmte Variable verwendet wird - sehen Sie sich die Namen der Variablen und die Kommentare zu den Blöcken an...

 
RekkeR:
Guten Abend an alle und eine gute Woche für Sie. Ich glaube, ich bin dumm mit der Hitze, eigentlich ist die Frage, wie man den Abstand zwischen den Linien in Pips zu bestimmen?

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Abstand=(Preis1-Preis2)/Punkt;

Dies ist der Fall, wenn der Abstand zwischen zwei Linien zum aktuellen Zeitpunkt ermittelt werden soll.

 
drknn:

Hier ist ein Beispiel für Code, der in Blöcken organisiert ist und in dem die Namen der Variablen keine Zweifel darüber aufkommen lassen, warum diese oder jene Variable verwendet wird - sehen Sie sich die Namen an, die Kommentare zu den Blöcken...

Ich stimme der Tatsache zu, dass man sich manchmal daran erinnern muss, was man dort schreiben wollte und sich nicht erinnert, aber es ist mehr eine Arbeitsmethode, aber keine Studie, es ist sozusagen der Pinsel in den Händen eines Künstlers, und ich interessiere mich für die Wahl der Farben und Techniken für das Schreiben eines einfachen kleinen Bildes, denn ich habe bereits eine Landschaft und sie ist klar geformt, so fragte ich mich, ist es möglich, in der Hand ein interessantes Buch zu haben, das die Technik des Schreibens für alle die gleichen im Internet und im Lehrbuch beschreibt, nur in anderen Worten und was Sie auf dem Beispiel der Wurzeln schrieb, ist es eine Technik der Robotik, so dass ich glücklich sein würde, wenn die Beispiele und Bilder zu lesen!

 
tara:

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Abstand=(Preis1-Preis2)/Punkt;

Dies ist der Fall, wenn der Abstand zwischen zwei Linien zum aktuellen Zeitpunkt ermittelt werden soll.

Es gibt mehrere horizontale Linien, ich muss die Quoten zwischen ihnen in verschiedenen Kombinationen bestimmen, im Prinzip bin ich in diesem Stadium mit der Bestimmung zwischen den beiden Linien recht zufrieden, den Rest werde ich manuell machen. Vielleicht gibt es ein fertiges Skript oder einen solchen Indikator? Wir danken Ihnen für Ihr Feedback.
 
FoxUA:

...

Das ist die Art von Dingen, die ich gerne mit Beispielen und Bildern lesen würde!

Dann machen wir ein Experiment! Lassen Sie uns zwei Skripte schreiben. Eine wird eine korrekte Beschreibung der Funktion enthalten. Die andere wird die falsche enthalten. Dies ist also das richtige Skript:

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы правильного скрипта                 |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("---- Правильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

Und dies ist das falsche Drehbuch:

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы неправильного скрипта               |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("----НЕправильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue=36){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

Sie ist falsch, denn die Zeile double MyKoren(double MyValue=36){ initialisiert die Variable MyValue mit dem Wert = 36. Es macht keinen Sinn, weil wir den Wert = an die Variable DlyaKornya in das Unterprogramm übergeben .

Nun werfen wir beide Skripte nacheinander in das Diagramm. Das sehen wir hier:

Leider führten beide Skripte zu demselben Ergebnis.

Das zweite (falsche) Skript hätte den Wert = 6 ergeben müssen. Der Compiler hat höchstwahrscheinlich eine narrensichere Funktion eingebaut, da die Zeile double MyKoren(double MyValue=36){ keinen Sinn hat. Die Initialisierung der darin enthaltenen Variablen mit dem Wert =36 wird wahrscheinlich nur funktionieren, wenn die Funktion ohne Angabe von Parametern aufgerufen wird. In unserem Fall muss folgendes passiert sein: Beim Aufruf des Unterprogramms wurde zuerst die Variable double MyValue deklariert, dann wurde ihr der Wert = 36 zugewiesen und erst danach der in der Variablen DlyaKornya gespeicherte Wert. Eine andere Erklärung kann ich mir nicht vorstellen.

Wie auch immer, es ist besser, keine Konstruktionen wie double MyKoren(double MyValue=36){ zu verwenden, sondern es so zu schreiben, wie es sein sollte - double MyKoren(double MyValue){, sonst werden Sie sich wundern, warum das Unterprogramm nicht so funktioniert, wie es sollte.