[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 270

 
Solree:
Ahahaha. Bueno, no soy tan nuevo...

Bueno, entonces o el código en el estudio o los telépatas.
 

No puedo tirar todo el código, el cliente se quejaría. Pero ya he lanzado la parte en la que falla. El resto del código no tiene nada que ver con este problema. Por alguna razón, este bucle en particular produce valores incorrectos cuando ejecuto MT con un induke que fue colocado previamente en él. Si no se me ocurren ideas sin aportar todo el código, tendré que seguir pensando por mi cuenta :(

 
Acabo de notar que si se reinicia MT de nuevo, funciona correctamente...
 
Solree:

No puedo tirar todo el código, el cliente se enfadará. Pero ya he lanzado la parte en la que falla. El resto del código no está relacionado con el problema. Tengo un bucle de retroalimentación, ese bucle produce valores incorrectos por alguna razón cuando ejecuto MT con un indicador enganchado a él anteriormente. Si no se me ocurren ideas sin aportar todo el código, tendré que seguir pensando por mi cuenta :(


Por favor, haz las impresiones más a menudo y analiza el registro.

Por cierto, en ese código no queda claro qué valor tiene la variable "count".

 
count - número de barras que se analizarán posteriormente. Pero exactamente y por alguna razón no empieza desde la primera barra, que es ahora, sino desde la primera barra, que fue cuando se cerró MT con el índice. i = posición para empezar, y se seguirá utilizando en los ciclos intermedios, por lo que se ha creado especialmente i. z es la barra a partir de la cual todo contará. Aquí y sale el antiguo bar, que era antes de que se cerrara MT, y todo lo demás empieza a contar a partir de él.
 

Hola, ¿podría decirme cómo puede ocurrir esto?

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 My Fr Chekulaev1 GBPUSD,M1: 1*PointX = 0.0001

Este es un extracto de los datos de registro durante las pruebas. 15-(13-1) debería ser 3. Pero en el probador es 4. ¿Qué ocurre?

 

Hola a todos, vuelvo a pedir ayuda con el MACD. Tengo problemas para encontrar un valor específico del histograma del MACD (tamaño de la barra). Necesito calcular el valor de la barra actual (por ejemplo =-0,001131), la anterior - cualquier barra... y encontrar la diferencia, por ejemplo, entre la barra actual y la anterior.

 
Ivan1:

Hola a todos, vuelvo a pedir ayuda con el MACD. Tengo problemas para encontrar un valor específico del histograma del MACD (tamaño de la barra). Necesito calcular el valor de la barra actual (por ejemplo =-0,001131), la anterior - cualquier barra... y encontrar la diferencia, por ejemplo, entre la barra actual y la anterior.

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
Acabo de notar que si se reinicia MT de nuevo, funciona correctamente...

El indicador es bastante fácil de ajustar al estado correcto. Y la mayoría de los problemas desaparecerán. Pero el área del problema es pequeña. El problema es un poco más amplio
 

Bueno, eso es todo entonces:

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

Bueno, en realidad sólo se han eliminado los algoritmos para seleccionar e identificar el artículo correcto.