[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 24

 

Sie war bereits in Betrieb. Das Öffnungssignal wurde lange Zeit nicht vorhergesagt, und die Luftzufuhr erfolgte über die gleiche Zeitschaltuhr.

Kurzum: Paulus ist gestorben.

 
Kann mir jemand einen Rat geben: Es ist eine triviale Frage , aber ich scheine sie den ganzen Tag über nicht lösen zu können. Wie kann man den EA dazu bringen, eine Order bei der Eröffnung einer Kerze zu öffnen, und wenn sie auf derselben Kerze schließt, nicht zu öffnen, bis eine neue Kerze erscheint. Das Problem dabei ist, dass, wenn sich das Signal öffnet, die Order auf der gleichen Kerze geschlossen wird, so dass das Signal in Kraft ist, aber es ist nicht mehr relevant, weil der Roboter für den Eröffnungskurs geschrieben wurde. Ich erinnere mich, dass es einen Weg gab, aber ich weiß ihn nicht mehr.
 

Die Flagge wird aufgerufen.

Wenn der Auftrag geöffnet wird, weisen Sie OrderIsOpened=true zu. Wenn eine neue Kerze geöffnet wird - ...=false, usw.

 
tara:

Die Flagge wird aufgerufen.

Wenn der Auftrag geöffnet wird, weisen Sie OrderIsOpened=true zu. Wenn eine neue Kerze geöffnet wird - ...=false, usw.

Ich danke Ihnen. Und wie kodiert man das Öffnen einer neuen Kerze?
 
kwadrad:
Ich danke Ihnen. Und wie kodiert man das Öffnen einer neuen Kerze?


Was immer Sie wollen - Sie haben es in der Hand. Zum Beispiel:

- wenn sich die Zeit durch die TF-Größe ändert (am einfachsten)

- wenn der "neue" offene Preis vom "alten" Preis abweicht

durch dieselbe "Flaggen"-Technologie.

Bitte sehr.

 
kwadrad:
Ich danke Ihnen. Und wie kodiert man das Öffnen einer neuen Kerze?
Erkunden Sie mit einer Suchmaschine.
 
Fartarantula:

Hallo liebe mql-Leute. Hier kommt mein erstes Code-Problem.

Er ist ein Trendindikator. Die Aufgabe ist ein Trendindikator mit den Koordinaten 1. Linie = Maximum des letzten Tages und des Vortages und 2. Linie = Minimum des letzten Tages und des Vortages.

Das wäre in Ordnung, aber wenn Sie zu einem niedrigeren Zeitrahmen wechseln, bleibt die Koordinate am Tagesanfang hängen, obwohl sie auf dem entsprechenden Preisniveau liegt.... und der Sinn der Zeile geht völlig verloren.

Bei der Erstellung eines Trendlinienobjekts ist der Parameter datetime schuld. Ich weiß nicht, wie ich dorthin komme. Es ist notwendig, den Zeitpunkt der Bildung von Preisextrema zu berechnen. Es scheint, dass diese Informationen

Es scheint, dass diese Informationen in den 1-Minuten-Zeitrahmen eingebettet sind. Wie kann der Zeitpunkt bestimmt werden, an dem sich der Zeitrahmen ändert, so dass ein Trend neu gezeichnet wird und die Koordinaten den Balken zugeordnet werden, die den Extremen entsprechen?

Leider hat die Suche nichts zu diesem Thema ergeben. Ich wäre für einen Ratschlag dankbar.

Ich verstehe, dass das Schreiben des Codes selbst Schwierigkeiten bereitet.

Ich biete Ihnen den folgenden Lösungsweg für diese Aufgabe an:

// Ваша трендовая по High на дневном таймфрейме
datetime Time1 = iTime(Symbol(), PERIOD_D1, 1);
double   High1 = iHigh(Symbol(), PERIOD_D1, 1);
datetime Time2 = iTime(Symbol(), PERIOD_D1, 2);
double   High2 = iHigh(Symbol(), PERIOD_D1, 2);
ObjectCreate("High_Trend", OBJ_TREND, 0, Time2, High2, Time1, High1, 0, 0);

// Ищем точное время High'ев на таймфрейме PERIOD
int PERIOD = PERIOD_M5;

int BarTime1 = iBarShift(Symbol(), PERIOD, Time1);
int BarTime2 = iBarShift(Symbol(), PERIOD, Time2);
Time1 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime1, 1));
Time2 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime2, BarTime1+1));

