2. Определяете количество баров num на нужном Вам ТФ (если хотите проверять экстремум дня каждые 15 минут - М15 баров);
3. Получаете данные high за num баров;
3. В цикле сравниваете все значения high баров с переменной dayHigh за нужную дневную свечу (изначально dayHigh = 0);
4. Если high > dayHigh - запоминаете новое значение в переменную dayHigh;
Это понятно, спасибо. Но пока это сложно для меня... а точней пункт 2, это надо сделать для каждого ТФ расчет и загнать в диапазоны для поиска количества свечей?
А нельзя просто узнать дату текущего ТФ и перебрать все значения за дату, без определения количества прошедших свечей?
Это понятно, спасибо. Но пока это сложно для меня... а точней пункт 2, это надо сделать для каждого ТФ расчет и загнать в диапазоны для поиска количества свечей?
А нельзя просто узнать дату текущего ТФ и перебрать все значения за дату, без определения количества прошедших свечей?
Количество баров внутри дня определить просто. Например для 15 минутного графика. Количество минут в одних сутках делите на 15 (1440 /15 =96 баров или по другому PERIOD_D1/PERIOD_M15 = 96)
Vitalii Ananev: Количество баров внутри дня определить просто. Например для 15 минутного графика. Количество минут в одних сутках делите на 15 (1440 /15 =96 баров или по другому PERIOD_D1/PERIOD_M15 = 96)
Не стоит так делать! Никогда нельзя принимать как факт, что количество баров в каждый конкретный день по ТФ будет одинаково!
Vitalii Ananev: Количество баров внутри дня определить просто. Например для 15 минутного графика. Количество минут в одних сутках делите на 15 (1440 /15 =96 баров или по другому PERIOD_D1/PERIOD_M15 = 96)
Да это понятно, математически то, а вот как функциями - в этом то вопрос! Допустим через Time я получу текущее время, а дальше как
Мне вот видится сделать счетчик для каждого ТФ, при новом баре , который будет обнулятся при наступлении новых суток, и обнулять максимум за сутки, а до этого делать сравнение каждого бара, но как это запрограммировать?
Да это понятно, математически то, а вот как функциями - в этом то вопрос! Допустим через Time я получу текущее время, а дальше как
Мне вот видится сделать счетчик для каждого ТФ, при новом баре , который будет обнулятся при наступлении новых суток, и обнулять максимум за сутки, а до этого делать сравнение каждого бара, но как это запрограммировать?
Примерно так можно найти первый бар соответствующий началу суток.
Примерно так можно найти первый бар соответствующий началу суток.
К примеру получится такой алгоритм.
Нашли первый бар - на тот момент времени когда он сформировался High этого бара будет максимумом дня. Далее берем следующий бар и проверяем уже его максимум если он выше предыдущего , значит это новый максимум дня. И так далее до последнего бара дня.
#property script_show_inputs#property strict//+------------------------------------------------------------------+//| Входные параметры |//+------------------------------------------------------------------+inputENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15; // Пользовательский ТФ//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
// Определяем время открытия текущего дняdatetime open_D1=iTime(_Symbol,PERIOD_D1,0);
// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий деньint last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
if( last_utf == -1 )
{
Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
return;
}
// Определяем максимум дняdouble dayHigh=0;
double high;
int highNum=0;
for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
{
high = iHigh( _Symbol, inpUserTimeframe, i ); // Максимум на i свечеif( high > dayHigh ) // Если максимум дня превышен
{
dayHigh = high; // Запоминаем новый максимум
highNum = i; // Запоминаем номер свечи
}
}
Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
}
1. Определяете время открытия дневной свечи;
2. Определяете количество баров num на нужном Вам ТФ (если хотите проверять экстремум дня каждые 15 минут - М15 баров);
3. Получаете данные high за num баров;
3. В цикле сравниваете все значения high баров с переменной dayHigh за нужную дневную свечу (изначально dayHigh = 0);
4. Если high > dayHigh - запоминаете новое значение в переменную dayHigh;
Это понятно, спасибо. Но пока это сложно для меня... а точней пункт 2, это надо сделать для каждого ТФ расчет и загнать в диапазоны для поиска количества свечей?
А нельзя просто узнать дату текущего ТФ и перебрать все значения за дату, без определения количества прошедших свечей?
Это понятно, спасибо. Но пока это сложно для меня... а точней пункт 2, это надо сделать для каждого ТФ расчет и загнать в диапазоны для поиска количества свечей?
А нельзя просто узнать дату текущего ТФ и перебрать все значения за дату, без определения количества прошедших свечей?
Количество баров внутри дня определить просто. Например для 15 минутного графика. Количество минут в одних сутках делите на 15 (1440 /15 =96 баров или по другому PERIOD_D1/PERIOD_M15 = 96)
Количество баров внутри дня определить просто. Например для 15 минутного графика. Количество минут в одних сутках делите на 15 (1440 /15 =96 баров или по другому PERIOD_D1/PERIOD_M15 = 96)
Да это понятно, математически то, а вот как функциями - в этом то вопрос! Допустим через Time я получу текущее время, а дальше как
Мне вот видится сделать счетчик для каждого ТФ, при новом баре , который будет обнулятся при наступлении новых суток, и обнулять максимум за сутки, а до этого делать сравнение каждого бара, но как это запрограммировать?
Не стоит так делать! Никогда нельзя принимать как факт, что количество баров в каждый конкретный день по ТФ будет одинаково!
Да, например в пятницу может быть закрытие раньше...
Значит надо определить день, и брать массив для поиска максимума за день без учета количества свечь, как это сделать?
Да это понятно, математически то, а вот как функциями - в этом то вопрос! Допустим через Time я получу текущее время, а дальше как
Мне вот видится сделать счетчик для каждого ТФ, при новом баре , который будет обнулятся при наступлении новых суток, и обнулять максимум за сутки, а до этого делать сравнение каждого бара, но как это запрограммировать?
Примерно так можно найти первый бар соответствующий началу суток.
Примерно так можно найти первый бар соответствующий началу суток.
К примеру получится такой алгоритм.
Нашли первый бар - на тот момент времени когда он сформировался High этого бара будет максимумом дня. Далее берем следующий бар и проверяем уже его максимум если он выше предыдущего , значит это новый максимум дня. И так далее до последнего бара дня.