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

 

Такой вопрос можно ли создать один шаблон и применить его к нескольким функциям?

template<typename T>
void Fun1(T &y)
{тело
}
void Fun1(T &r,T k)
{тело
}
int Fun1(T &r,T k)
{тело return(0);
}

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

 
Доброго времени суток! Подскажите пожалуйста, как добавить котировки по нефти, индексам и металам 
 
vfrfhjybgjakjncmrb:
Доброго времени суток! Подскажите пожалуйста, как добавить котировки по нефти, индексам и металам 

Это зависит во первых от конторы транслирует она их или нет. Также это зависит от терминала в котором вы работаете. Если контора их транслирует значит нужно знать на каких счетах и при каких условиях транслируются эти котировки, возможно нужно просто раскрыть список инструментов и эти инструменты там есть. Если контора их транслирует на невозможных для вас условиях то вам придётся создавать график с этими котировками и каждый раз обновлять. Вы точно знаете что ваша контора транслирует Нефть например?

 
Seric29:

Такой вопрос можно ли создать один шаблон и применить его к нескольким функциям?

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

Нет. Отдельно для каждой функции должно быть дано полное её описание. Иначе потом, спустя время, не прочитаешь собственный код.

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

Нет. Отдельно для каждой функции должно быть дано полное её описание. Иначе потом, спустя время, не прочитаешь собственный код.

Жаль. Собственный код в любом случае если не будешь заниматься не прочитаешь или прочитаешь. Просто хотелось бы писать компактные программы ведь часто в функциях используешь переменные одного и того же типа поэтому я и спросил. Я думал через "классы" можно, но что-то не разобрался с ними пока мне "классы" не по зубам. Значит буду знать придётся для многих функций шаблоны делать.

 

Кто может подсказать почему не работает такая запись. Хочу обратиться к полям структур которые хранят массив и повернуть его в зависимости от того какое условие будет выполнено.Выполнение условия зависит от функции ArrayDimension.

   struct SD1{
   int a[10];//int q[10][2];
};SD1 a1;

struct SD2{
   int a[10][2];
};SD2 a2;

template<typename T>//,typename W
void MoveArray(T & s){//,W&e
   //Alert(ArrayDimension(s.a));
     int r=0;r=ArrayDimension(s.a);Print("r-ранг: ",r);if(r==1)пишу условие что если ранг равен 1му 
      {for(int cn=0; cn<=8; cn++)                              то крутить этот цикл
     {                
      s.a[cn]=s.a[cn+1];
     }} else if (r==2)            если ранг равен 2ум
      {for(int cn=0; cn<=8; cn++) крутить этот цикл
     {                
      s.a[cn][0]=s.a[cn+1][0];
      s.a[cn][1]=s.a[cn+1][1];
     }}  
}

В конечном итоге залазит в первый цикл не смотря на то что это условие if(r==1)ложное, почему оно туда залазит если ранг равен 2ум, как оно несмотря на ложь заходит в тело где что-то выполняется.Функцию вызываю так

   MoveArray(a2);в OnTick
   for(int i=0;i<10;i++){Print("q: ",i,": ",a2.a[i][0]);}
int yy=ArrayDimension(a2.a);Print("Ранг: ",yy," ");
 
Seric29:

Жаль. Собственный код в любом случае если не будешь заниматься не прочитаешь или прочитаешь. Просто хотелось бы писать компактные программы ведь часто в функциях используешь переменные одного и того же типа поэтому я и спросил. Я думал через "классы" можно, но что-то не разобрался с ними пока мне "классы" не по зубам. Значит буду знать придётся для многих функций шаблоны делать.

не могу уловить суть, каким образом достигалась бы компактность. В примере выше экономия 2 строчки. Если уж хочется так их сэкономить, то можно прописать макроподстановку и использовать её в строке перед функцией

#define templ(T) templeate<typename T>

templ(T1) void Funct(T1 a)
 
Ilya Prozumentov:
#define templ(T) template<typename T>

templ(T1) void Funct(T1 a)

Значит перед каждой функцией делать запись templ(T1)и она буде принимать переменную или нужный аргумент? А почему объявляется templ(T)а вызывается templ(T1),нужно добавлять цифру перед каждой функцией(templ(T1)templ(T2)templ(T3)) или везде писать templ(T1)? А если несколько параметров забито в template<typename T>то как будет, вот так template<typename T,typename P,typename Q> - templ(T,P,Q).

 
В общем проблема такая ! Хочу тралить прибыль другим советником, а этот советник не дает тянуть стоп ллос за прибылью ! Может кто нибудь поправить ! Автор не отвечает!
Файлы:
cm-MA_Gread.mq4  18 kb
Причина обращения: