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

 
Denis Karavaev #:

да уж, сложный вопрос ).. Может цвет на невидимый ставить

indicator_colorN

, в зависимости от ТФ.

При смене ТФ переинициализация ведь идёт и рекалькуляция. Отображение расчёты соответсвенно могут поехать..

От индикатора ещё зависит.. может у вас стрелки ), тогда решение выше подойдет.

По словам модераторов, нет опции чтобы программно скрыть на любых ТФ " It's not possible to set an indicator visualization timeframes by code. " 

Плохо.

Значит остаются только два варианта.

Менять цвет на невидимый

PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, DRAW_NONE);

или задавать невидимый стиль отрисовки

PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_NONE);

Второй вариант проще, так как цветов у одного стиля может быть несколько, например DRAW_COLOR_CANDLES их аж три штуки имеет и придётся перекрашивать каждый.

А стиль один раз сделал невидимым и усё.

Ну и ладно, будем работать с тем, что есть)

 
Alexander Voronkov #:

Немного опоздал...)

Всё равно спасибо  ;-)
 
Aleksandr Slavskii #:

Плохо.

Значит остаются только два варианта.

Менять цвет на невидимый

или задавать невидимый стиль отрисовки

Второй вариант проще, так как цветов у одного стиля может быть несколько, например DRAW_COLOR_CANDLES их аж три штуки имеет и придётся перекрашивать каждый.

А стиль один раз сделал невидимым и усё.

Ну и ладно, будем работать с тем, что есть)

по идее индикатор у Вас останется и все равно будет в окне данных и все равно будет происходить расчет и отрисовка невидимыми линиями

учитывая то, что при переключении ТФма, происходит переинициализация, наверное лучше не инициализировать?

При возврате значения INIT_FAILED индикатор не будет выгружен с графика. При этом оставшийся на графике индикатор является нерабочим — обработчики событий в индикаторе не вызываются.

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

ArrayInitialize(buf,EMPTY_VALUE);

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий . Функции для обработки этих событий должны быть определены в программе...
 
Renat Akhtyamov #:

по идее индикатор у Вас останется и все равно будет в окне данных и все равно будет происходить расчет и отрисовка невидимыми линиями

учитывая то, что при переключении ТФма, происходит переинициализация, наверное лучше не инициализировать?

При возврате значения INIT_FAILED индикатор не будет выгружен с графика. При этом оставшийся на графике индикатор является нерабочим — обработчики событий в индикаторе не вызываются.

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

ArrayInitialize(buf,EMPTY_VALUE);

Ну в принципе да, интересный вариант скрытия индикатора.

Возьму на заметку.

 

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

К примеру, в коде условие закрытия позиции - простая разница между переменными 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.