[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 270

 
Solree:
Ahahaha. Eh bien, je ne suis pas si nouveau...

Alors, soit le code dans le studio, soit les télépathes.
 

Je ne peux pas jeter tout le code, le client se plaindrait. Mais j'ai déjà jeté la partie où il échoue. Le reste du code n'a rien à voir avec ce problème. Pour une raison quelconque, cette boucle particulière produit des valeurs incorrectes lorsque j'exécute MT avec un induke qui a été précédemment placé sur elle. Si je n'ai pas d'idées sans fournir l'ensemble du code, je vais devoir continuer à réfléchir par moi-même :(

 
Je viens de remarquer que si vous redémarrez MT, cela fonctionne correctement...
 
Solree:

Je ne peux pas jeter tout le code, le client va se mettre en colère. Mais j'ai déjà jeté la partie où il échoue. Le reste du code n'est pas lié au problème. J'ai une boucle de rétroaction, cette boucle produit des valeurs incorrectes pour une raison quelconque lorsque j'exécute MT avec un indicateur accroché à elle plus tôt. Si je n'ai pas d'idées sans fournir l'ensemble du code, je vais devoir continuer à réfléchir par moi-même :(


S'il vous plaît, faites les empreintes plus souvent et analysez le journal.

Au fait, la valeur de la variable "count" n'est pas claire dans ce code.

 
count - nombre de barres à analyser ultérieurement. Mais exactement y pour une raison quelconque ne commence pas à partir de la première barre, qui est maintenant, mais à partir de la première barre, qui était quand MT a été fermé avec l'index. i = position de départ, y sera ensuite toujours utilisé dans les cycles intermédiaires, donc i spécialement créé. z est la barre à partir de laquelle tout va compter. Ici il y a les sorties du vieux bar, qui était avant que MT soit fermé, et tout le reste commence à compter à partir de lui.
 

Bonjour, pouvez-vous me dire comment cela peut se produire ?

i = 2, Open[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 Mon Fr Chekulaev1 GBPUSD,M1 : 1*PointX = 0.0001

Voici un extrait des données du journal pendant les tests. 15-(13-1) devrait être 3. Mais dans le testeur, il est de 4. Quel est le problème ?

 

Bonjour à tous, Je demande à nouveau de l'aide avec le MACD. J'ai des difficultés à trouver une valeur spécifique de l'histogramme MACD (taille de la barre). J'ai besoin de calculer la valeur de la barre actuelle (par exemple =-0.001131), de la précédente - n'importe quelle barre.... et trouver la différence, par exemple entre la barre actuelle et la barre précédente.

 
Ivan1:

Bonjour à tous, Je demande à nouveau de l'aide avec le MACD. J'ai des difficultés à trouver une valeur spécifique de l'histogramme MACD (taille de la barre). J'ai besoin de calculer la valeur de la barre actuelle (par exemple =-0.001131), de la précédente - n'importe quelle barre.... et trouver la différence, par exemple entre la barre actuelle et la barre précédente.

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
Je viens de remarquer que si vous redémarrez MT, cela fonctionne correctement...

L'indicateur est assez facile à modifier pour obtenir le bon état. Et la plupart des problèmes disparaîtront. Mais la zone à problème est petite. Le problème est un peu plus large
 

Eh bien, c'est tout alors :

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

En fait, nous avons seulement supprimé les algorithmes de sélection et d'identification du bon élément.

Raison: