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

 
RomanRott:

Я имею в виду прописать какой то код в моем индюке/советнике, которой при включении сразу бы подключал какие то другие индикаторы
Что и как дописать?

Что-то мне кажется что это нужно для тестера. Это решается в пол-пинка без программирования. Создаёшь шаблон со всеми нужными индикаторами и даёшь ему имя "Tester" или имя советника. и тогда при запуске советника в тестере будет открываться график с уже установленными индикаторами.

 
RomanRott:

Я имею в виду прописать какой то код в моем индюке/советнике, которой при включении сразу бы подключал какие то другие индикаторы
Что и как дописать?

Вариантов много. Например  1) ChartApplyTemplate - Применяет к графику указанный шаблон (в шаблоне указан индикатор). 2) дописать в индикатор код включаемого индикатора. 3) в советнике отображать индикатор графическими объектами. 4) ...
 

Добрый день! Подскажите пожалуйста, необходимо индикатор Vinini_HMA интегрировать в советник, подключить и получить данные через resource и iCustom мне удалось, но тестирование стало очень медленным. Посоветуйте пожалуйста как можно сделать чтобы значения индикатора рассчитывались в самом советнике, нужен всего один параметр за 3 последние свечи.

Вот код индикатора:

#property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period=15; 
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(4); 
   SetIndexBuffer(0, ExtMapBuffer); 
   SetIndexBuffer(1, Uptrend); 
   SetIndexBuffer(2, Dntrend); 
   SetIndexBuffer(3, vect); 
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   SetIndexDrawBegin(0,1*period);
   SetIndexDrawBegin(1,2*period);
   SetIndexDrawBegin(2,3*period);

   IndicatorShortName("Signal Line("+period+")"); 
   SetIndexLabel(1,"UP");
   SetIndexLabel(2,"DN");
   return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return(0); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int p = MathSqrt(period); 

   int i, limit0,limit1,limit2;
   
   limit2=Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars==0){
      limit1-=(period);
      limit2-=(2*period);
   }

   for(i = limit0; i >= 0; i--)    vect[i]          = 2*WMA(i, period/2) - WMA(i, period); 
   for(i = limit1; i >= 0; i--)    ExtMapBuffer[i]  = iMAOnArray(vect, 0, p, 0, method, i); 
   for(i = limit2; i >= 0; i--) { 
      Uptrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]> ExtMapBuffer[i+1]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]< ExtMapBuffer[i+1]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return(0); 
} 

Необходимо рассчитать 3 последних значения которые находятся в буфере ExtMapBuffer[i]. Я новичок, строго не судите. Попытался вставить в советник вот эти куски кода, но значения рассчитываются неверно

extern int period1=14;
extern int method1=3;
extern int price1=0;
extern int sdvig1=0;

-----------------------------------------------------
.
int p = MathSqrt(period1);      
        
        int z = 3;
        double vect[];
        ArrayResize(vect,z);
        
for(int i = 2; i >= 0; i--) vect[i] = 2*WMA(i, period1/2) - WMA(i, period1);
                
        int y = 3;;
        double HMA[];
        ArrayResize(HMA,y);
        
for(i = 2; i >= 0; i--) HMA[i]  = iMAOnArray(vect, 0, p, 0, method, i);

-------------------------------------------------------

double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method1, price1, x+sdvig1)); }

Очень нужно! Спасибо! Заранее благодарен! И извините за длинное сообщение.

Файлы:
123.png  22 kb
 

В итоге получаю 3 значения vect[0], vect[1], vect[2]. Но мне нужны значения HMA. HMA[0] рассчитывается, но не верно. HMA[1] и HMA[2] равны нулю.

 
ilfat85:

В итоге получаю 3 значения vect[0], vect[1], vect[2]. Но мне нужны значения HMA. HMA[0] рассчитывается, но не верно. HMA[1] и HMA[2] равны нулю.

Кажется на этой странице это уже обсуждалось... А пробовали обратиться к автору?
 
ilfat85:

Добрый день! Подскажите пожалуйста, необходимо индикатор Vinini_HMA интегрировать в советник, подключить и получить данные через resource и iCustom мне удалось, но тестирование стало очень медленным. Посоветуйте пожалуйста как можно сделать чтобы значения индикатора рассчитывались в самом советнике, нужен всего один параметр за 3 последние свечи.

Вот код индикатора:

Необходимо рассчитать 3 последних значения которые находятся в буфере ExtMapBuffer[i]. Я новичок, строго не судите. Попытался вставить в советник вот эти куски кода, но значения рассчитываются неверно

Очень нужно! Спасибо! Заранее благодарен! И извините за длинное сообщение.

Для тестера не подключайте ресурсом - тормозит (не относится к именно этому индикатору, а вообще ко всем - из ресурсов тормозят в тестере).

Подключайте просто посредством iCustom() из расположения файла в его папке (не из ресурса)

 
STARIJ:
Кажется на этой странице это уже обсуждалось... А пробовали обратиться к автору?

Витя очень редко появляется здесь.

 
STARIJ:
Кажется на этой странице это уже обсуждалось... А пробовали обратиться к автору?

Там немного другой вопрос, там получают значения с индикатора, а я хотел чтоб значения рассчитывались прям в советнике. Формулы вроде простые, но где-то я допускаю ошибку. К автору нет, не обращался. Спасибо за совет, попробую написать ему.

 
Artyom Trishkin:

Для тестера не подключайте ресурсом - тормозит (не относится к именно этому индикатору, а вообще ко всем - из ресурсов тормозят в тестере).

Подключайте просто посредством iCustom() из расположения файла в его папке (не из ресурса)


Спасибо! Не знал об этом, попробую так.

 

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

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit = Bars-1;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for(i = limit; i >= 0; i--)
     {
      if (hl) ExtATRBuffer[i] = (iHigh(Symbol(),Period(),i) - iLow(Symbol(),Period(),i)); 
                        
      else    ExtATRBuffer[i] = MathAbs(iOpen(Symbol(),Period(),i) - iClose(Symbol(),Period(),i));
      
      if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0;
    
    //
      
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
п
Причина обращения: