Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1512

 

Столкнулся с тем, что терминал не всегда одинаково выполняет условие на открытие или закрытие позиции.

К примеру, в коде условие закрытия позиции - простая разница между переменными WPPrevValH1 и WPValH1:

            if(Type == POSITION_TYPE_BUY && WPValH1 < WPPrevValH1)
            {
               m_trade.PositionClose(m_position_ticket);
               Print("WPValH1 = ",(string)WPValH1," WPPrevValH1 = ",(string)WPPrevValH1);
            }
            if(Type == POSITION_TYPE_SELL && WPValH1 > WPPrevValH1)
            {
               m_trade.PositionClose(m_position_ticket);
               Print("WPValH1 = ",(string)WPValH1," WPPrevValH1 = ",(string)WPPrevValH1);
            }

На практике вижу, что график индикатора WPR показывает уже значительное отклонение, а позиция все не закрывается. Потом закрывается, когда нахватается убытков. А иной раз все работает, как надо.

То же касается условий открытия. Иной раз сработает правильно, а иной раз - нет.

            if(ugolWPR > -90 && ugolWPR < -Ugol && WPValH1 < sellLevel && WPValH1 < WPPrevValH1 /*&& WPValH1 < WPPrevValH1*/)
            {
                //Print("ugolWPR = ", IntegerToString(ugolWPR), " resultat = ", IntegerToString(resultat));
                if (m_trade.Sell(LotSize,Symbol(),ask0,NULL,NULL,NULL)) // класс CTrade сам открывает позицию, если она упомянута

Что я не так делаю?

Если не читается текстовый файл, код лежит в гугл диске: https://drive.google.com/file/d/1ocpywK8q-7BLjjdVavKhEjo4LJFAUSns/view?usp=drive_link
Файлы:
 
maxvoronin74 #:

Столкнулся с тем, что терминал не всегда одинаково выполняет условие на открытие или закрытие позиции.

К примеру, в коде условие закрытия позиции - простая разница между переменными WPPrevValH1 и WPValH1:

На практике вижу, что график индикатора WPR показывает уже значительное отклонение, а позиция все не закрывается. Потом закрывается, когда нахватается убытков. А иной раз все работает, как надо.

То же касается условий открытия. Иной раз сработает правильно, а иной раз - нет.

Что я не так делаю?

Если не читается текстовый файл, код лежит в гугл диске: https://drive.google.com/file/d/1ocpywK8q-7BLjjdVavKhEjo4LJFAUSns/view?usp=drive_link

Это проблема не MQL, это проблемный ДЦ.

 
Alexey Viktorov #:

Это проблема не MQL, это проблемный ДЦ.

В смысле брокер?
 
А можно как-то определить, сколько памяти расходует определенный индикатор?
 
Pls мне нужно знать, если платежи за vps план на 6 месяцев или 12 месяцев будут приниматься в рассрочку каждый месяц в течение периода времени или если это единовременный платеж общей суммы
 
Прошу помощи. Хочу написать функцию для советника, которая бы смотрела есть или нет дивергенции. Пробую так:

bool divergetion()
{
    int lastFractalHigh = iFractals(NULL, 0, MODE_UPPER, 1); // последний верхний фрактал
    int prevFractalHigh = iFractals(NULL, 0, MODE_UPPER, 2); // предыдущий верхний фрактал

    if (lastFractalHigh > 0 && prevFractalHigh > 0)
    {
        double rsiLast = iRSI(NULL, 0, 14, PRICE_CLOSE, lastFractalHigh);
        double rsiPrev = iRSI(NULL, 0, 14, PRICE_CLOSE, prevFractalHigh);

        if (rsiLast < rsiPrev)
        {
            return true; // есть дивергенция
        }
    }

    int lastFractalLow = iFractals(NULL, 0, MODE_LOWER, 1); // последний нижний фрактал
    int prevFractalLow = iFractals(NULL, 0, MODE_LOWER, 2); // предыдущий нижний фрактал

    if (lastFractalLow > 0 && prevFractalLow > 0)
    {
        double rsiLast = iRSI(NULL, 0, 14, PRICE_CLOSE, lastFractalLow);
        double rsiPrev = iRSI(NULL, 0, 14, PRICE_CLOSE, prevFractalLow);

        if (rsiLast > rsiPrev)
        {
            return true; // есть дивергенция
        }
    }

    return false; // нет дивергенции
}


Эта функция сначала находит два верхних фрактала или два нижних фрактала в зависимости от условий и затем сравнивает значения RSI на барах фракталов. Если условие дивергенции выполняется, функция возвращает true, в противном случае возвращает false.
 
У меня три робота на одном финансовом инструменте, но в разных таймфреймах. Сейчас стоит условие для начала работы if(!PositionSelect(Symbol()) && magic != Magic_m). Идея в том, чтобы позиции открывались, если нет открытых позиций по инструменту именно этого робота, с его мэджиком. Но они все равно не открывают позиции вместе. Только поочереди. Какое условие прописать, чтобы они могли работать одновременно?
 
maxvoronin74 #:

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

 
maxvoronin74 #:
У меня три робота на одном финансовом инструменте, но в разных таймфреймах. Сейчас стоит условие для начала работы if(!PositionSelect(Symbol()) && magic != Magic_m). Идея в том, чтобы позиции открывались, если нет открытых позиций по инструменту именно этого робота, с его мэджиком. Но они все равно не открывают позиции вместе. Только поочереди. Какое условие прописать, чтобы они могли работать одновременно?
И больше так не кричите. Я исправил форматирование Вашего сообщения до приемлемого.
 
Artyom Trishkin #:
И больше так не кричите. Я исправил форматирование Вашего сообщения до приемлемого.
Благодарю. Я скопировал просто из другого приложения. Как есть.
Причина обращения: