в своем окне на графике нормально рисует всего пять вертикальных линий по величине волатильности за 0 день, за 1 день, средняя. за 2дня, за 3дня и за 4дня.
Средняя волатильность по сумме 5 предыдущих дней рисуется ломаной линией за 50 дневных свечей - столько задано.
содержимое буферов рассчитывается так: усреднение за пять дней - в цикле (рисовать линию за 50 дней), остальные усредненные данные - вне цикла.
while(i>=0)
{
int day0= (High[i] - Low[i])/Point;
int day1= (High[i+1] - Low[i+1])/Point;
int day2= (High[i+2] - Low[i+2])/Point;
int day3= (High[i+3] - Low[i+3])/Point;
int day4= (High[i+4] - Low[i+4])/Point;
int day5= (High[i+5] - Low[i+5])/Point;
int D5_av = (day1+ day2+ day3+ day4+ day5) / 5;
VolatBuffer5[i]=D5_av;
i--;
}
day0= (High[0] - Low[0])/Point;
day1= (High[1] - Low[1])/Point;
day2= (High[2] - Low[2])/Point;
day3= (High[3] - Low[3])/Point;
day4= (High[4] - Low[4])/Point;
int D4_av = (day1+ day2+ day3+ day4)/4;
int D3_av = (day1+ day2+ day3)/3;
int D2_av = (day1+ day2)/2;
int D1_av = day1/1;
int D0_av = day0/1;
VolatBuffer0[0]=D0_av;
VolatBuffer1[1]=D1_av;
VolatBuffer2[2]=D2_av;
VolatBuffer3[3]=D3_av;
VolatBuffer4[4]=D4_av;
Comment("Волатильность. За 5 дн.= "+VolatBuffer5[5]+" За 4 дн.= "+VolatBuffer4[4]+" За 3 дн.= "+VolatBuffer3[3]+" За 2 дн.= "+VolatBuffer2[2]+" Вчера= "+VolatBuffer1[1]+" Сегодня= "+VolatBuffer0[0]);
Строка Coment в индикаторе, в которую внесено содержимое буферов, выдает на экран абсурд:
усреднение за 5 дней -за эти дни не было волатильности больше 194 пунктов и правильные результаты остальных дней.
Coment = " Волатильность. За 5 дн.= 219.000000 За 4 дн.= 171.0000000 За 3 дн.= 189.00000 За 2 дн.= 187.00000 Вчера= 194.00000 Сегодня= 5 "
Нулевой день "Сегодня" четко увеличивается с ростом волатильности текущего дня
При вызове данных буферов в советник
int Volat0= iCustom(Symbol(), 1440, "Volat_Average_Gist",0,0);
int Volat1= iCustom(Symbol(), 1440, "Volat_Average_Gist",1,0);
int Volat2= iCustom(Symbol(), 1440, "Volat_Average_Gist",2,0);
int Volat3= iCustom(Symbol(), 1440, "Volat_Average_Gist",3,0);
int Volat4= iCustom(Symbol(), 1440, "Volat_Average_Gist",4,0);
int Volat5= iCustom(Symbol(), 1440, "Volat_Average_Gist",5,0);
строка Print тестера Выдает другой абсурд - не верный,отличающийся от строки Coment, но похожий на правду, усредненный результат за 5 дней и правильную волатильность сегодняшнего "Нулевого" дня.
Остальное дает фиксированным абсурдным числом.
Print тестера выдает Волатильность За 5 дн.= 181 За 4 дн.= 2147483647 За 3 дн.= 2147483647 За 2 дн.= 2147483647 Вчера= 2147483647 Сегодня= 5
Несколько дней не могу понять - почему в советник вызываются не те данные, что содержатся в пяти буферах индикатора кроме буфера "Нулевого" дня?
Вопрос больше не как написать код, а на уровне идеи - можно ли избежать множественных циклов,
которые грузят процессор. Например, была мысль отслеживать количество открытых STOP-ордеров - если оно уменьшилось на один, но ордер не был удален => открылся рыночный =>
время его открытия и тип поместить в массив. Что-то типа того.
Подскажите, что означает ошибка при компиляции советника:
'\end_of_program' - unbalanced left parenthesis
Несбалансированная левая скобка.
Несбалансированная левая скобка.
Упс... Нашел. СПАСИБО.
Возник такой вопрос -
Ордера открываются как BUY/SELL STOP. Некоторые становятся рыночными, остальные удаляются.
Для последних N-рыночных ордеров (открытых и закрытых) необходимо узнать были они Buy или Sell.
Первая мысль - перебрать все ордера из OrdersHistoryTotal() и OrdersTotal(), отсортировать их по
времени закрытия, а потом по OP_BUY и OP_SELL. Но это долго и будет дико тормозить процессор.
- Может есть какой-нибудь другой, более простой вариант?
Спасибо!
Добрый день.
Может кто-нибудь помочь?
Написал свой первый простенький индикатор - должен считать усредненную волатильность за 2, 3,4,и 5 прошедших дней.
Индикатор имеет шесть буферов,
в своем окне на графике нормально рисует всего пять вертикальных линий по величине волатильности за 0 день, за 1 день, средняя. за 2дня, за 3дня и за 4дня.
Средняя волатильность по сумме 5 предыдущих дней рисуется ломаной линией за 50 дневных свечей - столько задано.
содержимое буферов рассчитывается так: усреднение за пять дней - в цикле (рисовать линию за 50 дней), остальные усредненные данные - вне цикла.
Строка Coment в индикаторе, в которую внесено содержимое буферов, выдает на экран абсурд:
усреднение за 5 дней - за эти дни не было волатильности больше 194 пунктов и правильные результаты остальных дней.
Coment = " Волатильность. За 5 дн.= 219.000000 За 4 дн.= 171.0000000 За 3 дн.= 189.00000 За 2 дн.= 187.00000 Вчера= 194.00000 Сегодня= 5 "
Нулевой день "Сегодня" четко увеличивается с ростом волатильности текущего дня
При вызове данных буферов в советник
строка Print тестера Выдает другой абсурд - не верный,отличающийся от строки Coment, но похожий на правду, усредненный результат за 5 дней и правильную волатильность сегодняшнего "Нулевого" дня.
Остальное дает фиксированным абсурдным числом.
Print тестера выдает Волатильность За 5 дн.= 181 За 4 дн.= 2147483647 За 3 дн.= 2147483647 За 2 дн.= 2147483647 Вчера= 2147483647 Сегодня= 5
Несколько дней не могу понять - почему в советник вызываются не те данные, что содержатся в пяти буферах индикатора кроме буфера "Нулевого" дня?
Попробуйте заменить
VolatBuffer1[1]=D1_av;
на
VolatBuffer1[0]=D1_av;
ну и все остальные буфера также.
Попробуйте заменить
VolatBuffer1[1]=D1_av;
на
VolatBuffer1[0]=D1_av;
ну и все остальные буфера также.
Спасибо!
Сработало. В советник стали приходить нормальные данные.
Кроме этого получился интересный эффект - в строке "Coment" самого индикатора
стал прописываться тот абсурд, который был в строке Print советника, только 219 за 5 дней осталось как и было.
При этом в советник вместо 219 приходит 181 как надо
Coment" выдает Волатильность За 5 дн.= 219.000000 За 4 дн.= 2147483647 За 3 дн.= 2147483647 За 2 дн.= 2147483647 Вчера= 2147483647 Сегодня= 5
Попробуйте заменить
VolatBuffer1[1]=D1_av;
на
VolatBuffer1[0]=D1_av;
ну и все остальные буфера также.
Нашел и еще один эффект. В окне индикатора все вертикальные линии стали рисоваться друг на друге
и самое большое значение закрывает все другие. Для советника это не существенно.
Добрый день.
Может кто-нибудь помочь?
Написал свой первый простенький индикатор - должен считать усредненную волатильность за 2, 3,4,и 5 прошедших дней.
Можно все значительно упростить, используя ATR:
Два скрипта:
Вопрос больше не как написать код, а на уровне идеи - можно ли избежать множественных циклов,
которые грузят процессор. Например, была мысль отслеживать количество открытых STOP-ордеров - если оно уменьшилось на один, но ордер не был удален => открылся рыночный =>
время его открытия и тип поместить в массив. Что-то типа того.
Любые идеи приветствуются.
Спасибо!
Можно все значительно упростить, используя ATR: