Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 904

 
Vladimir Karputov:

Перед тестированием (перед запуском теста из редактора MetaEditor) зайдите в редакторе MetaEditor в настройки и посмотрите вкладку "Отладка". В этой вкладке указан символ по которому будет идти тестирование:

А теперь откройте терминал и проверьте, есть ли в окне "Обзор рынка" выбранный символ?

Спасибо большое )
Процесс пошел ))

 
Здравствуйте. Цена в 17:30 прошлого дня. Как её узнать? То есть цену закрытия любого бара в 17:30
 
bij:
Здравствуйте. Цена в 17:30 прошлого дня. Как её узнать? То есть цену закрытия любого бара в 17:30

Почитайте CopyOpen (вторая форма вызова).

 
Vladimir Karputov:

Почитайте CopyOpen (вторая форма вызова).

Спасибо, не понял как время задать, кроме time=D'2018.07.26 17:30'; 

        time=???;      //Как сюда передать 17:30 прошлого дня?
        int barIndex = iBarShift(NULL,PERIOD_M1, time);        // Определение индекса бара, соответствующего времени time
        double openPrice = CopyOpen(NULL, PERIOD_M1, barIndex);// Определение Bid цены открытия бара barIndex
 
bij:

Спасибо, не понял как время задать.

На скорую руку накидал скриптик:

//+------------------------------------------------------------------+
//|                                                  TestOpenDay.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property script_show_inputs
//--- enums
enum ENUM_DAY
  {
   DAY_CURRENT,            // Сегодня
   DAY_YESTERDAY,          // Вчера
   DAY_BEFORE_YESTERDAY    // Позавчера
  };
//--- input parameters
input ENUM_DAY InpDay      =  DAY_YESTERDAY; // День:
input uint     InpHours    =  17;            // Часы
input uint     InpMinutes  =  30;            // Минуты
//--- global variables
datetime day;
int      day_shift;
int      hours;
int      minutes;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   hours=int(InpHours> 23 ? 23 : InpHours);
   minutes=int(InpMinutes>59 ? 59 : InpMinutes);
   day_shift=(int)InpDay;
   day=iTime(NULL,PERIOD_D1,day_shift);
   Print("Сегодня: ",TimeToString(TimeCurrent(),TIME_DATE),", день: ",InputDayToString(),", дата/время: ",TimeToString(GetTime(day)));
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime GetTime(const datetime time)
  {
   MqlDateTime tm;
   if(!TimeToStruct(time,tm))
      return 0;
   tm.hour=hours;
   tm.min=minutes;   
   return StructToTime(tm);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string InputDayToString(void)
  {
   return(InpDay==DAY_CURRENT? "Сегодня" : InpDay==DAY_YESTERDAY ? "Вчера" : "Позавчера");
  }
//+------------------------------------------------------------------+

В журнал после запуска выведет выбранный день, его дату и время.

 
Artyom Trishkin:

На скорую руку накидал скриптик:

В журнал после запуска выведет выбранный день, его дату и время.

Спасибо, хочу в индикаторе ставить линию в истории на цену в 17:30, каждые сутки. Как задам каждый день? Чтобы не писать каждую дату, а только время 17:30

Вот так ставлю на цену закрытия дня, каждый день.

 if(!TrendCreate(0,"close"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(NULL,PERIOD_D1,i+1),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
 
bij:

Спасибо, хочу в индикаторе ставить линию в истории на цену в 17:30, каждые сутки. Как задам каждый день?

Вот так ставлю на цену закрытия дня, каждый день.

Если прошлая дата (год, месяц, день) не равна текущей, и час и минута равны заданным, то ставить линию.

Или так: Если прошлая дата (год, месяц, день) равна текущей, или час и минута не равны заданным, то continue;

В любом случае будут пропуски - не на каждом баре выбранного таймфрейма есть заданное время.

 
Artyom Trishkin:

Если прошлая дата (год, месяц, день) не равна текущей, и час и минута равны заданным...

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& здесь как написать? )

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& здесь как написать? )

Вам нужно из времени time[i] извлечь дату и сравнить её с датой time[i+1]. Если не равны, то извлечь из time[i] время и сравнить с заданным временем. Если совпадают - ставить линию.

Как всё это извлекается - я показал в скрипте. Осталось только подумать.

 
Artyom Trishkin:

Вам нужно из времени time[i] извлечь дату и сравнить её с датой time[i+1]. Если не равны, то извлечь из time[i] время и сравнить с заданным временем. Если совпадают - ставить линию.

Как всё это извлекается - я показал в скрипте. Осталось только подумать.

Вечер пятницы, думается плохо) Ничего не строит. Почему?

   datetime date1=time[i]; 
   datetime date2=time[i+1];
 
   MqlDateTime str1,str2; 
   TimeToStruct(date1,str1); 
   TimeToStruct(date2,str2); 
  if(str1.day!=str2.day&&str1.mon!=str2.mon&&str1.year!=str2.year&&str2.hour==17&&str2.min==30){
  
   if(!TrendCreate(0,"closek"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(i+1,NULL,PERIOD_M30),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
        }