- Советники: Усредняющий советник по индикатору RSI
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
- Проблема с написанием советника!
Здравствуйте! Как разрешить советнику торговать, только в определенное время? Мне нужна торговля только в азию и европу. Что то запутался в данной теме. Подскажите кому не жалко!
Например так: Opening and Сlosing on time.
Задавать интервал времени (для удобства время имеет тип datetime, но берётся из него только часы и минуты)
//--- input parameters input datetime m_time_open=D'1980.07.19 13:00:00'; // opening time (only HH:mm are considered) input datetime m_time_close=D'1980.07.19 13:01:00'; // closing time (only HH:mm are considered)
, а затем сравнивать текущее время сервера и этот заданный интервал
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- MqlDateTime str_time_current,str_time_open,str_time_close; TimeToStruct(TimeCurrent(),str_time_current); TimeToStruct(m_time_open,str_time_open); TimeToStruct(m_time_close,str_time_close); if(!IF_POSITION_ALREADY_OPEN) { if(str_time_current.hour==str_time_open.hour) if(str_time_current.min==str_time_open.min) {
Здравствуйте! Как разрешить советнику торговать, только в определенное время? Мне нужна торговля только в азию и европу. Что то запутался в данной теме. Подскажите кому не жалко!
extern string StartTimeOpen="03:00";// время задано строкой extern string StopTimeOpen = "16:00"; // функция проверки совпадения серверного времени и заданного диапозона // совпадает - true, нет - false bool CheskForWorkTime(string startT,string stopT) { if(TimeCurrent()>StringToTime(startT) && TimeCurrent()<StrToTime(stopT)) return(true); return (false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CheskForWorkTime(datetime startT,datetime stopT) { if(TimeCurrent()>startT && TimeCurrent()<stopT) return(true); return (false); } //+------------------------------------------------------------------+
Например так: Opening and Сlosing on time.
Задавать интервал времени (для удобства время имеет тип datetime, но берётся из него только часы и минуты)
, а затем сравнивать текущее время сервера и этот заданный интервал
Володя, тут надо даты задавать, а чел просил время
Володя, тут надо даты задавать, а чел просил время
Всё правильно, задаётся ВРЕМЯ:
"... Например так: Opening and Сlosing on time.
Задавать интервал времени (для удобства время имеет тип datetime, но берётся из него только часы и минуты) ... ".
Такой подход удобен для конвертации и позволяет делать оптимизацию, в отличие от string.
Всем спасибо за советы, но что то у меня не получается. Понимаю, что это все просто, но что то не могу догнать. Как узнать текущее время без года и месяца? Я могу узнать время открытия свечи, дневной и текущей минутной например... но оно с годом и месяцем. как из него вычислить только часы? либо мне нужно перевезти время открытия дневной свечи и минутной в формат int с помощью StringToTime() и сравнить, но это тоже не выходит.
Пример MQL5 - во входных параметрах задаём ВРЕМЕННОЙ промежуток (используем из переменных "Opening time" и "Closing time" ТОЛЬКО часы и минуты)
... //--- input parameters ... input datetime Start=D'1970.01.01 08:00:00'; // Opening time (only HH:mm are considered) input datetime Close=D'1970.01.01 23:59:00'; // Closing time (only HH:mm are considered) ... //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { ... MqlDateTime STimeCurrent; TimeToStruct(TimeCurrent(),STimeCurrent); long time_current=STimeCurrent.hour*3600+STimeCurrent.min*60+STimeCurrent.sec; MqlDateTime SStart; TimeToStruct(Start,SStart); long time_start=SStart.hour*3600+SStart.min*60; MqlDateTime SClose; TimeToStruct(Close,SClose); long time_close=SClose.hour*3600+SClose.min*60; if(time_current>=time_start && time_current<time_close) { //--- можно торговать }
в OnTick() переводим время в структуру, затем из структуры выделяем только время. Расчёт простой: часы умножаем на 3600, минуты умножаем на 60, Причём текущее время считаем с точностью до секунд, а временной интервал с точностью до минут.
Всем спасибо за советы, но что то у меня не получается. Понимаю, что это все просто, но что то не могу догнать. Как узнать текущее время без года и месяца? Я могу узнать время открытия свечи, дневной и текущей минутной например... но оно с годом и месяцем. как из него вычислить только часы? либо мне нужно перевезти время открытия дневной свечи и минутной в формат int с помощью StringToTime() и сравнить, но это тоже не выходит.
Здравствуйте! Как разрешить советнику торговать, только в определенное время? Мне нужна торговля только в азию и европу. Что то запутался в данной теме. Подскажите кому не жалко!
Мне понравилась статья, и использовал совсем недавно.
if(CopyBuffer(Handle_4P72_L0_1,0,0,1,line1_L0)<0 || CopyBuffer(Handle_4P72_L0_2,0,0,1,line2_L0)<0 || CopyBuffer(Handle_4P72_L1_1,0,0,1,line1_L1)<0 || CopyBuffer(Handle_4P72_L1_2,0,0,1,line2_L1)<0 || CopyBuffer(Handle_4P72_L2_1,0,0,1,line1_L2)<0 || CopyBuffer(Handle_4P72_L2_2,0,0,1,line2_L2)<0 || CopyTime(_Symbol,_Period,0,1,New_Time)<0)
if( Buy_opened && (line1_L0[0] < line2_L0[0] || L0_1_line_power ==0) && (line1_L1[0] < line2_L1[0] || L1_1_line_power ==0) && (line1_L2[0] < line2_L2[0] || L2_1_line_power ==0) && ((New_Time[0]-3600*Start_Hour)%86400 < 3600*Period_Hour) )
Это с дискретностью 1 час.
Чтобы отключить фильтрацию по времени Period_Hour = 25 (остаток от деления будет всегда меньше)
Всем спасибо за советы, но что то у меня не получается. Понимаю, что это все просто, но что то не могу догнать. Как узнать текущее время без года и месяца? Я могу узнать время открытия свечи, дневной и текущей минутной например... но оно с годом и месяцем. как из него вычислить только часы? либо мне нужно перевезти время открытия дневной свечи и минутной в формат int с помощью StringToTime() и сравнить, но это тоже не выходит.
Если Вам надо заблокировать какие либо действия торговые, в определенное время, то можно использовать такой код
int hourOne=10; //начала диапазона блокировки int hourEnd=20; //конец диапазона блокировки datetime Open_timePos1=iTime(_Symbol,0,0); MqlDateTime str1; TimeToStruct(Open_timePos1,str1); str1.hour=hourOne; str1.min=0; str1.sec=0; datetime start_time=StructToTime(str1); datetime Open_timePos2=iTime(_Symbol,0,0); MqlDateTime str2; TimeToStruct(Open_timePos2,str2); str2.hour=hourEnd; str2.min=00; str2.sec=0; datetime stop_time=StructToTime(str2); //Print ("start_time-",start_time," stop_time-",stop_time); if(iTime(_Symbol,0,0)>=start_time && iTime(_Symbol,0,0)<=stop_time)//Исключаем временной интервал { BuyNow=false; //указываете то, что будите блокировать SellNow=false;//указываете то, что будите блокировать }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования