Пишу индикатор.
Может как то так?
//+------------------------------------------------------------------+ int StartHour = 9; int StartMin = 0; int EndHour = 21; int EndMin = 0; MqlDateTime dt; //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { for(i = 0; i < rates_total && !IsStopped(); i++) { if(чего то там == чему то) if(TimeSession(time[i])) записываем в буфер стрелку; else не записываем стрелку в буфер; } return (rates_total); } //+------------------------------------------------------------------+ bool TimeSession(datetime TimeCur) { //--- время начала сессии int StartTime = 3600 * StartHour + 60 * StartMin; //--- время окончания сессии int StopTime = 3600 * EndHour + 60 * EndMin; //--- текущее время в секундах от начала дня TimeCur = TimeCur % 86400; if(StopTime < StartTime) { if(TimeCur >= StartTime || TimeCur < StopTime) //--- переход через полночь return(true); } else { if(TimeCur >= StartTime && TimeCur < StopTime) //--- внутри одного дня return(true); } return(false); } //+------------------------------------------------------------------+
Подскажите кто знает где можно посмотреть в каком разделе форума находится тема топикстартера? В разделе для МТ4 или для МТ5?
Я просто в МТ4 даже не заглядывал, поэтому не в курсе подходит для него какой то код из МТ5 или нет.
А из за того, что не знаю как определить в каком разделе тема, пару раз вставлялся не туда.
Поэтому спрашиваю.
Может как то так?
Подскажите кто знает где можно посмотреть в каком разделе форума находится тема топикстартера? В разделе для МТ4 или для МТ5?
Хочу выразить Вам благодарность, я тоже первым делом так пробовала.
Но данная функция, на истории не работает по-моему. Т.е. я сделала так же (вначале чуть по своему потом Ваш вариант) но на истории показывает все время.
По-моему данная функция будет работать только в режиме реального времени так как я меняю время, а количество стрелок не изменяется (на истории)
Скорее всего данное решение актуально "в живую"
Но все равно спасибо большое за уделенное время!
Хочу выразить Вам благодарность, я тоже первым делом так пробовала.
Но данная функция, на истории не работает по-моему. Т.е. я сделала так же (вначале чуть по своему потом Ваш вариант) но на истории показывает все время.
По-моему данная функция будет работать только в режиме реального времени так как я меняю время, а количество стрелок не изменяется (на истории)
Скорее всего данное решение актуально "в живую"
Но все равно спасибо большое за уделенное время!
вы уверены, что в своем примере сравнивали время ИМЕННО сигнального бара, а не текущее время?
По-моему данная функция будет работать только в режиме реального времени так как я меняю время, а количество стрелок не изменяется (на истории)
Скорее всего данное решение актуально "в живую"
Смотрите код своего индикатора, всё прекрасно работает на истории.
Вот скрин с настройками
int StartHour = 15;
int StartMin = 10;
int EndHour = 16;
int EndMin = 20;
вот с настройками
int StartHour = 15;
int StartMin = 10;
int EndHour = 20;
int EndMin = 20;
Как можно заметить стрелок намного больше.
//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_type1 DRAW_ARROW #property indicator_color1 clrRed int StartHour = 15; int StartMin = 10; int EndHour = 20; int EndMin = 20; MqlDateTime dt; double Buff[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, Buff, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_ARROW, 234); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit; if(prev_calculated <= 0) { limit = 1 ; ArrayInitialize(Buff, 0); } else limit = prev_calculated - 1; for(int i = 0; i < rates_total && !IsStopped(); i++) { if(TimeSession(time[i])) Buff[i] = high[i]; else Buff[i] = 0; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ bool TimeSession(datetime TimeCur) { //--- время начала сессии int StartTime = 3600 * StartHour + 60 * StartMin; //--- время окончания сессии int StopTime = 3600 * EndHour + 60 * EndMin; //--- текущее время в секундах от начала дня TimeCur = TimeCur % 86400; if(StopTime < StartTime) { if(TimeCur >= StartTime || TimeCur < StopTime) //--- переход через полночь return(true); } else { if(TimeCur >= StartTime && TimeCur < StopTime) //--- внутри одного дня return(true); } return(false); } //+------------------------------------------------------------------+
Смотрите код своего индикатора, всё прекрасно работает на истории.
Вот скрин с настройками
int StartHour = 15;
int StartMin = 10;
int EndHour = 16;
int EndMin = 20;
вот с настройками
int StartHour = 15;
int StartMin = 10;
int EndHour = 20;
int EndMin = 20;
Как можно заметить стрелок намного больше.
Я нашла свою ошибку.
Спасибо Вам за терпение и понимание!
Код которым Вы дополнили свой второй ответ помог мне.
Спасибо Вам еще раз!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пишу индикатор.
Как все знаем, индикатор перечитает историю и покажет ранние показатели. Тут все верно.
Вопрос?
Как можно сделать так, что бы индикатор перечитывая историю показал (например стрелки) только в те моменты когда он бы работал.
К примеру я пишу индикатор который будет работать только в Европейскую сессию.
Ок написала, далее я запускаю отдельный скрипт, который считает стрелки и показывает количество верных исходов.
Т.е. считает Винрейт.
Я знаю, что можно для советника и индикатора указать время работы. Но вот вопрос, когда он будет пересчитывать историю его эти временные рамки смогут ограничить?
Может кто-то с подобным сталкивался?
Заранее благодарю всех кто примет участие в обсуждении и сможет уделить время для ответа.