Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2249

 
lynxntech #:

подскажите пожалуйста, как проще всего получать данные индикатора которые приходятся на открытие дня?

сейчас через структуру времени получаю час и с помощью часа смотрю в массиве буфера индикатора, не нравится такой вариант

iBarShift

 
Tretyakov Rostyslav #:

iBarShift

голова совсем не соображает

int index=iBarShift(Symbol(),PERIOD_H1,TimeCurrent(),0);
Print(index);  

результат - 0

должен быть 22

 
lynxntech #:

голова совсем не соображает

результат - 0

должен быть 22

С чего бы результат должен быть 22, а не ноль?

Попробуйте так:

   datetime time=D'2023.08.25 20:00';
   ENUM_TIMEFRAMES tf=PERIOD_H1;
   bool exact=false;
//--- если бара на указанное время нет - iBarShift вернет индекс ближайшего бара
   int bar_index=iBarShift(_Symbol,tf,time,exact);
   Print(bar_index);

Результат будет 3, т.к. время задано 20:00, а текущее время 23:17.

С уважением, Владимир.

 
MrBrooklin #:

С чего бы результат должен быть 22, а не ноль?

Попробуйте так:

Результат будет 3, т.к. время задано 20:00, а текущее время 23:17.

С уважением, Владимир.

понял, не с той стороны считаю, думаю о начале дня..)

 
lynxntech #:

голова совсем не соображает

результат - 0

должен быть 22

int index1=iBarShift(Symbol(),PERIOD_D1,Time[0],false);
Print(iOpen(_Symbol,PERIOD_D1,index1));
 
Как соединить два включаемых файла в один код?
Файлы:
ATR_mt4.zip  8 kb
 
megaman324 #:
Как соединить два включаемых файла в один код?

Пожалуйста.

Файлы:
 

Добрый день, господа знатоки! Несколько дней бьюсь над своей проблемой, но безрезультатно. Совсем недавно (меньше недели) начал изучать MQL5. До этого никаких языков, кроме английского не изучал. Сильно не бейте!

Для начала хочу написать советника для ручной торговли. В моем понимании, это, когда советник собирает торговые сигналы с разных пользовательских индикаторов и выводит их на информационную панель. Написал, вернее отредактировал поставляемый с МТ5 торговый сигнал, суть которого сводится к следующему:

//+------------------------------------------------------------------+
//| Возвращает силу сигнала на покупку                               |
//+------------------------------------------------------------------+
int CSignalTemaDema::LongCondition()
  {
   int signal=0;
//--- для режима работы по тикам idx=0, в режиме работы по сформировавшимся барам idx=1
   int idx=StartIndex();
//--- значения средних на последнем сформировавшемся баре
   double last_fast_value=MAFast(idx);
   double last_slow_value=MASlow(idx);
//--- значения средних на предпоследнем сформировавшемся баре
   double prev_fast_value=MAFast(idx+1);
   double prev_slow_value=MASlow(idx+1);
//--- если быстрая скользящая выше медленной на последних двух закрытых барах
   if((last_fast_value>last_slow_value) && (prev_fast_value>prev_slow_value))

     {
      signal=100; // сигнал на покупку есть
      Print("TEMA(",m_ma_period_fast, ") выше DEMA(",m_ma_period_slow,") на таймфрейме ",
            EnumToString(m_period) //показывает и пишет таймфрейм индикатора, а не графика.
           );
      Print("Сигнал равен =",signal);   
      Comment(signal);
     }


//--- вернем значение сигнала
   return(signal);

  }

//+------------------------------------------------------------------+
//| Возвращает силу сигнала на продажу                               |
//+------------------------------------------------------------------+
int CSignalTemaDema::ShortCondition()
  {
   int signal=0;
//--- для режима работы по тикам idx=0, в режиме работы по сформировавшимся барам idx=1
   int idx=StartIndex();
//--- значения средних на последнем сформировавшемся баре
   double last_fast_value=MAFast(idx);
   double last_slow_value=MASlow(idx);
//--- значения средних на предпоследнем сформировавшемся баре
   double prev_fast_value=MAFast(idx+1);
   double prev_slow_value=MASlow(idx+1);
//--- если быстрая скользящая ниже медленной на последних двух закрытых барах
   if((last_fast_value<last_slow_value) && (prev_fast_value<prev_slow_value))
     {
      signal=-100; // сигнал на продажу есть
      Print("TEMA(",m_ma_period_fast, ") ниже DEMA(",m_ma_period_slow,") на таймфрейме ",
            EnumToString(m_period) //показывает и пишет таймфрейм индикатора, а не графика.
           );
      Print("Сигнал равен =",signal);   
      Comment(signal);
      
     }
//--- вернем значение сигнала
   return(signal);
  }

и соответственно подключил этот торговый сигнал к торговому советнику с помощью "Мастера MQL5: Советник (сгенерировать)".

Закомментил ненужные строки кода, отвечающие за трейлинг и  прочее, запустил советник на исторических данных, посмотрел журнал тестирования и окно графика во время тестирования и нашел артифакт, который не могу для себя объяснить. 

В журнал функцией Print пишется положение быстрой TEMA относительно медленной DEMA, что соответствует реальным расположениям на графике. Так же в журнал пишется торговый сигнал 100/-100, как это задумано кодом.

НО! на графике функцией Comment, после образования третьего бара от пересечения (в любом направлении) быстрой TEMA медленной DEMA, отображается длинное число (каждый раз увеличивающееся). Затем, как ни в чем ни бывало, Comment опять показывает сигнал: 100/-100.


Что я делаю не так? Это нормально или что-то где-то не работает? Я же практически ничего не изменил в коде сигнала поставляемого с MT5. 

Файлы:
 

Добрый день, коллеги - интересует, на МТ5,  оптимальный вариант расчета средней цены за например 5 лет в один и тот же день. Типа 10 день года - то вот такой код...

Если например, в какой - то из годов - выходной и не было торгов в этот день года - то этот день пропускается и все. ИНтересует вообще типа такого индикатора:

1. текущий год - цена, цвет линия 1

2. усредненный за 2 (предыдущих) года  - цена (средняя) - другой цвет линия 2,

3. усредненный за 5 (предыдущих) лет  - цена (средняя) - другой цвет линия 3,

все это на эране на дневках (можно в доп окне (снизу)) - сразу все видно. Снизу также шкала времени.

типа этого (нормировку к 100 можно не делать, можно и в ценах цены и все)  - интересует оптимальных подход к расчету средних значений цен - за определенный день года (-лет).



Остальное я сам сделаю.

 
Подскажите, пожалуйста, почему в компиляторе возникает предупреждение
possible loss of data due to type conversion from 'long' to 'datetime'

вот на эту строчку 

datetime position_time   = PositionGetInteger(POSITION_TIME);    


если в документации написано:

Для функции PositionGetInteger()

ENUM_POSITION_PROPERTY_INTEGER

Идентификатор

Описание

Тип

POSITION_TIME

Время открытия позиции

datetime

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
PositionGetInteger - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Причина обращения: