Как получать индикатор значения в определенное время каждый день
Results 1 to 8 of 8

Thread: Как получать индикатор значения в определенное время каждый день

  1. #1
    Как следует из названия, мне нужно получать значение пользовательского индикатора в определенное время каждый день, чтобы экстраполировать среднее значение. Я попробовал следующий код, он работает, но как мне повторять его каждый день? Заранее спасибо.

    for(i=0; ilt; Бары; i )
    {
    двойное значение = iCustom (0, 0, я);
    if (Time[i]gt;StrToTime(2019.11.15 15:00) Time[i]lt;StrToTime(2019.11.15 18:00))
    {
    продолжение =1;
    сумма =значение;
    среднее=сумма/продолжение;
    }
    }

  2. #2

    Quote Originally Posted by ;
    Дэни, твой подход и подход, предложенный Полсельваном, слишком сложны. Нет необходимости в циклах и нет необходимости сравнивать время вручную. использовать
    https://www.mql5.com/en/docs/series/ibarshiftс вашим целевым таймфреймом, чтобы найти бар целевого таймфрейма, который вы хотите использовать
    https://www.mql5.com/en/docs/indicators/icustomс баром, возвращаемым iBarShift(), чтобы получить значение пользовательского индикатора точного времени дня, которое вы хотите. Циклы сделают вашу программу медленной и склонной к ошибкам. Избегайте их всякий раз, когда...
    Полностью согласен, работать с iCustom и iBarShift более эффективно. Позже можно добавить индикатор буфера с помощью #resource и вызвать, например, для уменьшения номера файла до 1. Вставленный код #resource CallIndicator.ex4 extern ENUM_TIMEFRAMES CheckTime = PERIOD_D1; for(int i = CheckPeriod 1; i gt;= 0; --i) { datetime HighTF = iTime(_Symbol,PERIOD_CURRENT,i); int y = iBarShift(_Symbol,CheckTime,HighTF); double _AvgDist = iCustom(_Symbol, CheckTime,::Indicators\\CallIndicator.ex4,Type,Che ckPeriod,0,y); }

  3. #3
    Дэни, твой подход и подход, предложенный Полсельваном, слишком сложны. Нет необходимости в циклах и в ручном сравнении времени.использовать
    https://www.mql5.com/en/docs/series/ibarshiftс вашим целевым таймфреймом, чтобы найти бар целевого таймфрейма, который вы хотите использовать
    https://www.mql5.com/en/docs/indicators/icustomс баром, возвращаемым iBarShift(), чтобы получить значение пользовательского индикатора точного времени дня, которое вы хотите Циклы сделают вашу программу медленной и склонной к ошибкам. Избегайте их всякий раз, когда вы можете. Особенно когда есть стандартные функции для достижения того же.

  4. #4
    Большое спасибо

  5. #5
    учитывать также mn Inserted Code int counter=0; int mn, prd=PERIOD_M1;//для проверки mn также int day_begin=0, day_end=9;//prd limitgt; day_end gt;= day_begin gt;=0 int hr_begin=15, hr_end=18;//24gt; hr_end gt;= hr_begin gt;=0 двойное среднее, значение=0; дата и время проверки; MqlDateTime мТ; for (int day=day_begin; daylt;day_end; day ){//тестирование последних 10 дней candels TimeToStruct(iTime(_Symbol, PERIOD_D1, day), mT); for(int hr=hr_begin; hrlt;hr_end; hr ){//часы проверки с 15:00 до 18:00 mT.hour = hr; мн=0; в то время как (mnlt;60){ mT.min=mn; checkTime = StructToTime(mT);/значение = iCustom(_Symbol,prd, ..,iBarShift(_Symbol,prd,checkingTime)); mn =prd;//счетчик свечей следующего периода ; } } if (счетчик !=0) среднее = значение/счетчик; иначе среднее=0; }

  6. #6
    вы можете использовать переменную MqlDateTime для облегчения вычисления среднего значения Insert Code int day_begin=0, day_end=149, hr_begin=15, hr_end=18; двойное значение=0; дата и время проверки; MqlDateTime мТ; for (int day=day_begin; daylt;=day_end; day ){//тестирование за последние 150 дней TimeToStruct(iTime(_Symbol, PERIOD_D1, day), mT); for(int hr=hr_begin; hrlt;hr_end; hr ){//проверка только часов с 15:00 до 18:00 mT.hour = hr; checkTime = StructToTime(mT); value = iCustom(_Symbol,_Period,indicator_name,..,iBarShif t(_Symbol,_Period,checkingTime)); } } двойное среднее = (day_end-day_end 1)*(hr_end - hr_begin 1); если (среднее gt;0) среднее = значение/среднее; иначе среднее=0;

  7. #7
    спасибо, paulselvan, это работает... но только для часовых баров (15:00, 16:00...) что мне нужно изменить, чтобы получить минутные данные?

  8. #8

    Quote Originally Posted by ;
    Дэни, твой подход и подход, предложенный Полсельваном, слишком сложны. Нет необходимости в циклах и в ручном сравнении времени.использовать
    https://www.mql5.com/en/docs/series/ibarshiftс вашим целевым таймфреймом, чтобы найти бар целевого таймфрейма, который вы хотите использовать
    https://www.mql5.com/en/docs/indicators/icustomс баром, возвращаемым iBarShift(), чтобы получить значение пользовательского индикатора точного времени дня, которое вы хотите Циклы сделают вашу программу медленной и подверженной...
    Quote Originally Posted by ;
    Полностью согласен, работать с iCustom и iBarShift более эффективно. Позже индикатор буфера может быть добавлен с помощью #resource и вызываться, например, для уменьшения номера файла до 1.
    Я уже реализовал индикатор по совету paulselvan, и учитывая, что я использую его только периодически, чтобы проверить среднее значение объемов, у меня нет проблем с замедлением. Тем не менее, я благодарю вас обоих за ценные советы, и я обязательно постараюсь создать более легкую версию. Спасибо еще раз

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.