[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 270

 
Solree:
Ahahaha. Bem, eu não sou assim tão novo...

Bem, então ou o código no estúdio ou os telepatas.
 

Eu não posso jogar todo o código, o cliente reclamaria. Mas eu já joguei a parte onde ela falha. O resto do código não tem nada a ver com este problema. Por alguma razão, este loop em particular produz valores incorretos quando eu executo MT com um induke que foi colocado anteriormente sobre ele. Se eu não tiver nenhuma idéia sem fornecer o código completo, terei que continuar pensando por mim mesmo :(

 
Só notei que se você reiniciar a MT novamente, ela funciona corretamente...
 
Solree:

Eu não posso jogar o código inteiro, o cliente me repreenderá. Mas eu já joguei a parte onde ela falha. O resto do código não está relacionado com o problema. Eu tenho um loop de feedback, esse loop produz valores incorretos por alguma razão, quando eu corro o MT com um indicador ligado a ele antes. Se eu não tiver nenhuma idéia sem fornecer o código completo, terei que continuar pensando por mim mesmo :(


Por favor, faça as impressões com mais freqüência e analise o registro.

A propósito, não está claro nesse código qual é o valor da variável "contagem".

 
contagem - número de barras a serem analisadas posteriormente. Mas exatamente y por alguma razão não começa da primeira barra, que é agora, mas da primeira barra, que foi quando a MT foi fechada com o índice. i = posição para começar, y ainda será então utilizado em ciclos intermediários, assim especialmente criado i. z é a barra a partir da qual tudo vai contar. Aqui y sai o antigo bar, que era antes do MT ser fechado, e tudo mais começa a contar a partir dele.
 

Olá! Você poderia me dizer como isso pode acontecer?

i = 2, Aberto[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 Meu Fr Chekulaev1 GBPUSD,M1: Baixo[i+1] = 1,5714, Baixo[i-2] = 1,5715
14:21:15 2011.01.12 18:08 Meu Fr Chekulaev1 GBPUSD,M1: Aberto[i-2]-(Baixo[i]-1*PointX) = 0,0004
14:21:15 2011.01.12 18:08 My Fr Chekulaev1 GBPUSD,M1: 1*PointX = 0.0001

Este é um trecho dos dados dos registros durante os testes. 15-(13-1) deve ser 3. Mas no testador é 4. o que está errado?

 

Olá a todos, estou pedindo ajuda novamente com o MACD. Estou tendo problemas para encontrar um valor específico do histograma MACD (tamanho da barra). Preciso calcular o valor da barra atual (por exemplo =-0,001131), a anterior - qualquer barra... e encontrar a diferença, por exemplo, entre a barra atual e a anterior.

 
Ivan1:

Olá a todos, estou pedindo ajuda novamente com o MACD. Estou tendo problemas para encontrar um valor específico do histograma MACD (tamanho da barra). Preciso calcular o valor da barra atual (por exemplo =-0,001131), a anterior - qualquer barra... e encontrar a diferença, por exemplo, entre a barra atual e a anterior.

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
Só notei que se você reiniciar a MT novamente, ela funciona corretamente...

O indicador é bastante fácil de ajustar para o estado correto. E a maioria dos problemas desaparecerá. Mas a área problemática é pequena. O problema é um pouco mais amplo
 

Bem, então é isso:

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

Bem, na verdade, apenas removeu os algoritmos para selecionar e identificar o item certo.