ObjectSet("High_Trend", OBJPROP_TIME2, Time1);
ObjectSet("High_Trend", OBJPROP_TIME1, Time2);

Das einzige Problem ist, dass, wenn Sie den Expert Advisor mit diesem Code im Strategy Tester starten und die PERIOD-Variable auf PERIOD_M1 setzen, beide iBarShift-Funktionen -1 zurückgeben, d.h. die Funktion kann keinen Bar auf TF M1 mit der gleichen Zeit in der Geschichte finden... Ich weiß nicht, warum das so ist.

Ich habe herausgefunden, warum! Für M1-Balken gab es im Testzeitraum keine Vorgeschichte.

 
alex12:

Ich muss das Preisverhalten über die gesamte Historie des Instruments nach MA anzeigen, aber der Indikator wird nicht gezeichnet, wenn er in das Diagramm eingefügt wird.

Was ist das Problem?

Wenn kompiliert = 0 und 0.

Übrigens: Das MT4-Terminal hängt sich auf!

Setzen Sie die Eingabeparameter History und Aver_Bars auf einen kleineren Wert und das Terminal wird nicht mehr "hängen".

Wie kommen Sie darauf, dass der Indikator nicht gezeichnet wird, wenn er mit einem Diagramm verbunden ist? So sah Ihr Indikator aus, als ich ihn auf dem heutigen Chart für EUR/USD TF M1 platzierte:


:D :D :D

 
artmedia70:
Wenn dieser Fehler auftritt (Division durch Null), funktioniert der Expert Advisor nicht mehr. Suchen Sie nach einer Stelle im Code, an der eine Division durch Null vorkommt - höchstwahrscheinlich ergibt sich die Null als Ergebnis der Berechnung einiger Parameter.
Danke, ich habe es herausgefunden. Ich werde es am Wochenende überprüfen.
 

Hallo, liebe Forumsmitglieder.

Natürlich habe ich einige Fragen von einem Neuling. Ich versuche, mql4 zu lernen, da ich noch nie ein Programm entwickelt habe, daher sind die Fragen vielleicht sehr primitiv. Aber ich habe es nie geschafft, sie selbst zu machen.

Ich habe mich entschlossen, mit der Anzeige von Volumina"herumzupfuschen", indem ich eine Linie anstelle eines Balkendiagramms mit einigen Bearbeitungen zeichne. Der Code sollte den folgenden Sinn ergeben. Ausgehend vom zweiten Balken, der sich in die gleiche Richtung wie der vorherige Balken bewegt (beide Balken sind aufwärts gerichtet), wird das Volumen vom zweiten Balken abgeleitet. Als Ergebnis erhalte ich eine unterbrochene Linie im Indikatorfenster, die zwar ab dem zweiten Balken aufwärts gezeichnet wird, aber aus irgendeinem Grund nicht in allen Fällen. Die Linie ist unterbrochen, weil andere Bedingungen ihrer Zeichnung überhaupt nicht definiert sind, sie ist eine Sache der Zukunft. Aber hier selbst zu verstehen, warum die Linie nicht auf jedem zweiten Balken nach oben gezogen wird, kann ich nicht. Bitte helfen Sie mir.

Hier ist der Code. Wenn Sie weitere Kommentare zu anderen Fehlern im Code haben, werde ich Ihnen gerne helfen.

double dVolume=Volume[i];
double vback1=Volume[i+1];

         {
         double vteor12=(dVolume+vback1)/2;
            if (Close[i+1]>Open[i+1] && Close[i]>Open[i]) double UP12=(Close[i]-Open[i+1])*1000; else UP12=0;
            if (UP12!=0) double vrealUP12=(dVolume+vback1)/UP12; else vrealUP12=0;
            if (Close[i+1]>Open[i+1])
            if (Close[i]>Open[i])
            ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
            if (ExtVolumesBuffer[i]<0) ExtVolumesBuffer[i]=0;
              }