Нужна линия баланса в виде индикатора

 

Нужна линия баланса в виде индикатора при вызове из тестера.

Сделал индюк. Запускаю, на новом баре каждый раз новое окно открывается.

Кто скажет в чем дело? Код MQL4, там уже спрашивал.

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

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
extern double r=1.0; 
double balance[];
 
int init()
{
   SetIndexBuffer(0,balance);
    IndicatorDigits( 2 );
    SetIndexStyle( 0, DRAW_LINE );

}
int start()
{
    int counted_bars=IndicatorCounted(),                      
    i,limit;
    if(counted_bars>0)
      counted_bars--;  
    limit=Bars-counted_bars-1;
    
    for(i=limit;i>=0;i--)balance[i] =r;
   
    return(0);
}

 в советнике:

double r;
r=AccountBalance();
double indicator=iCustom(NULL,0,"Balance",r,0,1);

 Вот так при вызове из тестера индикатор начинает спамить окнами.

 

 

Все верно работает.
Вы каждый раз вызываете новый индикатор с новыми параметрами iCustom(NULL,0,"Balance",r,0,1);


Нет возможности передавать значение с советника в индикатор через iCustom.
Вы можете сделать это:
- через глобальные переменные терминала
- через запись чтение с файла
- DLL для общего доступа к переменным
- найти готовое решение в кодобазе
- ..... 

 
ALXIMIKS:

Все верно работает.
Вы каждый раз вызываете новый индикатор с новыми параметрами iCustom(NULL,0,"Balance",r,0,1);


Нет возможности передавать значение с советника в индикатор через iCustom.
Вы можете сделать это:
- через глобальные переменные терминала
- через запись чтение с файла
- DLL для общего доступа к переменным
- найти готовое решение в кодобазе
- ..... 

По глобальным переменным пробовал, ничего не выходит.

На основе статьи  komposter

Ссылку найти не могу. Может в старых билдах работало?

Делал вот так(пост 292):

Вот что получается:

  

в индикаторе попробовал на каждом баре значение получать, та же картина:

int start()
{
int counted_bars=IndicatorCounted(),                      
    i,limit;
    if(counted_bars>0)
      counted_bars--;  
    limit=Bars-counted_bars-1;
    
    for(i=limit;i>=0;i--){balance[i]=GlobalVariableGet( "vGrafBalance" );}
    return(0);
}
Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - MQL4 форум
  • www.mql5.com
Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - MQL4 форум
 
forexman77:
Вам не нужны глобальные переменные, как не нужно передавать значения из советника в индикатор. Попробуйте найти решение этой проблемы иначе.
 
C-4:
Вам не нужны глобальные переменные, как не нужно передавать значения из советника в индикатор. Попробуйте найти решение этой проблемы иначе.

Ну, Вы прямо сходи туда не знаю куда, возьми, то не знаю, что)

Можно подсказку. Все равно, что подсказывают,  потом разбираю, пытаясь понять.

Но, вот время масса уходит, если не спрашивать.  

Линия индикатора мне нужна, так как есть желание сделать из нее мувинги с пересечением. 

 

 Сделал так в индикаторе:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue

double balance[];
int init()
{
    SetIndexBuffer(0,balance);
    IndicatorDigits( 2 );
    SetIndexStyle( 0, DRAW_LINE );
}
int start()
{
    int counted_bars=IndicatorCounted(),                      
    i,limit;
    if(counted_bars>0)
      counted_bars--;  
    limit=Bars-counted_bars-1;
    
    for(i=limit;i>=0;i--)balance[i] =AccountBalance();
   
    return(0);
}

 в советнике вызываю:

double indicator=iCustom(NULL,0,"Balance",0,1);

 на всех барах значение баланса равняется значению в конце теста.

 
forexman77:

Ну, Вы прямо сходи туда не знаю куда, возьми, то не знаю, что)

Можно подсказку. Все равно, что подсказывают,  потом разбираю, пытаясь понять.

Прямо из индикатора получите доступ к торговому окружению (количество сделок, фин. результат и т.д.). 
 
Перед вызовом индикатора отправить в глобальную переменную значение, в индикаторе забрать значение и положить его в индикаторный буфер  для бара с индексом 0. Для тестера пойдет.
 
C-4:
Прямо из индикатора получите доступ к торговому окружению (количество сделок, фин. результат и т.д.). 
Ну, вот же в предыдущем посте запрашивают баланс, все буферы заполняются последним значением.
 
Integer:
Перед вызовом индикатора отправить в глобальную переменную значение, в индикаторе забрать значение и положить его в индикаторный буфер  для бара с индексом 0. Для тестера пойдет.
Во втором своем сообщении делал и так ничего не получается.
 
Индикатор не надо вызывать из советника. В советнике только глобальной переменой присваиваем значение. Индикатор тоже проще некуда - присваиваем нулевому элементу буфера значение глобальной переменной.  Будет работать только в визуальном режиме (в самом процессе тестирования).
Причина обращения: