Закрытая тема
31.01.2014, 04:13
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Даже поспали
Для NFP можно формулу написать.
Для остального ничего лучше в голову не приходит, чем завести массив строк-событий halt[] и go[], вручную их проинициализировать.
А что, ньюс-фильтр не умеет читать прошлые события? Это было бы проще всего.
ВТ с ньюс-фильтром происходит неразумно долго,
а оптима будет длиться почти вечность...

К тому же, если настраивать ньюс-фильтр,
то для него это всё события одного уровня важности,
и можно только один раз определить время до (например 1 час)
и время после (1,5 час), на которое блокируется торговля.

А для NFP и ставок это надо делать - 1,5 час до и 2 час после,
для Драги 2-3 часа до и 5-8 часов после, и т.д.
31.01.2014, 04:35
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Чтобы пару промежутков надо складывать мозаику с того что я писал.
Я попробовал этот вариант
int start()
{
if(Day()==23 && (Hour()==15 && Minute()>=30 ||
Hour()==16 && Minute()<30)) return;

Компилируется без проблем, а торговлю не запрещает.
31.01.2014, 07:13
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Сообщение от: Sergey55555555
Я попробовал этот вариант
int start()
{
if(Day()==23 && (Hour()==15 && Minute()>=30 ||
Hour()==16 && Minute()<30)) return;

Компилируется без проблем, а торговлю не запрещает.
Вам qqmber ещё вчера на этот вопрос ответил.
Ты сейчас станешь ругаться на метаквотов, но приоритет операции || выше, чем у &&. Скобки придется поставить.
Dom 
31.01.2014, 07:25
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,035 раз(а) / Репутация: 9035
Сообщение от: Капиталист
Уважаемый eevviill, а так же остальные не менее уважаемые мастера своего дела не поможете с таким вот индикатором:
состоит он из трёх частей , но почему то на графике он показывает на то что нужно подправте его пожалуйста,
или посоветуйте такого формата трендовый индикатор?
(на красные вертикалы внимание не обращайте скапировал не убрал) работает на Н1
спасибо!
VQ и Coral
31.01.2014, 07:31
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Вам qqmber ещё вчера на этот вопрос ответил.
Да, я помню и даже попробовал исправленный вариант,
всё равно не работает.
31.01.2014, 07:39
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Сообщение от: Sergey55555555
Да, я помню и даже попробовал исправленный вариант,
всё равно не работает.
Просто надо включить логику и заключить в скобки (час и минуту) одного времени и (час и минуту) другого времени.
if(Day()==23 && ((Hour()==15 && Minute()>=30) || (Hour()==16 && Minute()<30)))

ps; А вот зелёненькие стрелки, согласно приоритету && и || можно не ставить. Но если поменяют приоритеты то они будут нужны. Так-что я не вдаваясь в подробности всегда ставлю. На скорость это не влияет.

psps; А посмотрев повнимательней, вижу что логика условия абсолютно неверная.
Если перевести это, то получается так:
если число месяца 23 и (время больше 15:30 или меньше 16:30)
Если тебе надо запретить работу в промежутке 15:30 и 16:30 то знак || надо поменять на знак && и можно убрать все скобки. За исключением относящихся к if()

Последний раз редактировалось AlexeyVik; 31.01.2014 в 08:12.
31.01.2014, 08:10
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Просто надо включить логику и заключить в скобки (час и минуту) одного времени и (час и минуту) другого времени.
if(Day()==23 && ((Hour()==15 && Minute()>=30) || (Hour()==16 && Minute()<30)))

ps; А вот зелёненькие стрелки, согласно приоритету && и || можно не ставить. Но если поменяют приоритеты то они будут нужны. Так-что я не вдаваясь в подробности всегда ставлю. На скорость это не влияет.

psps; А посмотрев повнимательней, вижу что логика условия абсолютно неверная.
Если перевести это, то получается так:
если число месяца 23 и (время больше 15:30 или меньше 16:30)
Если тебе надо запретить работу в промежутке 15630 и 16:30 то знак || надо поменять на знак && и можно убрать все скобки. За исключением относящихся к if()
Попробовал вот так:
Код:
int start()
  {
  
  if(Day()==23 || Hour()==1 ||
 Minute()>=00 && Hour()==23 || Minute()<59)
  return;
и так:
Код:
int start()
  {
  
  if(Day()==23 && Hour()==1 || 
Minute()>=00 && Hour()==23 || Minute()<59)
  return;
Не работает.

Как правильно сделать?
31.01.2014, 08:19
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Вот так тоже не получается:
Код:
  if(Day()==23 && Hour()==1 && Minute()>=00 
&& Hour()==23 && Minute()<59)
  return;
31.01.2014, 08:20
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Сообщение от: Sergey55555555
Попробовал вот так:
Код:
int start()
  {
  
  if(Day()==23 || Hour()==1 ||
 Minute()>=00 && Hour()==23 || Minute()<59)
  return;
и так:
Код:
int start()
  {
  
  if(Day()==23 && Hour()==1 || 
Minute()>=00 && Hour()==23 || Minute()<59)
  return;
Не работает.

Как правильно сделать?
Сергей, надо не просто пробовать, а включить логику и просто написать словами что ты хочешь видеть. Или хотя-бы внимательно читать что тебе пишут
Если тебе надо запретить работу в промежутке 15:30 и 16:30 то знак || надо поменять на знак && и можно убрать все скобки. За исключением относящихся к if()
Тогда это условие будет звучать так:
если число месяца 23 и время больше 15:30 и меньше 16:30
То-есть от 15:30 до 16:30 А время состоит из часа и минуты, т.е Hour() == 15 && Minute() > 30
31.01.2014, 08:37
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Тогда это условие будет звучать так:
если число месяца 23 и время больше 15:30 и меньше 16:30
То-есть от 15:30 до 16:30 А время состоит из часа и минуты, т.е Hour() == 15 && Minute() > 30
Т.е. первое условие - начало паузы будет выглядеть так:
Код:
 if(Day()==23 && Hour()==1 && Minute()>=00
А второе - конец паузы:
Код:
Day()==23 && Hour()==23 && Minute()<59)
?
31.01.2014, 08:43
Аватар для jib07
jib07 jib07 вне форума Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
Сообщение от: Sergey55555555
Попробовал вот так:
Код:
int start()
  {
  
  if(Day()==23 || Hour()==1 ||
 Minute()>=00 && Hour()==23 || Minute()<59)
  return;
и так:
Код:
int start()
  {
  
  if(Day()==23 && Hour()==1 || 
Minute()>=00 && Hour()==23 || Minute()<59)
  return;
Не работает.

Как правильно сделать?
Может так по-проще будет для понимания))
Код:
if (Day() == 23)                         // условия для дня
  if (Hour() >= 15 && Minute() >= 30)     // условия для старта
    if (Hour() <=16 && Minute() <= 59)    // условия для конца
      return;
return сработает 23 числа с 15.30 до 16.59 включительно))
31.01.2014, 08:55
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Может так по-проще будет для понимания))
Код:
if (Day() == 23)                         // условия для дня
  if (Hour() >= 15 && Minute() >= 30)     // условия для старта
    if (Hour() <=16 && Minute() <= 59)    // условия для конца
      return;
return сработает 23 числа с 15.30 до 16.59 включительно))
Это точно
Вроде работает
А как сделать переход через сутки и указать месяц?
Т.е.
начало паузы =31 Июля 20-00
конец паузы =01 Августа 01-00
31.01.2014, 09:02
Аватар для jib07
jib07 jib07 вне форума Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
Сообщение от: Sergey55555555
Это точно
Вроде работает
А как сделать переход через сутки и указать месяц?
Т.е.
начало паузы =31 Июля 20-00
конец паузы =01 Августа 01-00
Если Вам надо чтобы сова не работала только ночью, то все намного проще))

