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

 
Aleksandr Slavskii #:

Вот так что то показывает.


О! Спс большое - эта картика снизу индика уже похожа на ту что я у себя видел...

 
Aleksandr Slavskii #:

Вот так что то показывает.


да - все верно кажет! Цифры сходятся по формулам что в роботе что в индикаторе!!!

Спасибо вам большое!

про эти фишки думал они умолчательно идут - исчисление у меня было наоборот...

   ArraySetAsSeries(time, true);
   ArraySetAsSeries(open, true);


возьму за правки проверки делать... в роботе делал - в индике не все....

спс еще раз - показывает данные идеально!!!! то что надо...

индикатор возьму за основу других - проведу актуализацию данных.

 
Roman Shiredchenko #:

индикатор возьму за основу других - проведу актуализацию данных.

Нельзя это за основу. Так как вызов iTime и iOpen на каждой итерации, это дорого.

Имхо, правильнее было бы использовать CopyOpen() и CopyTime() их можно копировать в индикаторные буферы, индикатор будет работать быстрее и SetAsSeries не нужен будет.

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

 
Aleksandr Slavskii #:

Нельзя это за основу. Так как вызов iTime и iOpen на каждой итерации, это дорого.

Имхо, правильнее было бы использовать CopyOpen() и CopyTime() их можно копировать в индикаторные буферы, индикатор будет работать быстрее и SetAsSeries не нужен будет.

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

Да. Гляну академический подход - отображу у себя... не доделал сам.... с мт4 переношу коды на мт 5  - спс за подсказку....

Да вот я и подумал что он не нужен из за ф - ии  copy...  короче не провел еще синхронизацию... ;-) в полном обьеме.....
Да - спс - пока индик на график. Ф -ии вшил в робота.
 
current_bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
        k = current_bid/_Point;
       
        lot1 = lot / k;

приветсвую, как преобразовать ценовое значение в целочисленное.

Условно у меня есть значение текущей цены(7.2932), а я хочу его преобразовать в просто 7, чтобы на него можно было разделить лот. Как то сам пытался найти на форумах преобразование подобное, но не справился, может тут есть кто знает как это сделать?

 
statist247 #:

приветсвую, как преобразовать ценовое значение в целочисленное.

Условно у меня есть значение текущей цены(7.2932), а я хочу его преобразовать в просто 7, чтобы на него можно было разделить лот. Как то сам пытался найти на форумах преобразование подобное, но не справился, может тут есть кто знает как это сделать?

lot1 = lot / (int)current_bid;
 

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

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

Maxim Kuznetsov, 2024.09.13 16:51

пункт номер РАЗ: короткий код лучше вставлять непосредственно в сообщение. Web-деятели не осилили "посмотреть приаттаченный файл без загрузки", а не все кто готов помочь или высказаться жаждет скачивать файл и запускать MetaEditor

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[])
  {

//-------------------------------
   int limit=rates_total-prev_calculated;

      
  int i=fmax(0,prev_calculated-1);
   
   for(i=0; i<rates_total; i++)
     {     
      int symb2Shift = iBarShift(Symbol2,Period(),iTime(Symbol1,Period(),i),true);
      if(symb2Shift != -1)
        {      
         if(!Symbol2_Reverse)
           {
            BufferCurrent[i] = NormalizeDouble(100000*Weighting_coefficients1*kVol1*iOpen(Symbol1,Period(),i) - 100000*Weighting_coefficients2*kVol2*iOpen(Symbol2,Period(),i),0);                
        //----------------------------------------
           }
         else
           {
            BufferCurrent[i] = NormalizeDouble(100000*Weighting_coefficients1*iOpen(Symbol1,Period(),i) - 100000*1/(Weighting_coefficients2*iOpen(Symbol2,PERIOD_CURRENT,i)),0);  
            // BufferCurrent[i] = NormalizeDouble(10000*Weighting_coefficients1*iOpen(Symbol1,Period(),i) + 10000*(Weighting_coefficients2*iOpen(Symbol2,PERIOD_CURRENT,i)),0);  
                    
        //----------------------------------------
           }        
        }    
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
  

2. не раскрыто ветвление, "что-же делать если подходящего бара нет". Просто есть вариант что тот просто не подкачался ещё и стоит вернуть prev_calculated

3. в OnInit надо убедится что Symbol2 есть в обзоре рынка или его добавить, плюс там-же и при первом OnCalculate нужны танцы с бубном чтобы принудить терминал начать скачивать бары другого инструмента. Например запросить iBarShift(Symbol2,PERIOD_CURRENT,iTime(_Symbol,iBars(_Symbol,PERIOD_CURRENT)-1)); Или соответсвующий CopyTime. Есть подозрение что от билда к билду бубны разные нужны

4. Использовать специальную форму OnCalculate тут не оправданно, ты-же никак не используешь price[]

А разве такой цил

for(i=0; i<rates_total; i++)

не будет пересчитывать всю историю на каждом тике?

 
Alexey Viktorov #:

А разве такой цил

не будет пересчитывать всю историю на каждом тике?

Там надо чтобы он не считал уже посчитанные.... 
 
Roman Shiredchenko #:
Там надо чтобы он не считал уже посчитанные.... 

у меня в индикаторах типичный цикл :

for(int bar=prev_calculated>0?prev_calculated-1:0 ; bar<rates_total; bar++) {

// bar используется если массив в стиле mt5

int idx = rates_total - bar - 1; // idx для обращения к массивам которые как тайм-серии, mt4-style

...

}