Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 996

 
001:

 Начальные переменные есть, но в ходе работы возникает необходимость в новых. Тут и вопрос, как кодом создать НОВЫЕ? У меня N перемененных причем


и используются разные ТФ.

Можно массивы использовать и функции
 
Vinin:
Можно массивы использовать и функции
Поэтому и спрашиваю, что голову сломал как это сделать.
 
001:
Поэтому и спрашиваю, что голову сломал как это сделать.

Пока только об общем говорили. 

Без конкретики не получится. 

Приведите код, что голову поломал 

 
Vinin:

Пока только об общем говорили. 

Без конкретики не получится. 

Приведите код, что голову поломал 


Это для М15. Каждые N минут это переменная, для М15 их 96. Хотелось бы вместо этого безобразия получить красивый код.

int количество_лоу_15=0;
int количество_лоу_30=0;
int количество_лоу_45=0;
int количество_лоу_60=0;
int количество_лоу_75=0;
int количество_лоу_90=0;
int количество_лоу_105=0;
int количество_лоу_120=0;
int количество_лоу_135=0;
int количество_лоу_150=0;
int количество_лоу_165=0;
int количество_лоу_180=0;
int количество_лоу_195=0;
int количество_лоу_210=0;
int количество_лоу_225=0;
int количество_лоу_240=0;
int количество_лоу_255=0;
int количество_лоу_270=0;
int количество_лоу_285=0;
int количество_лоу_300=0;
int количество_лоу_315=0;
int количество_лоу_330=0;
int количество_лоу_345=0;
int количество_лоу_360=0;
int количество_лоу_375=0;
int количество_лоу_390=0;
int количество_лоу_405=0;
int количество_лоу_420=0;
int количество_лоу_435=0;
int количество_лоу_450=0;
int количество_лоу_465=0;
int количество_лоу_480=0;
int количество_лоу_495=0;
int количество_лоу_510=0;
int количество_лоу_525=0;
int количество_лоу_540=0;
int количество_лоу_555=0;
int количество_лоу_570=0;
int количество_лоу_585=0;
int количество_лоу_600=0;
int количество_лоу_615=0;
int количество_лоу_630=0;
int количество_лоу_645=0;
int количество_лоу_660=0;
int количество_лоу_675=0;
int количество_лоу_690=0;
int количество_лоу_705=0;
int количество_лоу_720=0;
int количество_лоу_735=0;
int количество_лоу_750=0;
int количество_лоу_765=0;
int количество_лоу_780=0;
int количество_лоу_795=0;
int количество_лоу_810=0;
int количество_лоу_825=0;
int количество_лоу_840=0;
int количество_лоу_855=0;
int количество_лоу_870=0;
int количество_лоу_885=0;
int количество_лоу_900=0;
int количество_лоу_915=0;
int количество_лоу_930=0;
int количество_лоу_945=0;
int количество_лоу_960=0;
int количество_лоу_975=0;
int количество_лоу_990=0;
int количество_лоу_1005=0;
int количество_лоу_1020=0;
int количество_лоу_1035=0;
int количество_лоу_1050=0;
int количество_лоу_1065=0;
int количество_лоу_1080=0;
int количество_лоу_1095=0;
int количество_лоу_1110=0;
int количество_лоу_1125=0;
int количество_лоу_1140=0;
int количество_лоу_1155=0;
int количество_лоу_1170=0;
int количество_лоу_1185=0;
int количество_лоу_1200=0;
int количество_лоу_1215=0;
int количество_лоу_1230=0;
int количество_лоу_1245=0;
int количество_лоу_1260=0;
int количество_лоу_1275=0;
int количество_лоу_1290=0;
int количество_лоу_1305=0;
int количество_лоу_1320=0;
int количество_лоу_1335=0;
int количество_лоу_1350=0;
int количество_лоу_1365=0;
int количество_лоу_1380=0;
int количество_лоу_1395=0;
int количество_лоу_1410=0;
int количество_лоу_1425=0;
////////   
   if(время_лоу   ==    15   )   количество_лоу_15   =количество_лоу_15   +1;
   if(время_лоу   ==    30   )   количество_лоу_30   =количество_лоу_30   +1;
   if(время_лоу   ==    45   )   количество_лоу_45   =количество_лоу_45   +1;
   if(время_лоу   ==    60   )   количество_лоу_60   =количество_лоу_60   +1;
   if(время_лоу   ==    75   )   количество_лоу_75   =количество_лоу_75   +1;
   if(время_лоу   ==    90   )   количество_лоу_90   =количество_лоу_90   +1;
   if(время_лоу   ==   105   )   количество_лоу_105   =количество_лоу_105   +1;
   if(время_лоу   ==   120   )   количество_лоу_120   =количество_лоу_120   +1;
   if(время_лоу   ==   135   )   количество_лоу_135   =количество_лоу_135   +1;
   if(время_лоу   ==   150   )   количество_лоу_150   =количество_лоу_150   +1;
   if(время_лоу   ==   165   )   количество_лоу_165   =количество_лоу_165   +1;
   if(время_лоу   ==   180   )   количество_лоу_180   =количество_лоу_180   +1;
   if(время_лоу   ==   195   )   количество_лоу_195   =количество_лоу_195   +1;
   if(время_лоу   ==   210   )   количество_лоу_210   =количество_лоу_210   +1;
   if(время_лоу   ==   225   )   количество_лоу_225   =количество_лоу_225   +1;
   if(время_лоу   ==   240   )   количество_лоу_240   =количество_лоу_240   +1;
   if(время_лоу   ==   255   )   количество_лоу_255   =количество_лоу_255   +1;
   if(время_лоу   ==   270   )   количество_лоу_270   =количество_лоу_270   +1;
   if(время_лоу   ==   285   )   количество_лоу_285   =количество_лоу_285   +1;
   if(время_лоу   ==   300   )   количество_лоу_300   =количество_лоу_300   +1;
   if(время_лоу   ==   315   )   количество_лоу_315   =количество_лоу_315   +1;
   if(время_лоу   ==   330   )   количество_лоу_330   =количество_лоу_330   +1;
   if(время_лоу   ==   345   )   количество_лоу_345   =количество_лоу_345   +1;
   if(время_лоу   ==   360   )   количество_лоу_360   =количество_лоу_360   +1;
   if(время_лоу   ==   375   )   количество_лоу_375   =количество_лоу_375   +1;
   if(время_лоу   ==   390   )   количество_лоу_390   =количество_лоу_390   +1;
   if(время_лоу   ==   405   )   количество_лоу_405   =количество_лоу_405   +1;
   if(время_лоу   ==   420   )   количество_лоу_420   =количество_лоу_420   +1;
   if(время_лоу   ==   435   )   количество_лоу_435   =количество_лоу_435   +1;
   if(время_лоу   ==   450   )   количество_лоу_450   =количество_лоу_450   +1;
   if(время_лоу   ==   465   )   количество_лоу_465   =количество_лоу_465   +1;
   if(время_лоу   ==   480   )   количество_лоу_480   =количество_лоу_480   +1;
   if(время_лоу   ==   495   )   количество_лоу_495   =количество_лоу_495   +1;
   if(время_лоу   ==   510   )   количество_лоу_510   =количество_лоу_510   +1;
   if(время_лоу   ==   525   )   количество_лоу_525   =количество_лоу_525   +1;
   if(время_лоу   ==   540   )   количество_лоу_540   =количество_лоу_540   +1;
   if(время_лоу   ==   555   )   количество_лоу_555   =количество_лоу_555   +1;
   if(время_лоу   ==   570   )   количество_лоу_570   =количество_лоу_570   +1;
   if(время_лоу   ==   585   )   количество_лоу_585   =количество_лоу_585   +1;
   if(время_лоу   ==   600   )   количество_лоу_600   =количество_лоу_600   +1;
   if(время_лоу   ==   615   )   количество_лоу_615   =количество_лоу_615   +1;
   if(время_лоу   ==   630   )   количество_лоу_630   =количество_лоу_630   +1;
   if(время_лоу   ==   645   )   количество_лоу_645   =количество_лоу_645   +1;
   if(время_лоу   ==   660   )   количество_лоу_660   =количество_лоу_660   +1;
   if(время_лоу   ==   675   )   количество_лоу_675   =количество_лоу_675   +1;
   if(время_лоу   ==   690   )   количество_лоу_690   =количество_лоу_690   +1;
   if(время_лоу   ==   705   )   количество_лоу_705   =количество_лоу_705   +1;
   if(время_лоу   ==   720   )   количество_лоу_720   =количество_лоу_720   +1;
   if(время_лоу   ==   735   )   количество_лоу_735   =количество_лоу_735   +1;
   if(время_лоу   ==   750   )   количество_лоу_750   =количество_лоу_750   +1;
   if(время_лоу   ==   765   )   количество_лоу_765   =количество_лоу_765   +1;
   if(время_лоу   ==   780   )   количество_лоу_780   =количество_лоу_780   +1;
   if(время_лоу   ==   795   )   количество_лоу_795   =количество_лоу_795   +1;
   if(время_лоу   ==   810   )   количество_лоу_810   =количество_лоу_810   +1;
   if(время_лоу   ==   825   )   количество_лоу_825   =количество_лоу_825   +1;
   if(время_лоу   ==   840   )   количество_лоу_840   =количество_лоу_840   +1;
   if(время_лоу   ==   855   )   количество_лоу_855   =количество_лоу_855   +1;
   if(время_лоу   ==   870   )   количество_лоу_870   =количество_лоу_870   +1;
   if(время_лоу   ==   885   )   количество_лоу_885   =количество_лоу_885   +1;
   if(время_лоу   ==   900   )   количество_лоу_900   =количество_лоу_900   +1;
   if(время_лоу   ==   915   )   количество_лоу_915   =количество_лоу_915   +1;
   if(время_лоу   ==   930   )   количество_лоу_930   =количество_лоу_930   +1;
   if(время_лоу   ==   945   )   количество_лоу_945   =количество_лоу_945   +1;
   if(время_лоу   ==   960   )   количество_лоу_960   =количество_лоу_960   +1;
   if(время_лоу   ==   975   )   количество_лоу_975   =количество_лоу_975   +1;
   if(время_лоу   ==   990   )   количество_лоу_990   =количество_лоу_990   +1;
   if(время_лоу   ==   1005   )   количество_лоу_1005   =количество_лоу_1005   +1;
   if(время_лоу   ==   1020   )   количество_лоу_1020   =количество_лоу_1020   +1;
   if(время_лоу   ==   1035   )   количество_лоу_1035   =количество_лоу_1035   +1;
   if(время_лоу   ==   1050   )   количество_лоу_1050   =количество_лоу_1050   +1;
   if(время_лоу   ==   1065   )   количество_лоу_1065   =количество_лоу_1065   +1;
   if(время_лоу   ==   1080   )   количество_лоу_1080   =количество_лоу_1080   +1;
   if(время_лоу   ==   1095   )   количество_лоу_1095   =количество_лоу_1095   +1;
   if(время_лоу   ==   1110   )   количество_лоу_1110   =количество_лоу_1110   +1;
   if(время_лоу   ==   1125   )   количество_лоу_1125   =количество_лоу_1125   +1;
   if(время_лоу   ==   1140   )   количество_лоу_1140   =количество_лоу_1140   +1;
   if(время_лоу   ==   1155   )   количество_лоу_1155   =количество_лоу_1155   +1;
   if(время_лоу   ==   1170   )   количество_лоу_1170   =количество_лоу_1170   +1;
   if(время_лоу   ==   1185   )   количество_лоу_1185   =количество_лоу_1185   +1;
   if(время_лоу   ==   1200   )   количество_лоу_1200   =количество_лоу_1200   +1;
   if(время_лоу   ==   1215   )   количество_лоу_1215   =количество_лоу_1215   +1;
   if(время_лоу   ==   1230   )   количество_лоу_1230   =количество_лоу_1230   +1;
   if(время_лоу   ==   1245   )   количество_лоу_1245   =количество_лоу_1245   +1;
   if(время_лоу   ==   1260   )   количество_лоу_1260   =количество_лоу_1260   +1;
   if(время_лоу   ==   1275   )   количество_лоу_1275   =количество_лоу_1275   +1;
   if(время_лоу   ==   1290   )   количество_лоу_1290   =количество_лоу_1290   +1;
   if(время_лоу   ==   1305   )   количество_лоу_1305   =количество_лоу_1305   +1;
   if(время_лоу   ==   1320   )   количество_лоу_1320   =количество_лоу_1320   +1;
   if(время_лоу   ==   1335   )   количество_лоу_1335   =количество_лоу_1335   +1;
   if(время_лоу   ==   1350   )   количество_лоу_1350   =количество_лоу_1350   +1;
   if(время_лоу   ==   1365   )   количество_лоу_1365   =количество_лоу_1365   +1;
   if(время_лоу   ==   1380   )   количество_лоу_1380   =количество_лоу_1380   +1;
   if(время_лоу   ==   1395   )   количество_лоу_1395   =количество_лоу_1395   +1;
   if(время_лоу   ==   1410   )   количество_лоу_1410   =количество_лоу_1410   +1;
   if(время_лоу   ==   1425   )   количество_лоу_1425   =количество_лоу_1425   +1;
 
001:

Это для М15. Каждые N минут это переменная, для М15 их 96. Хотелось бы вместо этого безобразия получить красивый код.

Для правильного решения нужно понимать - а что хотелось получить 

 
001:

Это для М15. Каждые N минут это переменная, для М15 их 96. Хотелось бы вместо этого безобразия получить красивый код.

Используйте массивы и цикл for. Если вопрос состоит в том, чтобы каждые, напр. 5 минут, программно создавать новую переменную, то такой возможности нет.
 
001:
Поэтому и спрашиваю, что голову сломал как это сделать.
int MASS_LOW [];                                         // объявляем массив
int quantity=96;                                         // количество_лоу, можно изменять в программе и делать заново ресайз массива
ArrayResize(MASS_LOW,quantity);                          // размер масиива = количество_лоу
ArrayFill(MASS_LOW,0,quantity,0);                        // обнуление массива при необходмости

for(cnt=0; cnt<quantity; cnt++)                       // перебираем количество_лоу (от 0 до 95)
   {
   int c=(cnt+1)*15;                                    // 15 30 45 60 ....
   if (time_low == c) MASS_LOW [cnt]=MASS_LOW [cnt]++; // сравниваем время_лоу и увеличиваем при необходимости ячейку массива
   }

или сразу без сравнения и перебора, просто увеличиваем нужную ячейку:

cnt = time_low/15-1; 
MASS_LOW [cnt]=MASS_LOW [cnt]++;
 

Уважаемые мэтры, развейте, пожалуйста, недоумение новичка! 

Пытаюсь разобраться, как работают написанные на MT4 индикаторы. Ожидаю, что индикаторы рассчитываются на основании баров, то есть если в параметрах индикатора Custom Moving Average указано Period (=) 13, то это речь про усреднение по 13 барам соответствующего графика.

Однако не вижу у (созданного мною) индикатора никакого обработчика события типа OnBar, только OnTick. То есть (мой) индикатор должен сам "формировать" бары из тиков, группируя их, скажем, по минутам (для обслуживания графика M1)?

Залезаю в код готового индикатора Custom Moving Average - там нет и OnTick ... только OnCalculate, а соответствующее событие Calculate в хелпе сказано: "Событие Calculate генерируется только для индикаторов [...] и при любом изменении ценовых данных". То есть OnCalculate реагирует на каждый тик?

 
fxseminar:

Уважаемые мэтры, развейте, пожалуйста, недоумение новичка! 

Пытаюсь разобраться, как работают написанные на MT4 индикаторы. Ожидаю, что индикаторы рассчитываются на основании баров, то есть если в параметрах индикатора Custom Moving Average указано Period (=) 13, то это речь про усреднение по 13 барам соответствующего графика.

Однако не вижу у (созданного мною) индикатора никакого обработчика события типа OnBar, только OnTick. То есть (мой) индикатор должен сам "формировать" бары из тиков, группируя их, скажем, по минутам (для обслуживания графика M1)?

Залезаю в код готового индикатора Custom Moving Average - там нет и OnTick ... только OnCalculate, а соответствующее событие Calculate в хелпе сказано: "Событие Calculate генерируется только для индикаторов [...] и при любом изменении ценовых данных". То есть OnCalculate реагирует на каждый тик?


На каждый тик, если пользуетесь Close[0]. Можете использовать Close[1] или Open[0], тогда будете видеть изменения только при смене бара.
 
borilunad:
На каждый тик, если пользуетесь Close[0]. Можете использовать Close[1] или Open[0], тогда будете видеть изменения только при смене бара.
-- извините, индикатор Custom Moving Average НЕ МОЖЕТ усреднять по тикам. Как бы он тогда работал (выглядел) на суточном, например, таймфрейме - представляете?