Код:
if (Hour() >= 20 && Minute() >= 0)
    return;
if (Hour() <= 1 && Minute() <= 0)
    return;
Ежедневно с 20.00 по 1.00 сова не будет работать, какая цель то у Вас?

ЗЫ подправил))

Последний раз редактировалось jib07; 31.01.2014 в 09:05.
31.01.2014, 09:06
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Если Вам надо чтобы сова не работала только ночью, то все намного проще))

Код:
if (Hour() >= 20 && Minute() >= 0)
  if (Hour() <= 1 && Minute() <= 0)
    return;
Ежедневно с 20.00 по 1.00 сова не будет работать, какая цель то у Вас?
Цель:
- провести оптимизацию с исключением
конкретных событий в указанные дату и время.
31.01.2014, 09:14
Аватар для jib07
jib07 jib07 вне форума Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
Сообщение от: Sergey55555555
Цель:
- провести оптимизацию с исключением
конкретных событий в указанные дату и время.
Через TimeCurrent()
Код:
if (TimeCurrent() > дата1 && TimeCurrent() < дата2)
  return;
дата1 - старт
дата2 - конец

и писать так все даты))) или автоматом из экселя, но гемора больше))

ЗЫ как правильно писать даты надеюсь знаете)))
31.01.2014, 09:18
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Сообщение от: Sergey55555555
Это точно
Вроде работает
А как сделать переход через сутки и указать месяц?
Т.е.
начало паузы =31 Июля 20-00
конец паузы =01 Августа 01-00
По хорошему, не надо усложнять себе жизнь дополнительными параметрами.
В одной из подсказок, кажется тебе здесь, я ссылался на документацию, где говорится, что преобразование строки 15:30 во время даст текущий день. Соответственно StrToTime("15:30"); Будет не что иное как сегодня, или тот день который моделируется в тестере. И всё твоё извращение можно написать так.
Код:
datetime timeStop = StrToTime("15:30");
if(TimeDay(timeStop)  == 23 && TimeCurrent() >= timeStop && TimeCurrent() < timeStop+60*60)
Переводим на русский.
timeStop текущий день, время 15:30
если сегодня 23 число месяца и текущее время больше заданного в переменной timeStop и меньше чем timeStop плюс 60 минут умноженные на 60 для перевода времени в секунды.
Переход от последнего числа месяца к первому числу следующего месяца проходит без проблем. Большую сложность представляет переход с пятницы на понедельник. Тут надо учитывать день недели и соответственно прибавлять 2е суток.
31.01.2014, 09:25
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Если Вам надо чтобы сова не работала только ночью, то все намного проще))

