Для работы индикатора необходимо, чтобы текущее количество баров в истории было не менее, чем
cb+pcb=1000 и p=10 - это параметры в настройках индикатора:
Соответственно, если количество баров в истории будет меньше 1010, то индикатор считать не будет. А учитывая, что в советнике просматривается последний закрытый бар, то количество баров должно быть не меньше, чем 1011.
Вот можете посмотреть на вот этом тестовом советнике на визуализаторе:
- Код: выделить все
//+------------------------------------------------------------------+
//| TTTTT_test.mq4 |
//| Kalkin, www.investforum.ru |
//| http://www.investforum.ru |
//+------------------------------------------------------------------+
#property copyright "Kalkin, www.investforum.ru"
#property link "http://www.investforum.ru"
#property version "1.00"
#property strict
input string paramSignalMA = "#### Настройки для индикатора TTTTT"; //---
input string IndName = "TTTTT"; // Имя индикатора
input int p=10;
input int s=5;
input double distance=2.0;
input bool showBb=true;
input bool showCl=true;
input int barsig=1;
input int arrots=30;
input int arrsz=1;
input int ATR=1000;
input int cb=1000;
input int SignalShift = 1; // Номер бара, на котором появляется сигнал (>0)
string notes = "";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
notes = "";
double cmdbuy = iCustom(Symbol(), Period(), IndName, p,s,distance,showBb,showCl,barsig,arrots,arrsz,ATR,cb, 4, SignalShift);
double cmdsell = iCustom(Symbol(), Period(), IndName, p,s,distance,showBb,showCl,barsig,arrots,arrsz,ATR,cb, 5, SignalShift);
double upline = iCustom(Symbol(), Period(), IndName, p,s,distance,showBb,showCl,barsig,arrots,arrsz,ATR,cb, 3, SignalShift);
double dnline = iCustom(Symbol(), Period(), IndName, p,s,distance,showBb,showCl,barsig,arrots,arrsz,ATR,cb, 2, SignalShift);
AddNote(StringConcatenate("Баров в истории = ", Bars));
if (cmdbuy==EMPTY_VALUE) AddNote("Стрелка вверх = НЕТ");
else AddNote(StringConcatenate("Стрелка вверх = ", cmdbuy));
if (cmdsell==EMPTY_VALUE) AddNote("Стрелка вниз = НЕТ");
else AddNote(StringConcatenate("Стрелка вниз = ", cmdsell));
AddNote(StringConcatenate("Нижняя линия = ", dnline));
AddNote(StringConcatenate("Верхняя линия = ", upline));
Comment(notes);
}
//+------------------------------------------------------------------+
void AddNote(string cmnt)
{
notes = notes+"\n"+cmnt;
}
Когда количество баров достигает нужных нам 1011 штук, индикатор начинает отрисовывать линии, а функция iCustom принимает все значения правильно.
Индикатор так устроен, что не будет он считать, если ему истории не хватает. Так было задумано разработчиком, так устроен его математический аппарат. Об этом я говорил ещё в одном из предыдущих постов, но почему-то прислушиваться не хотим...