[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 270

 
Solree:
Ahahaha. Beh, non sono così nuovo...

Allora o il codice nello studio o i telepati.
 

Non posso buttare tutto il codice, il cliente si lamenterebbe. Ma ho già lanciato la parte in cui fallisce. Il resto del codice non ha nulla a che fare con questo problema. Per qualche ragione, questo particolare ciclo produce valori errati quando eseguo MT con un induke che è stato precedentemente inserito. Se non mi viene nessuna idea senza fornire tutto il codice, dovrò continuare a pensare da solo :(

 
Ho appena notato che se si riavvia di nuovo MT, funziona correttamente...
 
Solree:

Non posso buttare tutto il codice, il cliente si arrabbierebbe. Ma ho già lanciato la parte in cui fallisce. Il resto del codice non è collegato al problema. Ho un ciclo di feedback, che produce valori errati per qualche motivo quando faccio girare MT con un indicatore agganciato prima. Se non mi viene nessuna idea senza fornire l'intero codice, dovrò continuare a pensare da solo :(


Per favore, fate le stampe più spesso e analizzate il registro.

A proposito, non è chiaro in quel codice che valore ha la variabile "count".

 
count - numero di barre da analizzare in seguito. Ma esattamente y per qualche motivo non parte dalla prima barra, che è ora, ma dalla prima barra, che era quando MT era chiuso con l'indice. i = posizione di partenza, y sarà poi ancora utilizzato nei cicli intermedi, quindi appositamente creato i. z è l'asticella da cui tutto verrà conteggiato. Qui y uscite vecchio bar, che era prima che MT fosse chiuso, e tutto il resto inizia a contare da esso.
 

Ciao, potresti dirmi come può succedere?

i = 2, Apertura[i-2] = 1,5715
14:21:15 2011.01.12 18:08 My Fr Chekulaeva1 GBPUSD,M1: Low[i] = 1.5713, Low[i-1] = 1.5714
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: Low[i+1] = 1.5714, Low[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 My Fr Chekulaev1 GBPUSD,M1: 1*PointX = 0.0001

Questo è un estratto dei dati di log durante i test. 15-(13-1) dovrebbe essere 3. Ma nel tester è 4. Cosa c'è di sbagliato?

 

Ciao a tutti, chiedo di nuovo aiuto con il MACD. Ho problemi a trovare un valore specifico dell'istogramma MACD (dimensione della barra). Ho bisogno di calcolare il valore della barra attuale (per esempio =-0.001131), quella precedente - qualsiasi barra... e trovare la differenza, per esempio tra la barra attuale e quella precedente.

 
Ivan1:

Ciao a tutti, chiedo di nuovo aiuto con il MACD. Ho problemi a trovare un valore specifico dell'istogramma MACD (dimensione della barra). Ho bisogno di calcolare il valore della barra attuale (per esempio =-0.001131), quella precedente - qualsiasi barra... e trovare la differenza, per esempio tra la barra attuale e quella precedente.

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
Ho appena notato che se si riavvia di nuovo MT, funziona correttamente...

L'indicatore è abbastanza facile da regolare allo stato giusto. E la maggior parte dei problemi scomparirà. Ma l'area del problema è piccola. Il problema è un po' più ampio
 

Bene, questo è tutto allora:

#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);
}

Beh, in realtà ha solo rimosso gli algoritmi per selezionare e identificare l'elemento giusto.