Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 784

 
Roman Efimov:
В общем проблема такая ! Хочу тралить прибыль другим советником, а этот советник не дает тянуть стоп ллос за прибылью ! Может кто нибудь поправить ! Автор не отвечает!

Ну так поставьте во входных параметрах "0" и не будет стопов

extern int     TrailingStop         = 0;       //трейлингстоп, если 0, то нет трейлинга

 
Vitaly Muzichenko:
Каким образом можно удалить определённый индикатор со всех графиков одним движением? С применением нового шаблона не подходит. Может скрипт?

все равно чтобы удалить индикатор нужно график закрыть

почему шаблон не подходит? - эксперт на нем висит? - я проверял, можно в шаблон графика эксперт сохранить и из этого же эксперта применить шаблон - эксперт удалится и потом заново на этом шаблоне запустится

 
Igor Makanu:

все равно чтобы удалить индикатор нужно график закрыть

почему шаблон не подходит? - эксперт на нем висит? - я проверял, можно в шаблон графика эксперт сохранить и из этого же эксперта применить шаблон - эксперт удалится и потом заново на этом шаблоне запустится

На разных графиках разметки и прочее, заменять шаблон нельзя)

 
Vitaly Muzichenko:

На разных графиках разметки и прочее, заменять шаблон нельзя)

погуглил, есть ChartIndicatorDelete() 

https://docs.mql4.com/ru/chart_operations/chartindicatordelete

никогда не пользовался, ничего не скажу

ChartIndicatorDelete - Операции с графиками - Справочник MQL4
ChartIndicatorDelete - Операции с графиками - Справочник MQL4
  • docs.mql4.com
Удаляет с указанного окна графика индикатор с указанным именем. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError...
 
Igor Makanu:

погуглил, есть ChartIndicatorDelete() 

https://docs.mql4.com/ru/chart_operations/chartindicatordelete

никогда не пользовался, ничего не скажу

Да, спасибо, Алексей уже дал о ней знать.

Сделал так, всё работает кроме: Как-бы так волшебно прописать, чтоб был выбор во входных параметрах какой именно удалить?

#property version   "1.00"
#property strict
#property show_inputs

enum ind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4  // Indicator 4
};

input string ProgName = "Candles Signal";

long list_id[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
 int size=ChartGetIDList(list_id);
  //
  for(int i=size-1;i>=0;i--) {
   long id=list_id[i];
   for(int k=ChartIndicatorsTotal(id,0);k>=0;k--) {
    if(ChartIndicatorName(id,0,k)==ProgName) {
     Print(ChartSymbol(id),"=",ChartIndicatorName(id,0,k));
     ChartIndicatorDelete(id,0,ProgName);
    }
   }
  }
 }
//+------------------------------------------------------------------+
int ChartGetIDList(long &List[]) {
 int i=0;
 long chartID=ChartFirst();
 while(chartID!=-1) {
    i++;
     ArrayResize(List,i);
     List[i-1]=chartID;
   chartID=ChartNext(chartID);
  }
  return(ArraySize(List));
 }
 

Есть индикатор который может получать значения со старшего периода, для цикла for(i=0,y=0;i<li_0;i++)

Как сделать для цикла for (int i = li_0; i >= 0; i--)

   datetime TimeArray[];
   int    i,shift,y=0;
      int counted = IndicatorCounted();
   if (counted < 0) return (-1);
   if (counted > 0) counted--;
   int li_0 = Bars - counted;
    
   // Plot defined timeframe on to current timeframe   
   ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); 
   
   for(i=0,y=0;i<li_0;i++)
 //  for (int i = li_0; i >= 0; i--) //ДЛЯ ТАКОГО ЦИКЛА КАК СДЕЛАТЬ
     {
     if (Time[i]<TimeArray[y]) y++;
     stro_1=NormalizeDouble(iCustom(NULL, TimeFrame, "slow", 0, y+1), Digits);
     }
 
Vitaly Muzichenko:

Да, спасибо, Алексей уже дал о ней знать.

Сделал так, всё работает кроме: Как-бы так волшебно прописать, чтоб был выбор во входных параметрах какой именно удалить?

вот скрипт для проверки

#property strict
#property show_inputs
enum Eind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4  // Indicator 4
};

input Eind param = ind_1;
//+------------------------------------------------------------------+
void OnStart()
  {
   Alert("Выбран :",param);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

вот скрипт для проверки

Я так понимаю, что нужно делать выбор через switch, и там вносить названия

Ваш код печатает int значение, а нужно выбирать string


 
Vitaly Muzichenko:

Я так понимаю, что нужно делать выбор через switch, и там вносить названия

Ваш код печатает int значение, а нужно выбирать string


А EnumToString() тебе не поможет? Проблема только в том может случиться, если в коротком имени индикатора есть пробел или ещё какой-то недопустимый символ. Ну в крайнем случае можно сделать массив string переменных и оттуда брать по индексу перечисления. Или это не для единоличного пользования и объяснять придётся дольше чем написать код?

 
Alexey Viktorov:

А EnumToString() тебе не поможет? Проблема только в том может случиться, если в коротком имени индикатора есть пробел или ещё какой-то недопустимый символ. Ну в крайнем случае можно сделать массив string переменных и оттуда брать по индексу перечисления. Или это не для единоличного пользования и объяснять придётся дольше чем написать код?

Попробую через switch сделать, но позже. В именах есть пробелы 

Причина обращения: