Any rookie question, so as not to clutter up the forum. Professionals, don't pass by. Nowhere without you - 6. - page 996

 
Vinin:
You can use arrays and functions
That's why I'm asking, because I've been racking my brain on how to do it.
 
001:
That's why I'm asking you, I'm racking my brain on how to do it.

So far, only generalities have been talked about.

You can't do it without specifics.

Bring me the code that has racked my brain

 
Vinin :

So far we've only talked about the general.

It won't work without specifics.

Give me the code that broke my head


This is for the M15. Every N minutes is a variable, for M15 there are 96 of them. I would like to get a beautiful code instead of this disgrace.

 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:

This is for M15. Every N minutes is a variable, for M15 there are 96. I would like to get a nice code instead of this mess.

To make the right decision, you need to understand what you want to get

 
001:

This is for M15. Every N minutes is a variable, for M15 there are 96. I would like a nice code instead of this mess.

Use arrays and for loop. If the question is to programmatically create a new variable every e.g. Every 5 minutes, for example, to programmatically create a new variable, then there is no such possibility.
 
001:
That's why I'm asking, because I'm racking my brain on how to do it.
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]++; // сравниваем время_лоу и увеличиваем при необходимости ячейку массива
   }

or immediately without comparing and overriding, just enlarging the desired cell:

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

Dear gurus, please, help me to understand my newbie's confusion!

I am trying to understand how indicators written in MT4 work. I expect that indicators are calculated based on bars, i.e. if I set Period (=) 13 in Custom Moving Average indicator parameters, it is about averaging over 13 bars of the appropriate chart.

But I don't see any event handler like OnBar, only OnTick. It means that (my) indicator should automatically "form" bars from ticks by grouping them, say, by minutes (for servicing the chart M1)?

I look in the code of a ready-made indicator Custom Moving Average - it doesn't have OnTick ... The appropriate Calculate event in the manual says:"The Calculateevent is generated only for indicators [...] and at any change of price data". In other words, OnCalculate responds to each tick?

 
fxseminar:

Dear gurus, please, help me to understand my newcomer's confusion!

I am trying to understand how indicators written in MT4 work. I expect that indicators are calculated based on bars, i.e. if I set Period (=) 13 in Custom Moving Average indicator parameters, it is about averaging over 13 bars of the appropriate chart.

But I don't see any event handler like OnBar, only OnTick. It means that (my) indicator should automatically "form" bars from ticks by grouping them, say, by minutes (for servicing the chart M1)?

I look in the code of a ready-made indicator Custom Moving Average - it doesn't have OnTick ... The appropriate Calculate event in the manual says:"The Calculateevent is generated only for indicators [...] and at any change of price data". In other words, OnCalculate responds to each tick?


To every tick if you use Close[0]. You can use Close[1] or Open[0], then you will see the changes only when the bar changes.
 
borilunad:
For each tick, if you use Close[0]. You can use Close[1] or Open[0], then you will see the change only when you change the bar.
-- Sorry, theCustom Moving Average indicatorCANNOT average over ticks. Can you imagine how it would work (look) on a daily timeframe, for example?
 
fxseminar:
-- sorry, theCustom Moving Average indicatorCANNOT average over ticks. How would it work (look) then on a daily timeframe, for example - can you imagine?

It's OK, only the zero (unfinished) bar is recalculated. But it is the bars, the prices of the bars, that are being averaged. If you set appled_price -- PRICE_CLOSE, it will read the close prices of the bars, but not all ticks.

Generally speaking, on an unfinished bar, the close price is equal to the Bid price and, if this price changes, the indicator will summarize 13 price values and divide them by 13. Not long at all...

double  iMA(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   int          ma_period,        // период
   int          ma_shift,         // сдвиг средней
   int          ma_method,        // метод усреднения
   int          applied_price,    // тип цены
   int          shift             // сдвиг

   );



Reason: