первый вариант работает - как минимум 20 суток на демосчете(больше не было времени проверять) и в тестере на истории за 10 лет
ЗЫ: ну не работает значит не работает :)
ну на демо не страшно. :) а на реале наверно лучше не рисковать и сделать нормально... видимо работает из-за того что окно графика очень большое и не доходит до максимума... ну а может советникой такой - ему и так сойдёт. :)
Andrei01: ну на демо не страшно. :) а на реале наверно лучше не рисковать и сделать нормально... видимо работает из-за того что окно графика очень большое и не доходит до максимума... ну а может советникой такой - ему и так сойдёт. :)
не совсем так - пересчитывая количество баров я могу "не проворонить" момент подкачки истории - а в эти моменты лучше чуть подождать, история не только в конец ТФ подгружается, но бывает и начало ТФ подгрузится - лан, это страшная тайна тсссссссс
не совсем так - пересчитывая количество баров я могу "не проворонить" момент подкачки истории - а в эти моменты лучше чуть подождать, история не только в конец ТФ подгружается, но бывает и начало ТФ подгрузится - лан, это страшная тайна тсссссссс
:)
Оказалось второй вариант тоже не работает... в массиве индикатора номера баров не изменяются все равно! Я понял это все из-за нестандарнного тайм фрейма. Он формируется из стандартного индикатором Period_Converter_Opt, получается с М1 в М2, при открытии М2 Bars равен половине Макс. бар в окне, и как доходит до значения Макс. бар в окне, фомирование индксного массива SetIndexBuffer пекращается...((
Оказалось второй вариант тоже не работает... в массиве индикатора номера баров не изменяются все равно! Я понял это все из-за нестандарнного тайм фрейма. Он формируется из стандартного индикатором Period_Converter_Opt, получается с М1 в М2, при открытии М2 Bars равен половине Макс. бар в окне, и как доходит до значения Макс. бар в окне, фомирование индксного массива SetIndexBuffer пекращается...((
но хоть какие-то параметры нового бара можно сравнить с запомненным?
если у Вас нестандартный ТФ - возможно, что тот бар который Вы считаете нулевым - имеет индекс не 0, 1 ?
но хоть какие-то параметры нового бара можно сравнить с запомненным?
если у Вас нестандартный ТФ - возможно, что тот бар который Вы считаете нулевым - имеет индекс не 0, 1 ?
Сам алгоритм распознавания нового бара работает, но график после достижения макс. бар в окне останавливается, я предполагаю что фомирование индексного массива SetIndexBuffer прекращается. Вот в чем проблемка, т.е. после включения все замечательно работает, а потом график замирает, а бары движутся... и соответственно индикатор не работает!
Сам алгоритм распознавания нового бара работает, но график после достижения макс. бар в окне останавливается, я предполагаю что фомирование индексного массива SetIndexBuffer прекращается. Вот в чем проблемка, т.е. после включения все замечательно работает, а потом график замирает, а бары движутся... и соответственно индикатор не работает!
код где? если при запуске рисует, возможно проблема в том, что неправильно определяется кол-во баров для перерисовки
код где? если при запуске рисует, возможно проблема в том, что неправильно определяется кол-во баров для перерисовки
#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];
я индикаторы пишу так, это у меня стандартное начало индикатора - немного растянуто, но когда разбирался с mql, так написал и так осталось сложно разобраться в Вашем коде - пугают имена переменных кирилицей - путаю с комментариями
IgorM: я индикаторы пишу так, это у меня стандартное начало индикатора сложно разобраться в Вашем коде - пугают имена переменных кирилицей - путаю с комментариями
Да это просто я пробовал... кирилицей )),связка Вars и IndicatorCounted() на нестандартном тайм фрейме точно не работает, при превышении Макс. бар в окне Ваrs дальше не идет.
Да, первый вариант не работает, правда я работаю на нестандартном таймфрейме, второй работает. Всем спасибо!
первый вариант работает - как минимум 20 суток на демосчете(больше не было времени проверять) и в тестере на истории за 10 лет
ЗЫ: ну не работает значит не работает :)
первый вариант работает - как минимум 20 суток на демосчете(больше не было времени проверять) и в тестере на истории за 10 лет
ЗЫ: ну не работает значит не работает :)
ну на демо не страшно. :) а на реале наверно лучше не рисковать и сделать нормально... видимо работает из-за того что окно графика очень большое и не доходит до максимума... ну а может советникой такой - ему и так сойдёт. :)
не совсем так - пересчитывая количество баров я могу "не проворонить" момент подкачки истории - а в эти моменты лучше чуть подождать, история не только в конец ТФ подгружается, но бывает и начало ТФ подгрузится - лан, это страшная тайна тсссссссс
:)
не совсем так - пересчитывая количество баров я могу "не проворонить" момент подкачки истории - а в эти моменты лучше чуть подождать, история не только в конец ТФ подгружается, но бывает и начало ТФ подгрузится - лан, это страшная тайна тсссссссс
:)
Оказалось второй вариант тоже не работает... в массиве индикатора номера баров не изменяются все равно! Я понял это все из-за нестандарнного тайм фрейма. Он формируется из стандартного индикатором Period_Converter_Opt, получается с М1 в М2, при открытии М2 Bars равен половине Макс. бар в окне, и как доходит до значения Макс. бар в окне, фомирование индксного массива SetIndexBuffer пекращается...((
Оказалось второй вариант тоже не работает... в массиве индикатора номера баров не изменяются все равно! Я понял это все из-за нестандарнного тайм фрейма. Он формируется из стандартного индикатором Period_Converter_Opt, получается с М1 в М2, при открытии М2 Bars равен половине Макс. бар в окне, и как доходит до значения Макс. бар в окне, фомирование индксного массива SetIndexBuffer пекращается...((
но хоть какие-то параметры нового бара можно сравнить с запомненным?
если у Вас нестандартный ТФ - возможно, что тот бар который Вы считаете нулевым - имеет индекс не 0, 1 ?
но хоть какие-то параметры нового бара можно сравнить с запомненным?
если у Вас нестандартный ТФ - возможно, что тот бар который Вы считаете нулевым - имеет индекс не 0, 1 ?
Сам алгоритм распознавания нового бара работает, но график после достижения макс. бар в окне останавливается, я предполагаю что фомирование индексного массива SetIndexBuffer прекращается. Вот в чем проблемка, т.е. после включения все замечательно работает, а потом график замирает, а бары движутся... и соответственно индикатор не работает!
Сам алгоритм распознавания нового бара работает, но график после достижения макс. бар в окне останавливается, я предполагаю что фомирование индексного массива SetIndexBuffer прекращается. Вот в чем проблемка, т.е. после включения все замечательно работает, а потом график замирает, а бары движутся... и соответственно индикатор не работает!
код где? если при запуске рисует, возможно проблема в том, что неправильно определяется кол-во баров для перерисовки
код где? если при запуске рисует, возможно проблема в том, что неправильно определяется кол-во баров для перерисовки
#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);
}
сложно разобраться в Вашем коде - пугают имена переменных кирилицей - путаю с комментариями
я индикаторы пишу так, это у меня стандартное начало индикатора
сложно разобраться в Вашем коде - пугают имена переменных кирилицей - путаю с комментариями
Да это просто я пробовал... кирилицей )),связка Вars и IndicatorCounted() на нестандартном тайм фрейме точно не работает, при превышении Макс. бар в окне Ваrs дальше не идет.