Спасибо, но на каждом тике делать перерасчет не есть хорошо - надо осмыслить Ваш код, впрочем пока я хочу понять, почему мой код не работает, в лог возвращаются странные цифры
Open_timeTF
1454715900
Open_time
1454284800
Delta_1S
431100
Delta_M15
479
получается, что разница в 479 баров между первым баром дня и текущем баром - почему так?
Я ведь указал, что я не экстрасенс и поэтому:
Но: этот код будет выполняться при каждом заходе в OnCalculate() - здесь уже в зависимости от Ваших нужд или добавить флаг bool или вынести код в отдельную функцию.
А почему тут требуются экстрасенсорные способности? Выше в коде есть переменные, я показал что возвращают эти переменные в цифрах и задал вопрос, почему так, а не иначе - согласно коду.
Karputov Vladimir , не понимаю я Ваш код - ибо начинающий я в этом деле, ранее функцию OnCalculate вообще не использовал, поэтому не могу понять, что там рассчиталось rates_total, а главное куда это потом возвращать? Как это всё переделать в отдельную функцию так же пока не понимаю... без комментариев тяжело.
-Aleks-: Karputov Vladimir , не понимаю я Ваш код - ибо начинающий я в этом деле, ранее функцию OnCalculate вообще не использовал, поэтому не могу понять, что там рассчиталось rates_total, а главное куда это потом возвращать? Как это всё переделать в отдельную функцию так же пока не понимаю... без комментариев тяжело.
Вот полный код MQL4 индикатора:
//+------------------------------------------------------------------+//| Start day.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window//--- input parametersinputint timer=10; // seconds//--- parameterbool IsDefineTime=true; // true -> you can define time//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetTimer(timer);
//---
IsDefineTime=true;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int temp_day;
MqlDateTime dt_struct;
TimeToStruct(time[0],dt_struct);
temp_day=dt_struct.day;
if(IsDefineTime)
{
for(int i=0;i<rates_total-1;i++)
{
TimeToStruct(time[i],dt_struct);
if(dt_struct.day<temp_day)
{
Print("Start day ",time[i-1]);
IsDefineTime=false;
break;
}
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
//+------------------------------------------------------------------+
Алгоритм его работы: при старте индикатора Вы задаёте временной интервал таймера (например 10 секунд) - это означает, что каждые 10 секунд будет срабатывать таймер:
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
и переменной IsDefineTime присваивается значение true. Для чего это нужно? Когда IsDefineTime=true мы можем в OnCalculate() зайти в цикл определения времени начала дня:
В этом цикле Мы начинаем обход по массиву time[] (в этом массиве хранятся значениями времени открытия) с самого правого бара (его индекс равен "0"). Когда найдено начало дня, Мы распринтовываем его значение и присваиваем переменной IsDefineTime значение false - таким образом мы защищаемся от последующего входа в цикл определения времени начала дня, пока снова не сработает таймер.
Karputov Vladimir, спасибо за пояснения, однако, как это решает задачу?
Необходимо грубо говоря узнать бар текущего ТФ соответствующий бару начала дня. Узнать на каждом баре, и соотвествтенно сделать расчет и отрисовку индикатора.
Karputov Vladimir, спасибо за пояснения, однако, как это решает задачу?
Необходимо грубо говоря узнать бар текущего ТФ соответствующий бару начала дня. Узнать на каждом баре, и соотвествтенно сделать расчет и отрисовку индикатора.
Как спросили, так Вам и ответили :) . А если Вам нужно не время первого бара за этот день, а индекс этого бара - так это вот здесь, когда принтуете начало дня:
.
.
.
Print("Start day ",time[i-1]);
.
.
.
Вы используете индекс [i-1] - это и есть номер первого бара за день.
Как спросили, так Вам и ответили :) . А если Вам нужно не время первого бара за этот день, а индекс этого бара - так это вот здесь, когда принтуете начало дня:
Вы используете индекс [i-1] - это и есть номер первого бара за день.
Согласен - спросил запутанно.
В приложении индикатор, который сделал я, но он считает не верно. Я жутко туплю и не понимаю, даже после объяснений с Вашей стороны, как мне заставить его правильно определять индекс соответствующий первому бару начала дня.
Прошу прощения за наглость, но может покажите, как объединить Ваш и мой код?
Спасибо, но на каждом тике делать перерасчет не есть хорошо - надо осмыслить Ваш код, впрочем пока я хочу понять, почему мой код не работает, в лог возвращаются странные цифры
получается, что разница в 479 баров между первым баром дня и текущем баром - почему так?
Я ведь указал, что я не экстрасенс и поэтому:
Но: этот код будет выполняться при каждом заходе в OnCalculate() - здесь уже в зависимости от Ваших нужд или добавить флаг bool или вынести код в отдельную функцию.
Я ведь указал, что я не экстрасенс и поэтому:
Karputov Vladimir , не понимаю я Ваш код - ибо начинающий я в этом деле, ранее функцию OnCalculate вообще не использовал, поэтому не могу понять, что там рассчиталось rates_total, а главное куда это потом возвращать? Как это всё переделать в отдельную функцию так же пока не понимаю... без комментариев тяжело.
Вот полный код MQL4 индикатора:
Алгоритм его работы: при старте индикатора Вы задаёте временной интервал таймера (например 10 секунд) - это означает, что каждые 10 секунд будет срабатывать таймер:
и переменной IsDefineTime присваивается значение true. Для чего это нужно? Когда IsDefineTime=true мы можем в OnCalculate() зайти в цикл определения времени начала дня:
В этом цикле Мы начинаем обход по массиву time[] (в этом массиве хранятся значениями времени открытия) с самого правого бара (его индекс равен "0"). Когда найдено начало дня, Мы распринтовываем его значение и присваиваем переменной IsDefineTime значение false - таким образом мы защищаемся от последующего входа в цикл определения времени начала дня, пока снова не сработает таймер.
Karputov Vladimir, спасибо за пояснения, однако, как это решает задачу?
Необходимо грубо говоря узнать бар текущего ТФ соответствующий бару начала дня. Узнать на каждом баре, и соотвествтенно сделать расчет и отрисовку индикатора.
Karputov Vladimir, спасибо за пояснения, однако, как это решает задачу?
Необходимо грубо говоря узнать бар текущего ТФ соответствующий бару начала дня. Узнать на каждом баре, и соотвествтенно сделать расчет и отрисовку индикатора.
Как спросили, так Вам и ответили :) . А если Вам нужно не время первого бара за этот день, а индекс этого бара - так это вот здесь, когда принтуете начало дня:
Вы используете индекс [i-1] - это и есть номер первого бара за день.
Как спросили, так Вам и ответили :) . А если Вам нужно не время первого бара за этот день, а индекс этого бара - так это вот здесь, когда принтуете начало дня:
Вы используете индекс [i-1] - это и есть номер первого бара за день.
Согласен - спросил запутанно.
В приложении индикатор, который сделал я, но он считает не верно. Я жутко туплю и не понимаю, даже после объяснений с Вашей стороны, как мне заставить его правильно определять индекс соответствующий первому бару начала дня.
Прошу прощения за наглость, но может покажите, как объединить Ваш и мой код?
-Aleks-:
как мне заставить его правильно определять индекс соответствующий первому бару начала дня.
как-то фсё запущено) Как-то так:
как-то фсё запущено) Как-то так:
...
Прошу прощения за наглость, но может покажите, как объединить Ваш и мой код?
Древняя народная мудрость гласит: если хочешь помочь голодному, дай ему не рыбу, дай удочку.
Есть вопросы - задавайте.