Код:
if (Hour() >= 20 && Minute() >= 0)
    return;
if (Hour() <= 1 && Minute() <= 0)
    return;
Ежедневно с 20.00 по 1.00 сова не будет работать, какая цель то у Вас?

ЗЫ подправил))
А когда бывает минута меньше нуля?
31.01.2014, 09:29
Аватар для jib07
jib07 jib07 вне форума Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
А когда бывает минута меньше нуля?
да косяк, так верней))

Код:
if (Hour() >= 20  || Hour() <= 1)
    return;
c 20 до 1.59))

Последний раз редактировалось jib07; 31.01.2014 в 09:32.
31.01.2014, 09:30
Аватар для Sergey55555555
Sergey55555555 Sergey55555555 на форуме Почётный гражданин
Регистрация: 26.07.2013 / Сообщений: 365
Поблагодарили 341 раз(а) / Репутация: 336
Через TimeCurrent()
Код:
if (TimeCurrent() > дата1 && TimeCurrent() < дата2)
  return;
дата1 - старт
дата2 - конец

ЗЫ как правильно писать даты надеюсь знаете)))
Не знаю
31.01.2014, 09:34
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
да косяк, так верней))

Код:
if (Hour() >= 20  || Hour() <= 1)
    return;
c 20 до 1.59))
Да не обращай внимания... Когда пишешь не в едиторе, то таких ошибок можно написать... каких начинающие не пишут.
А исправленный вариант запретит работу с 20 часов до 2х

Оо! Я нажал цитирование прямо в момент исправления, и не видел поправку...

Последний раз редактировалось AlexeyVik; 31.01.2014 в 09:53.
jib07 
Закрытая тема

Метки
mql программирование, дописать индикатор, дописать эксперт, доработать советник, форекс программирование


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь профессионального программиста в написании МТС индикаторов советников. cmillion Поиск программиста, поиск заказов 96 05.09.2017 08:20
Написание экспертов, индикаторов. Улсуги VPS для ваших советников. RL.Maxim Temp, корзина, реклама 5 31.10.2009 21:55
Написание советников, индикаторов, скриптов для MT4 по Вашему ТЗ Impish Поиск программиста, поиск заказов 0 04.04.2009 21:30


Текущее время: 13:16. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO