Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Используй MQL5 Cloud Network. Тестируй роботов с гиперскоростью!
Alexander
300
Alexander 2010.12.19 14:48 

Помогите новичку.

Есть внешние переменные указывающие время :

extern datetime timeStart = D'12:00:00';
extern datetime timeStop = D'20:00:00';

Советник находится на графике, как их сравнивать с временем получаемое функцие TimeCurrent() чтобы советник включал торговый алгоритм в рамках этого времени.

т.е. if ( ... что-то ...) // т.е. чтобы советник каждый день торговал с 12 до 20 к примеру.

{

работает торговый алгоритм.

}

Заранее спасибо :)

Victor Nikolaev
Модератор
14060
Victor Nikolaev 2010.12.19 14:51  
//+------------------------------------------------------------------+
//|                        Временные ограничения по работе советника |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
extern string sH="Временные ограничения по работе советника (по часам)";
extern int     HourStart      =       -1;
extern int     HourStop       =       -1;

//+------------------------------------------------------------------+
//|                        Функция контроля времени работе советника |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| bool CheckHour();                                                |
//+------------------------------------------------------------------+
bool CheckHour(){
   int CurrentHour=TimeHour(Time[0]);
   if (HourStart==-1 || HourStop==-1) return(true);
   if (HourStart == HourStop)
      if(CurrentHour==HourStart) 
         return(true);
   if (HourStart<HourStop)
      if (HourStart<=CurrentHour)
         if (CurrentHour<=HourStop) 
            return(true);
   if (HourStart>HourStop)
      if (HourStart>=CurrentHour || CurrentHour<=HourStop) 
         return(true);
   return(false);
}

// Пример использования

int start(){
  if (!CheckHour()) return(0);
  // Ваш код
}
Можно примерно так делать
Alexander
300
Alexander 2010.12.19 15:04  

Спасибо ...

А может есть именно с привязкой времени сервера?

Victor Nikolaev
Модератор
14060
Victor Nikolaev 2010.12.19 15:06  
Alex2112:

Спасибо ...

А может есть именно с привязкой времени сервера?


Это и есть по серверному времени. Котировки по нему поступают
Alexander
300
Alexander 2010.12.19 15:19  

Да действительно спасибо.

Alexander
300
Alexander 2010.12.19 17:34  

extern string StartTime1 = "10:00:00";

extern string StartTime2 = "15:00:00";

int start()

{

if ( (TimeCurrent()-StrToTime("StartTime1")) < 60){Alert ("ДА");}
if ( (TimeCurrent()-StrToTime("StartTime2")) < 60){Alert ("ДА");}
}

ПОЧЕМУ НЕ РАБОТАЕТ ?
Victor Nikolaev
Модератор
14060
Victor Nikolaev 2010.12.19 17:49  
Alex2112:

extern string StartTime1 = "10:00:00";

extern string StartTime2 = "15:00:00";

int start()

{

if ( (TimeCurrent()-StrToTime("StartTime1")) < 60){Alert ("ДА");}
if ( (TimeCurrent()-StrToTime("StartTime2")) < 60){Alert ("ДА");}
}

Переменные то зачем в двойные кавычки брать?
Alexander
300
Alexander 2010.12.19 17:57  

Тип данных string поэтому в двойных кавычках.

Alexander
300
Alexander 2010.12.19 18:08  
Alex2112:

Тип данных string поэтому в двойных кавычках.


Да и как Вы понимаете не работает в тестере.
Victor Nikolaev
Модератор
14060
Victor Nikolaev 2010.12.19 18:15  

Результат работы небольшого скрипта

2010.12.19 21:14:25 test EURUSD,Monthly: 3. 2010.12.19 15:00
2010.12.19 21:14:25 test EURUSD,Monthly: 2. 2010.12.19 10:00
2010.12.19 21:14:25 test EURUSD,Monthly: 1. 2010.12.17 22:59

Сам скрипт

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                                    vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Victor Nicolaev"
#property link      "vinin.ucoz.ru"

extern string StartTime1 = "10:00:00"; 

extern string StartTime2 = "15:00:00";


int start()
{

   Print("1. ", TimeToStr(TimeCurrent(),        TIME_DATE)," ",TimeToStr(TimeCurrent(),        TIME_MINUTES));
   Print("2. ", TimeToStr(StrToTime(StartTime1),TIME_DATE)," ",TimeToStr(StrToTime(StartTime1),TIME_MINUTES));
   Print("3. ", TimeToStr(StrToTime(StartTime2),TIME_DATE)," ",TimeToStr(StrToTime(StartTime2),TIME_MINUTES));
} 

Совершенно не нужно переменные в кавычки брать

Alexander
300
Alexander 2010.12.21 08:39  

Виктор спасибо Я понял свою ошибку.

Это банальный перегруз мозга. Конешно же переменные в кавычки брать не нужно :)

Спасибо.

Тем не менее не могу понять. Данный код в тестере открывает ордера когда угодно.

extern string StartTime1 = "08:00:00"; //"часы:минуты:секунды" текущих суток для запуска алгоритма.
extern string StartTime2 = "16:00:00"; //"часы:минуты:секунды" текущих суток для запуска алгоритма.

int start()
{

if ( (TimeCurrent()-StrToTime(StartTime1)) < 60){if (OrdersTotal() == 0){initialization (); return (0);}}
if ( (TimeCurrent()-StrToTime(StartTime2)) < 60){if (OrdersTotal() == 0){initialization (); return (0);}}

}


int initialization()
{
//---BAY---
askMay = MarketInfo(Symbol(),MODE_ASK);
askMay = NormalisePrice(Symbol(),askMay);
if (stopLos != 0) {baySL = NormalisePrice(Symbol(),Bid-stopLos*Point);} //----так с учётом спреда
if (TakeProfit != 0) {bayTP = NormalisePrice(Symbol(),askMay+TakeProfit*Point);}
MNbay = TimeCurrent();
ticketBay = OrderSend(Symbol(),OP_BUY, lotMay,askMay,Slippage,baySL,bayTP,0,MNbay);
//---SEL---
bidMay = MarketInfo(Symbol(),MODE_BID);
bidMay = NormalisePrice(Symbol(),bidMay);
if (stopLos != 0) {selSL = NormalisePrice(Symbol(),Ask+stopLos*Point);}

if (TakeProfit != 0) {selTP = NormalisePrice(Symbol(),bidMay-TakeProfit*Point);}
MNsel = TimeCurrent();
ticketSel = OrderSend(Symbol(),OP_SELL,lotMay,bidMay,Slippage,selSL,selTP,0,MNsel);
//---
return(0);
}

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий