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

 
это если у индикатора есть имя, а если он добавлен по хендлу не все так просто
 
AkaEdie #:
это если у индикатора есть имя, а если он добавлен по хендлу не все так просто

Не понимаю, а что мешает самому прописать (вставить) это короткое имя в коде используемого индикатора? Например так, как это сделано в коде индикатора у Артёма Тришкина, только при этом заменив имя "Net Volume" на какое-нибудь своё:

IndicatorSetString(INDICATOR_SHORTNAME,"Net Volume");

С уважением, Владимир.

 
MrBrooklin #:

Не понимаю, а что мешает самому прописать (вставить) это короткое имя в коде используемого индикатора? Например так, как это сделано в коде индикатора у Артёма Тришкина, только при этом заменив имя "Net Volume" на какое-нибудь своё:

С уважением, Владимир.

Это прописывается в индикаторе, а не в момент его постановки на график.

 
вот и я о томже, у меня индикатор аллигатор используется, как его в таком случае подключить к графику если я эту строку кода пропишу в коде индиктаора? через inlude? а конфликта не будет?
 
AkaEdie #:
вот и я о томже, у меня индикатор аллигатор используется, как его в таком случае подключить к графику если я эту строку кода пропишу в коде индиктаора? через inlude? а конфликта не будет?

Меня вот только сейчас, когда я полистал документацию повнимательней, заинтересовал этот вопрос…

Получается кроме как с двойным циклом никак.

Получилось вот что…

Код

long chartID = ChartID();
//---
/*******************Script program start function********************/
void OnStart()
 {
  int totalWnd = (int)ChartGetInteger(chartID, CHART_WINDOWS_TOTAL);
  for(int w = 0; w < totalWnd; w++)
   {
    int totalInd = ChartIndicatorsTotal(chartID, w);
    for(int i = 0; i < totalInd; i++)
     {
      string indName = ChartIndicatorName(chartID, w, i);
      int handle = ChartIndicatorGet(chartID, w, indName);
      Print("INDICATOR_SHORTNAME ", indName, " handle ", handle);
     }
   }
 }/******************************************************************/

/********************************************************************\

Результат

2024.04.20 09:59:54.730 Test (EURUSD,H1)        INDICATOR_SHORTNAME MA(10) handle 10
2024.04.20 09:59:54.730 Test (EURUSD,H1)        INDICATOR_SHORTNAME SAR(0.02,0.20) handle 11
2024.04.20 09:59:54.730 Test (EURUSD,H1)        INDICATOR_SHORTNAME MACD(12,26,9) handle 12
2024.04.20 09:59:54.731 Test (EURUSD,H1)        INDICATOR_SHORTNAME Stoch(5,3,3) handle 13

Так вот получается, что если из всех имеющихся индикаторов надо в цикле дойти до нужного проверяя хендлы и когда обнаружил просто прервать цикл и по этому короткому имени индикатор удалить.


Другой вариант, попроще… Если вам известно, что индикатор в основном окне, то цикл перебора окон индикаторов можно убрать.


Вот сделал ещё добавление индикатора программно

long chartID = ChartID();
//---
/*******************Script program start function********************/
void OnStart()
 {
  int hAll = iAlligator(_Symbol, PERIOD_CURRENT, 13, 8, 8, 5, 5, 3, MODE_SMA, PRICE_MEDIAN);
  ChartIndicatorAdd(chartID, 0, hAll);
  Print("hAll ", hAll);
  int totalWnd = (int)ChartGetInteger(chartID, CHART_WINDOWS_TOTAL);
  for(int w = 0; w < totalWnd; w++)
   {
    int totalInd = ChartIndicatorsTotal(chartID, w);
    for(int i = 0; i < totalInd; i++)
     {
      string indName = ChartIndicatorName(chartID, w, i);
      int handle = ChartIndicatorGet(chartID, w, indName);
      Print("INDICATOR_SHORTNAME ", indName, " handle ", handle);
     }
   }
 }/******************************************************************/

Получился результат

2024.04.20 10:20:59.131 Test (EURUSD,H1)        hAll 10
2024.04.20 10:20:59.131 Test (EURUSD,H1)        INDICATOR_SHORTNAME MA(10) handle 11
2024.04.20 10:20:59.131 Test (EURUSD,H1)        INDICATOR_SHORTNAME SAR(0.02,0.20) handle 12
2024.04.20 10:20:59.131 Test (EURUSD,H1)        INDICATOR_SHORTNAME Alligator(13,8,5) handle 10
2024.04.20 10:20:59.131 Test (EURUSD,H1)        INDICATOR_SHORTNAME MACD(12,26,9) handle 13
2024.04.20 10:20:59.131 Test (EURUSD,H1)        INDICATOR_SHORTNAME Stoch(5,3,3) handle 14
 

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

    long chartID = ChartID(); // Получаем идентификатор текущего графика
    int totalWnd = (int)ChartGetInteger(chartID, CHART_WINDOWS_TOTAL); // Получаем общее количество подокон на графике

    // Перебираем каждое подокно
    for (int w = 0; w < totalWnd; w++) {
        int totalInd = ChartIndicatorsTotal(chartID, w); // Получаем количество индикаторов в текущем подокне

        // Перебираем каждый индикатор в текущем подокне
        for (int i = totalInd - 1; i >= 0; i--) {
            string indName = ChartIndicatorName(chartID, w, i); // Получаем имя индикатора по индексу

            // Удаляем индикатор по имени
            if (!ChartIndicatorDelete(chartID, w, indName)) {
                Print("Ошибка удаления индикатора ", indName, " с графика: ", GetLastError());
            } else {
                Print("Удален индикатор: ", indName);
            }
        }
    }

спасибо огромное, можно как удалить все индикаторы перед добавлением советника на график из OnInit, так и при деинциализации в OnDeinit советника, хорошо было бы доабвить куда то статью по этому поводу. Завидую вашему опыту.

 
Alexey Viktorov #:

Это прописывается в индикаторе, а не в момент его постановки на график.

Привет, Алексей! Не знаю, но вроде бы всё чётко и понятно расписал в своем сообщении:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

MrBrooklin, 2024.04.20 05:04

Не понимаю, а что мешает самому прописать (вставить) это короткое имя в коде используемого индикатора? Например так, как это сделано в коде индикатора у Артёма Тришкина, только при этом заменив имя "Net Volume" на какое-нибудь своё:

IndicatorSetString(INDICATOR_SHORTNAME,"Net Volume");

С уважением, Владимир.

С уважением, Владимир.
 

это прописывается в индикаторе и ваш ответ был не полезным. я просил код удаления а не функцию переименования индикатора.

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

Владимир.

Alexey Viktorov
Alexey Viktorov
  • 2024.01.15
  • www.mql5.com
Профиль трейдера
 
Я новичок в бэктестинге. Пытаюсь протестировать советник на основе Мартингейла на MT4. По какой-то причине мой график не работает. Когда советник мартингейлит, чтобы компенсировать убыточную позицию, вы должны видеть большие провалы на графике, но я этого не вижу. Я вижу большие горбы, когда должен видеть большие провалы. Есть какие-нибудь мысли?
Файлы:
IMG_1330.png  24 kb
 

Добрый день! Почему-то перестал работать тестер стратегий. Хотя еще ночью работал.

Как это починить?

С уважением, Александр