[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 270

 
Solree:
Ахахах. Ну не на столько ж я новичок...

Ну тогда либо код в студию, либо к телепатам.
 

Весь код не могу кинуть, заказчик будет ругаться. А часть когда, где сбоит кинул ведь уже. Вся остальная часть не имеет отношения к данной проблеме. Почему-то именно тот цикл выдает не корректные значения, когда запускаю МТ с ранее повешенным на него индюком. Если не будет никаких идей без предоставления всего кода, то придется дальше самому думать :(

 
Заметил только что, что если снова перезапустить МТ, то работает корректно...
 
Solree:

Весь код не могу кинуть, заказчик будет ругаться. А часть когда, где сбоит кинул ведь уже. Вся остальная часть не имеет отношения к данной проблеме. Почему-то именно тот цикл выдает не корректные значения, когда запускаю МТ с ранее повешенным на него индюком. Если не будет никаких идей без предоставления всего кода, то придется дальше самому думать :(


Расставляйте принты почаще и анализируйте лог.

Кстати, в том коде не ясно какое значение имеет переменная "count".

 
count - количество баров, которые потом нужно будет анализировать. Но именно y почему-то начинает не с первого бара, который сейчас, а с первого, который был при закрытии МТ с индюком. i = позиция, с которой начать, y потом будет еще использоваться в промежуточных циклах, так что специально i создал. z бар, с которого будет все считать. Вот y выдает старый бар, который был до закрытия МТ, ну и все остальное начинает считать с него.
 

Здравсвуйте ! Скажите, пожалуйста, как такое может быть ??

i = 2, Open[i-2] = 1.5715
14:21:15 2011.01.12 18:08 Мои Фр Чекулаева1 GBPUSD,M1: Low[i] = 1.5713, Low[i-1] = 1.5714
14:21:15 2011.01.12 18:08 Мои Фр Чекулаева1 GBPUSD,M1: Low[i+1] = 1.5714, Low[i-2] = 1.5715
14:21:15 2011.01.12 18:08 Мои Фр Чекулаева1 GBPUSD,M1: Open[i-2]-(Low[i]-1*PointX) = 0.0004
14:21:15 2011.01.12 18:08 Мои Фр Чекулаева1 GBPUSD,M1: 1*PointX = 0.0001

Это выдержка из данных журнала при тестировании. 15-(13-1) должно быть 3. А в тестере выходит 4. Что не так ?

 

Всем привет, вновь обращаюсь за помощью по поводу MACD. я никак не могу добиться того, чтобы найти конкретное значение гистограммы MACD (размер столбика). мне нужно высчитать значение текущего (например =-0,001131) столбика, предыдущего - любого... и найти разницу, например между текущим и предыдущим.

 
Ivan1:

Всем привет, вновь обращаюсь за помощью по поводу MACD. я никак не могу добиться того, чтобы найти конкретное значение гистограммы MACD (размер столбика). мне нужно высчитать значение текущего (например =-0,001131) столбика, предыдущего - любого... и найти разницу, например между текущим и предыдущим.

https://www.mql5.com/ru/forum/134688/page256
 
Solree:
Заметил только что, что если снова перезапустить МТ, то работает корректно...

Индикатор довольно легко доработать до нужного состояния. И большинство проблем исчезнет. Но проблемного участка мало. Проблема немного шире
 

Ну как-то так тогда:

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

Ну собственно убрал только алгоритмы выбора и определения нужного элемента.