Здравствуйте, форумчане!
Помогите прописать в роботе расписание торговли. Хочу поэкспериментировать, погонять в тестере при задании НЕ торговли в:
1)пт,
2)пн,
3)утром в пн,
4) вечером в пт.
Пока додумался до этого:
//Buy
if(day_of_week>0 && day_of_week<5)
Выходит ошибка, что это необъявленный идентификатор.
Переменные:
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ extern string оoooooooooooooo = "====== Фильтр времени ======"; extern bool UseFilterTime = False; // Торговля в пятницу после и в понедельник до указанных времен extern bool UseFilterDate = False; // Торговля в конце и начале месяца extern int EndHourFriday = 20; // Время конца торговли в пятницу extern int StartHourMonday = 5; // Время начала торговли в понедельник extern int EndMonth = 1; // Закончить торговлю за X дней до конца месяца включительно extern int StartMonth = 1; // Начать торги после X дней начала месяца //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
Использование:
if (time()) {
Код, что делаем когда торгуем.
}
Функция:
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //| Функция фильтра по времени |> //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ bool time() { //--- if ((DayOfWeek()==0 || DayOfWeek()==6) && (UseFilterTime || UseFilterDate)) return(0); // Не торговать в выходные if (((Hour()<StartHourMonday && DayOfWeek()==1) || (Hour()>=EndHourFriday && DayOfWeek()==5)) && UseFilterTime) return(0); if ((Day()<StartMonth+1 || ((Day()<7)&& Month()==1)) && UseFilterDate) return(0); if ((Day()>31-EndMonth || ((Day()>28-EndMonth) && Month()==2) || (Day()>30-EndMonth && ((Month()==4) || (Month()==6) || (Month()==9) || (Month()==11)))) && UseFilterDate) return(0); //--- return (1); }
Здравствуйте, форумчане!
Помогите прописать в роботе расписание торговли. Хочу поэкспериментировать, погонять в тестере при задании НЕ торговли в:
1)пт,
2)пн,
3)утром в пн,
4) вечером в пт.
Пока додумался до этого:
//Buy
if(DayOfWeek()==0 && DayOfWeek()==6 && DayOfWeek()==5))
Но после этого ни одной сделки не было заключено
Переменные:
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ extern bool ExpertTime = True; // True-вкл. False-выкл. extern string TradeDay = "1,2,3,4,5"; // Дни работы советника 1= ПН, 5 = ПТ. extern int HourStart = 0; // Старт в понедельник. extern int HourStops = 19; // Стоп в пятницу. extern int Ea_Start = 0; // Ежедневный cтарт советника. extern int Ea_Stop = 23; // Ежедневный cтоп советника. //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
Использование:
if(Tradetime(ExpertTime, Ea_Start, Ea_Stop)==1) { //---- //... Здесь код. //---- }
Функция:
//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ //| Tradetime(). Работа по времени. |> //+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ int Tradetime(bool exptime, int OpenHour, int CloseHour) { // --- int day[]; int i=0, np; int Trading=0; string st, tmp=TradeDay; ArrayResize(day, 0); while (StringLen(tmp)>0) { np=StringFind(tmp, ","); if (np<0) { st=tmp; tmp=""; } else { st=StringSubstr(tmp, 0, np); tmp=StringSubstr(tmp, np+1); } i++; ArrayResize(day, i); day[i-1]=StrToInteger(st); } int TradingTime=0; for (int f=0; f<7; f++) { if (DayOfWeek()==day[f])Trading=1; } if (OpenHour>CloseHour) { if (Hour()<=CloseHour || Hour()>=OpenHour)TradingTime=1; } if (OpenHour<CloseHour) { if (Hour()>=OpenHour && Hour()<=CloseHour)TradingTime=1; } if (OpenHour==CloseHour) { if (Hour()==OpenHour)TradingTime=1; } if (DayOfWeek()==1 && Hour() <= HourStart)TradingTime=0; if (DayOfWeek()==5 && Hour() >= HourStops)TradingTime=0; if (Trading!=1) TradingTime=0; if (exptime!=true)TradingTime=1; // --- return (TradingTime); }
Здравствуйте, форумчане!
Помогите прописать в роботе расписание торговли. Хочу поэкспериментировать, погонять в тестере при задании НЕ торговли в:
1)пт,
2)пн,
3)утром в пн,
4) вечером в пт.
Пока додумался до этого:
//Buy
if(DayOfWeek()==0 && DayOfWeek()==6 && DayOfWeek()==5))
Но после этого ни одной сделки не было заключено
Неправильно пишете логические условия. День не может быть одновременно понедельником и пятницей. Замените && на ||
if(DayOfWeek()==0 || DayOfWeek()==6 || DayOfWeek()==5)
if(Tradetime(ExpertTime, Ea_Start, Ea_Stop)==1) { //---- //... Здесь код. //---- }
/// написано по памяти - лень открывать редактор :-) int tradingHour[7][24]; /// 7 дней по 24 часа - в OnInit поставить 1 когда торговля разрешена int TradeAllowedByTime(datetime now=0) { int hour,day; if (now == 0) now=TimeCurrent(); day=TimeDayOfWeek(now); hour=TimeHour(now); return tradingHour[day][hour]; }
У меня проверяется только время, без дней недели. Условие проверяется перед попыткой открыть ордер, сигналы к закрытию срабатывают круглосуточно.
// время задается, как строка extern string StartTimeOpen = "02:00"; extern string StopTimeOpen = "23: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); }
Друзья кто подскажет каким образом вставить в этот код (МТ5) время работы робота со вторника по четверг включительно, во все часы кроме с 15 до 16 и 19 до 20? Буду очень благодарен.
//--- Set filter parameters
filter0.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
filter0.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
filter0.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
filter0.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
filter0.Weight(Signal_ITF_Weight);
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, форумчане!
Помогите прописать в роботе расписание торговли. Хочу поэкспериментировать, погонять в тестере при задании НЕ торговли в:
1)пт,
2)пн,
3)утром в пн,
4) вечером в пт.
Пока додумался до этого:
//Buy
if(DayOfWeek()==0 && DayOfWeek()==6 && DayOfWeek()==5))
Но после этого ни одной сделки не было заключено