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

 
Solree:
Ahahaha. Nun, so neu bin ich nicht...

Nun, dann entweder der Code im Studio oder die Telepathen.
 

Ich kann nicht den ganzen Code wegwerfen, der Kunde würde sich beschweren. Aber ich habe den Teil, an dem es scheitert, schon geworfen. Der Rest des Codes hat nichts mit diesem Problem zu tun. Aus irgendeinem Grund erzeugt diese bestimmte Schleife falsche Werte, wenn ich MT mit einem Induke ausführe, das zuvor darauf platziert wurde. Wenn ich keine Ideen bekomme, ohne den gesamten Code zur Verfügung zu stellen, muss ich weiter selbst denken :(

 
Ich habe gerade bemerkt, dass es richtig funktioniert, wenn man MT neu startet...
 
Solree:

Ich kann nicht den ganzen Code wegwerfen, sonst wird der Kunde sauer. Aber ich habe den Teil, an dem es scheitert, schon geworfen. Der Rest des Codes steht in keinem Zusammenhang mit dem Problem. Ich habe eine Rückkopplungsschleife, die aus irgendeinem Grund falsche Werte erzeugt, wenn ich MT mit einem Indikator ausführe, der zuvor daran angeschlossen war. Wenn ich keine Ideen bekomme, ohne den gesamten Code zur Verfügung zu stellen, muss ich weiter selbst denken :(


Bitte machen Sie die Ausdrucke öfter und analysieren Sie das Protokoll.

Übrigens ist in diesem Code nicht klar, welchen Wert die Variable "count" hat.

 
count - Anzahl der Balken, die später ausgewertet werden sollen. Aber genau y aus irgendeinem Grund nicht von der ersten Bar, die jetzt ist, sondern von der ersten Bar, die war, als MT wurde mit dem Index geschlossen. i = Anfangsposition, y wird dann noch in den Zwischenzyklen verwendet, also eigens angelegte i. z ist der Balken, ab dem alles zählt. Hier y Ausgänge alte Bar, die vor MT geschlossen wurde, und alles andere beginnt von ihm zu zählen.
 

Hallo! Könnten Sie mir bitte sagen, wie das passieren kann?

i = 2, Offen[i-2] = 1,5715
14:21:15 2011.01.12 18:08 My Fr Chekulaeva1 GBPUSD,M1: Tief[i] = 1.5713, Tief[i-1] = 1.5714
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: Tief[i+1] = 1.5714, Tief[i-2] = 1.5715
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: Open[i-2]-(Low[i]-1*PointX) = 0.0004
14:21:15 2011.01.12 18:08 Mein Fr Chekulaev1 GBPUSD,M1: 1*PointX = 0.0001

Dies ist ein Auszug aus den Protokolldaten während der Tests. 15-(13-1) sollte 3 sein. Im Testgerät ist es jedoch 4. Was ist los?

 

Hallo zusammen, ich bitte wieder um Hilfe mit dem MACD. Ich habe Probleme, einen bestimmten MACD-Histogrammwert (Balkengröße) zu finden. Ich muss den Wert des aktuellen (z.B. =-0.001131) Balkens, des vorherigen - eines beliebigen Balkens - berechnen... und finden Sie die Differenz, z. B. zwischen dem aktuellen und dem vorherigen Balken.

 
Ivan1:

Hallo zusammen, ich bitte wieder um Hilfe mit dem MACD. Ich habe Probleme, einen bestimmten MACD-Histogrammwert (Balkengröße) zu finden. Ich muss den Wert des aktuellen (z.B. =-0.001131) Balkens, des vorherigen - eines beliebigen Balkens - berechnen... und finden Sie die Differenz, z. B. zwischen dem aktuellen und dem vorherigen Balken.

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
Ich habe gerade bemerkt, dass es richtig funktioniert, wenn man MT neu startet...

Der Indikator lässt sich recht einfach in den richtigen Zustand versetzen. Und die meisten Probleme werden verschwinden. Aber der Problembereich ist klein. Das Problem ist ein wenig umfassender
 

Nun, das war's dann:

#property indicator_chart_window

extern int count = 1500;

color colors[4];
bool check = true;
int tempCount;

int init()
{
    colors[0] = Blue;
    colors[1] = Purple;
    colors[2] = Orange;
    colors[3] = Red;

    tempCount = count;

    return;
}

int deinit()
{
    ObjectDelete("ResistLine0");
    ObjectDelete("ResistLine1");
    ObjectDelete("ResistLine2");
    ObjectDelete("ResistLine3");

    return;
}

int start()
{
    if (Period() != 60)
    {
        ObjectDelete("ResistLine0");
        ObjectDelete("ResistLine1");
        ObjectDelete("ResistLine2");
        ObjectDelete("ResistLine3");
        
        check = true;
    }
    
    if (TimeHour(Time[1]) == 8 && !check)
        check = true;
    
    if (count != tempCount)
    {
        tempCount = count;
        check = true;
    }

    if (check && Period() == 60)
    {
        ObjectDelete("ResistLine0");
        ObjectDelete("ResistLine1");
        ObjectDelete("ResistLine2");
        ObjectDelete("ResistLine3");
    
        int temp[20];
        int i, y, x, z;
        double price; //Она нужна для заполнения и выбора
        
        for (y = 1; y <= 24; y++)
            if (TimeHour(Time[y]) == 8)
            {//Тут y будет не корректным, когда запускаешь МТ с уже повешенным индюком
                i = y;
                z = y;
                x = i+count;
                
                break;
            }

        for (; i <= x; i++)
        {
            //Тут заполняется temp
        }
        
        double levels[4];
        i = z;
        
        //Тут выбираются нужные элементы из temp

        for (y = 0; y < 4; y++)
            createLine("ResistLine"+y, levels[y], colors[y], i);
        
        check = false;
    }

    return;
}

void createLine(string name, double price, color c, int i)
{
    ObjectCreate(name, OBJ_TREND, 0, Time[i], NormalizeDouble(price, Digits), Time[i]+(24*3600), NormalizeDouble(price, Digits));
    ObjectSet(name, OBJPROP_COLOR, c);
    ObjectSet(name, OBJPROP_WIDTH, 2);
    ObjectSet(name, OBJPROP_BACK, true);
    ObjectSet(name, OBJPROP_RAY, false);
}

Nun, eigentlich wurden nur die Algorithmen zur Auswahl und Identifizierung des richtigen Gegenstands entfernt.