[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 875

 
reag:

Да, первый вариант не работает, правда я работаю на нестандартном таймфрейме, второй работает. Всем спасибо!


  первый вариант работает - как минимум 20 суток на демосчете(больше не было времени проверять) и в тестере на истории за 10 лет

ЗЫ: ну не работает значит не работает :) 

 
IgorM:


первый вариант работает - как минимум 20 суток на демосчете(больше не было времени проверять) и в тестере на истории за 10 лет

ЗЫ: ну не работает значит не работает :)

ну на демо не страшно. :) а на реале наверно лучше не рисковать и сделать нормально... видимо работает из-за того что окно графика очень большое и не доходит до максимума... ну а может советникой такой - ему и так сойдёт. :)
 
Andrei01:
ну на демо не страшно. :) а на реале наверно лучше не рисковать и сделать нормально... видимо работает из-за того что окно графика очень большое и не доходит до максимума... ну а может советникой такой - ему и так сойдёт. :)


не совсем так - пересчитывая количество баров я могу "не проворонить" момент подкачки истории  - а в эти моменты лучше чуть подождать, история не только в конец ТФ подгружается, но бывает и начало ТФ подгрузится - лан, это страшная тайна тсссссссс

:) 

 
IgorM:


не совсем так - пересчитывая количество баров я могу "не проворонить" момент подкачки истории  - а в эти моменты лучше чуть подождать, история не только в конец ТФ подгружается, но бывает и начало ТФ подгрузится - лан, это страшная тайна тсссссссс

:) 


Оказалось второй вариант тоже не работает... в массиве индикатора номера баров не изменяются все равно! Я понял это все из-за нестандарнного тайм фрейма. Он формируется из стандартного индикатором Period_Converter_Opt, получается с М1 в М2, при открытии М2 Bars равен половине Макс. бар в окне, и как доходит до значения Макс. бар в окне, фомирование индксного массива SetIndexBuffer пекращается...((
 
reag:

Оказалось второй вариант тоже не работает... в массиве индикатора номера баров не изменяются все равно! Я понял это все из-за нестандарнного тайм фрейма. Он формируется из стандартного индикатором Period_Converter_Opt, получается с М1 в М2, при открытии М2 Bars равен половине Макс. бар в окне, и как доходит до значения Макс. бар в окне, фомирование индксного массива SetIndexBuffer пекращается...((


но хоть какие-то параметры нового бара можно сравнить с запомненным?

если у Вас нестандартный ТФ -  возможно, что тот бар который Вы считаете нулевым - имеет индекс не 0, 1 ? 

 
IgorM:


но хоть какие-то параметры нового бара можно сравнить с запомненным?

если у Вас нестандартный ТФ -  возможно, что тот бар который Вы считаете нулевым - имеет индекс не 0, 1 ? 


Сам алгоритм распознавания нового бара работает, но график после достижения макс. бар в окне останавливается, я предполагаю что фомирование индексного массива SetIndexBuffer прекращается. Вот в чем проблемка, т.е. после включения все замечательно работает, а потом график замирает, а бары движутся... и соответственно индикатор не работает!
 
reag:

Сам алгоритм распознавания нового бара работает, но график после достижения макс. бар в окне останавливается, я предполагаю что фомирование индексного массива SetIndexBuffer прекращается. Вот в чем проблемка, т.е. после включения все замечательно работает, а потом график замирает, а бары движутся... и соответственно индикатор не работает!

код где? если при запуске рисует, возможно проблема в том, что неправильно определяется кол-во баров для перерисовки
 
IgorM:

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

#property indicator_chart_window
#property show_inputs
#property indicator_buffers 3 // Количество буферов
#property indicator_color1 DarkSeaGreen // Цвет первой линии
#property indicator_color2 SaddleBrown // Цвет второй линии
#property indicator_color3 SaddleBrown // Цвет второй линии

extern int История =300; // Колич.баров в расчётной истории
extern int Стрелки=1;
extern int Линии=0; // Количество баров для расчёта
//extern int Left_Right= 5; // Смещение по горизонтали (баров)
extern int Вверх_вниз =8; // Смещение по вертикали (пунктов)
static int up = 1,индпослстр=600;
static datetime ВрПослСтр,time0new,time0old;
double Line_0[],Line_1[],Line_2[]; // Объявление массивов данных

//--------------------------------------------------------------------
int init() // Специальная функция init()
{

if (Стрелки==1 && Линии==1)int Стиль=1;
if (Стрелки==1 && Линии!=1)Стиль=3;
if (Стрелки!=1 && Линии==1)Стиль=2;
switch(Стиль) // Заголовок switch
{ // Начало тела switch
case 1 :
//--------------------------------------------------------------------
SetIndexBuffer(0,Line_0); // Назначение массива буферу 0
SetIndexStyle (0,DRAW_SECTION,STYLE_DOT,1);// Стиль линии
SetIndexEmptyValue(0,0.0);
//--------------------------------------------------------------------
SetIndexBuffer(1,Line_1); // Назначение массива буферу 1
SetIndexStyle (1,DRAW_ARROW,EMPTY,1); // Стиль линии
SetIndexArrow (1,217);
//--------------------------------------------------------------------
SetIndexBuffer(2,Line_2); // Назначение массива буферу 2
SetIndexStyle (2,DRAW_ARROW,EMPTY,1); // Стиль линии
SetIndexArrow (2,218);
//--------------------------------------------------------------------
break; // Варианты..
case 2 :
//--------------------------------------------------------------------
SetIndexBuffer(0,Line_0); // Назначение массива буферу 0
SetIndexStyle (0,DRAW_SECTION,STYLE_DOT,1);// Стиль линии
SetIndexEmptyValue(0,0.0);
break;
case 3 :
//--------------------------------------------------------------------
SetIndexBuffer(1,Line_1); // Назначение массива буферу 1
SetIndexStyle (1,DRAW_ARROW,EMPTY,1); // Стиль линии
SetIndexArrow (1,217);
//--------------------------------------------------------------------
SetIndexBuffer(2,Line_2); // Назначение массива буферу 2
SetIndexStyle (2,DRAW_ARROW,EMPTY,1); // Стиль линии
SetIndexArrow (2,218);
//--------------------------------------------------------------------
break;
default: break; // С case не совпало
}
int k=Bars; // Конец тела switch

return(0); // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
//----+ проверка количества баров на достаточность для корректного
// расчёта индикатора
if(История-1 < 15)
return(0);

//+--- +==========================================+
int i, // Индекс бара
n, // Формальный параметр (индекс)
k, // Индекс элемента индик. массива
Counted_bars; // Количество просчитанных баров
double Line;
индпослстр = iBarShift(NULL, 0, ВрПослСтр);
//Comment (индпослстр," ",up);
//--------------------------------------------------------------------
/* Counted_bars=IndicatorCounted(); // Количество просчитанных баров
//---- проверка на возможные ошибки
if(Counted_bars < 0)
return(-1);
i=Bars-Counted_bars-1+индпослстр; // Индекс первого непосчитанного
if (i>История-1) // Если много баров то ..
i=История-1; // ..рассчитывать заданное колич.*/
time0new=Time[0];
if(time0old!=time0new)
{
i=История-1;
time0old=time0new;
Comment ("Bars ",Bars,", История ",История,", i ",i);
}

for(i=i-1; i >= 3; i--) // Цикл по непосчитанным барам
{
  if(up==0)  
{
Line=Low[i];

if (Line<Low[i-1] && Line<Low[i-2] && ВрПослСтр<Time[i])
{
ВрПослСтр = Time[i];
Line_0 [i] = Line;
Line_2[i] = Line-Вверх_вниз*Point;
up=1;
continue;
}
}
if(up==1) //построение фибо сетки по критерию отката двух свечей
{
Line=High[i];

if (Line>High[i-1] && Line>High[i-2]&& ВрПослСтр<Time[i])
{
ВрПослСтр = Time[i];
Line_0[i] = Line;
Line_1[i] = Line+Вверх_вниз*Point;
up=0;
}
}
// Расчёт индекса следующего бара
}
// WindowRedraw();
//--------------------------------------------------------------------
  return(0);  
}
//--------------------------------------------------------------------
int deinit()
{

return(0);
}
 
reag:

  
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for(int i=0; i<limit; i++){
я индикаторы пишу так, это у меня стандартное начало индикатора - немного растянуто, но когда разбирался с mql, так написал и так осталось
сложно разобраться в Вашем коде - пугают имена переменных кирилицей - путаю с комментариями
 
IgorM:
я индикаторы пишу так, это у меня стандартное начало индикатора
сложно разобраться в Вашем коде - пугают имена переменных кирилицей - путаю с комментариями

Да это просто я пробовал... кирилицей )),связка Вars и  IndicatorCounted() на нестандартном тайм фрейме точно не работает, при превышении Макс. бар в окне Ваrs дальше не идет.
Причина обращения: