А предыдущий дневной бар Вас не устроит?
http://www.musiclib.ru/music.php?res_id=82792643215
Вдруг на ум пришло, безо всяких намеков на кого-либо :)
Вдруг на ум пришло, безо всяких намеков на кого-либо :)
Rosh:
http://www.musiclib.ru/music.php?res_id=82792643215
Вдруг на ум пришло, безо всяких намеков на кого-либо :)
http://www.musiclib.ru/music.php?res_id=82792643215
Вдруг на ум пришло, безо всяких намеков на кого-либо :)
А по существу ссылочек нет?
'Price Channel' Это относительно экстремумов.
Вот это можно оптимизировать?
Просто мне кажется, что так не должно быть, должны быть штатные средства делающие это быстрей, чем перебор минуток в цикле.
Ссылками, "безо всяких намеков на кого-либо", прошу не беспокоить ;)
int VolSum=0; double MaxPrice=0; double MinPrice=32000; int KvoMinut=24*60; for (int i=1;i<=KvoMinut;i++) { VolSum=VolSum+iVolume(Symbol(),PERIOD_M1,i); MaxPrice=MathMax(MaxPrice,iHigh(Symbol(),PERIOD_M1,i)); MinPrice=MathMin(MinPrice,iLow(Symbol(),PERIOD_M1,i)); }
Просто мне кажется, что так не должно быть, должны быть штатные средства делающие это быстрей, чем перебор минуток в цикле.
Ссылками, "безо всяких намеков на кого-либо", прошу не беспокоить ;)
Вот это:
Но мне кажется опрометчиво предполоогать, что в сутках 24*60 минут ;)
MaxPrice=High[Highest(NULL, 0, MODE_HIGH,KvoMinut,1)]; MinPrice=Low[Lowest(NULL, 0, MODE_LOW,KvoMinut,1)];
Но мне кажется опрометчиво предполоогать, что в сутках 24*60 минут ;)
Для Max и Min есть штатные средства: High[Highest(...)] и Low[Lowest(...)], для объема
нет. Следует учесть, что в сутках не 1440 минут, а меньше - из-за
пропусков, поэтому Highest и Lowest, тоже не лучший вариант. Вобщем
задача не из простых.
Поиск минимума и максимума можно сделать таким образом - рассчитать время бара который был сутки назад используя функцию iBarShift() и рассчитать количество баров на протяжении которых ищитя максимум и минимум при помощи функций Highest и Lowest. Еще следует учесть особенности понедельника. Нда... задача непростая....
Вобщем если делать этот индикатор корректно работающим, то следует создать массивы длиной равной количеству баров входящих в сутки - один для времени, один для объема и еще два для макимума и мимнимума. Расчет индикатора делать с конца (с самого старого бара). На каждом баре отрисовывать значение объема ,масимума и минимума, обнулять соответствующие этому бару элементы массива и тд. и тп.
Поиск минимума и максимума можно сделать таким образом - рассчитать время бара который был сутки назад используя функцию iBarShift() и рассчитать количество баров на протяжении которых ищитя максимум и минимум при помощи функций Highest и Lowest. Еще следует учесть особенности понедельника. Нда... задача непростая....
Вобщем если делать этот индикатор корректно работающим, то следует создать массивы длиной равной количеству баров входящих в сутки - один для времени, один для объема и еще два для макимума и мимнимума. Расчет индикатора делать с конца (с самого старого бара). На каждом баре отрисовывать значение объема ,масимума и минимума, обнулять соответствующие этому бару элементы массива и тд. и тп.
Написал, а потом попробовал. Кашмар - такое работать не будет.
Вот лучшее что получилось:
//+------------------------------------------------------------------+ //| iDayVolume.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- input parameters extern int ExtParam1; //---- buffers double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start(){ double mx,mn; int limit; int counted_bars=IndicatorCounted(); limit=Bars-counted_bars; for(int i=limit-1;i>=0;i--){ datetime TimeDayAgo=Time[i]-1440*60; if(TimeDayOfWeek(Time[i])==1)TimeDayAgo=Time[i]-1440*60*3; int bs=iBarShift(NULL,0,TimeDayAgo,false); int v=0; for(int j=bs;j>=i;j--)v+=Volume[j]; mx=High[Highest(NULL,0,MODE_HIGH,i-bs+1,i)]; mn=Low[Lowest(NULL,0,MODE_LOW,i-bs+1,i)]; //... присвоить буферу нужное значение } return(0); }
MAEstro:
А по существу ссылочек нет?
По существу - непонятно зачем это нужно, почему не нравится почти
лобовой способ реализации .
Rosh:
http://www.musiclib.ru/music.php?res_id=82792643215
Вдруг на ум пришло, безо всяких намеков на кого-либо :)
http://www.musiclib.ru/music.php?res_id=82792643215
Вдруг на ум пришло, безо всяких намеков на кого-либо :)
А по существу ссылочек нет?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне нужно знать объемы и ценовые максимумы ровно за сутки назад начиная с текущего момента. Текущим моментом можно считать 1-ый минутный бар.
Сделал в лоб, простым подсчетом минутных баров - не понравилось, долго и некрасиво. Может есть какие-то штатные средства? Скажу честно, глубоко не копал, просто времени в обрез, вот решил сэкономить =)
Спасибо за понимание...