Можно ли добавить роботу время в которое все сделки открытые на данный момент закроются?
Georgii Gabeev:
Можно ли добавить роботу время в которое все сделки открытые на данный момент закроются?
Можно ли добавить роботу время в которое все сделки открытые на данный момент закроются?
Можно.
Не подскажите какой код?
Georgii Gabeev:
Не подскажите какой код?
Не подскажите какой код?
У Алексея я уверен нормальный код) А у вас? Вы как пытались уже сделать то что вам надо?
Georgii Gabeev:
Не подскажите какой код?
Не подскажите какой код?
Определяете сейчас который час, желательно в секундах, затем если у вас есть позиции и если текущее время попадает в заданный вами промежуток - закрываете позицию.
//+------------------------------------------------------------------+ //| 098.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- input string t10="---- CalendarValueLast 1-----"; // input datetime HoursFrom = D'1970.01.01'; // 1 Время старт Сигнал Календаря input datetime HoursTo = D'1970.01.01'; // Время стоп Сигнал Календаря input string t11="---- CalendarValueLast 2-----"; // input datetime HoursFrom1 = D'1970.01.01'; // 2 Время старт Сигнал Календаря input datetime HoursTo1 = D'1970.01.01'; // Время стоп Сигнал Календаря input string t12="---- CalendarValueLast 3-----"; // input datetime HoursFrom2 = D'1970.01.01'; // 3 Время старт Сигнал Календаря input datetime HoursTo2 = D'1970.01.01'; // Время стоп Сигнал Календаря //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- OnTimer1(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer1(void) { //--- if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) || (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom))|| (HoursFrom1<HoursTo1 && TimeLocal()>=HoursFrom1 && TimeLocal()<HoursTo1) || (HoursFrom1>HoursTo1 && (TimeLocal()<HoursTo1 || TimeLocal()>=HoursFrom1))|| (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) || (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2))) { PlaySound("news.wav"); } } //+------------------------------------------------------------------+
для мт4 и мт5
Вроде в тестере сработало
//+------------------------------------------------------------------+ //| 098.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <stdlib.mqh> //--- input string t10="---- Time -----"; // input datetime HoursFrom = D'1970.01.01'; // Закрыть всё //--- datetime HoursTo = D'1970.01.01'; // uint SLEEPTIME = 1; bool CloseOpenOrders = true; double Price[2]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- OnTimer1(); } //+------------------------------------------------------------------+ //| Check for long position closing | //+------------------------------------------------------------------+ bool OnTimer1(void) { bool res=false; if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) || (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom))) { CloseAllOrders(); Sleep(SLEEPTIME*1000); CloseAllOrders(); ObjectsDeleteAll(); ExpertRemove(); PlaySound("expert.wav"); res=true; } //--- result return(res); } //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void CloseAllOrders(void) { int iOrders=OrdersTotal()-1, i; if(CloseOpenOrders) { for(i=iOrders; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() && !OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],0)) Print(OrderError()); if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderDelete(OrderTicket())) Print(OrderError()); } } } } //+------------------------------------------------------------------+ //| Function..: OrderError | //+------------------------------------------------------------------+ string OrderError(void) { int iError=GetLastError(); return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",iError," ",ErrorDescription(iError))); } //+------------------------------------------------------------------+ //| Function..: GetMarketInfo | //+------------------------------------------------------------------+ bool GetMarketInfo(void) { RefreshRates(); Price[0]=MarketInfo(OrderSymbol(),MODE_ASK); Price[1]=MarketInfo(OrderSymbol(),MODE_BID); double dPoint=MarketInfo(OrderSymbol(),MODE_POINT); if(dPoint==0) return(false); return(Price[0]>0.0 && Price[1]>0.0); } //+------------------------------------------------------------------+
простой и функциональный скрипт (кроме стринговых строк)), можно протестировать, выбрать одну из перегруженных функций - только по часам или часы с минутами,
не помню кто автор идеи +1 и счетчика, немного изменил названия
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input bool TradeTime = true; // Ограничивать работу советника по времени input int OpenHour = 10; // Час начала торговли input int OpenMinute = 10; // Минута начала торговли input int CloseHour = 14; // Час завершения торговли input int CloseMinute = 15; // Минута завершения торговли //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { // вызов только с часами if(TradeTime && !isTradeTime(OpenHour,CloseHour)) { Print("Торговля по часам запрет"); //return; } else { Print("Торговля по часам разрешена"); } // вызов с часами и минутами if(TradeTime && !isTradeTime(OpenHour,OpenMinute,CloseHour,CloseMinute)) { Print("Торговля по часам и минутам запрет"); //return; } else { Print("Торговля по часам и минутам разрешена"); } } //+——————————————————————————————————————————————————————————————————+ //| | //+——————————————————————————————————————————————————————————————————+ bool isTradeTime(int openHour,int openMinute,int closeHour,int closeMinute) { MqlDateTime dt; TimeToStruct(TimeCurrent(),dt); int openTimeCode=StringToInteger("1"+IntegerToString(openHour)+IntegerToString(openMinute)); int closeTimeCode=StringToInteger("1"+IntegerToString(closeHour)+IntegerToString(closeMinute)); int currentTimeCode=StringToInteger("1"+IntegerToString(dt.hour)+IntegerToString(dt.min)); return(currentTimeCode>openTimeCode && currentTimeCode<=closeTimeCode); } //+——————————————————————————————————————————————————————————————————+ //| | //+——————————————————————————————————————————————————————————————————+ bool isTradeTime(int openHour,int closeHour) { MqlDateTime dt; TimeToStruct(TimeCurrent(),dt); return((openHour < closeHour && dt.hour >= openHour && dt.hour < closeHour) || (openHour > closeHour && ((dt.hour >= openHour && openHour <=23) || (dt.hour<closeHour && closeHour>=0)))); } //+------------------------------------------------------------------+
короткий вариант:
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ input bool TradeTime = true; // Ограничивать работу советника по времени input int OpenHour = 10; // Час начала торговли input int OpenMinute = 10; // Минута начала торговли input int CloseHour = 14; // Час завершения торговли input int CloseMinute = 15; // Минута завершения торговли //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { // вызов только с часами if(TradeTime && !isTradeTime(OpenHour,CloseHour)) return; // вызов с часами и минутами if(TradeTime && !isTradeTime(OpenHour,OpenMinute,CloseHour,CloseMinute)) return; } //+——————————————————————————————————————————————————————————————————+ //| | //+——————————————————————————————————————————————————————————————————+ bool isTradeTime(int openHour,int openMinute,int closeHour,int closeMinute) { MqlDateTime dt; TimeToStruct(TimeCurrent(),dt); int openTimeCode=StringToInteger("1"+IntegerToString(openHour)+IntegerToString(openMinute)); int closeTimeCode=StringToInteger("1"+IntegerToString(closeHour)+IntegerToString(closeMinute)); int currentTimeCode=StringToInteger("1"+IntegerToString(dt.hour)+IntegerToString(dt.min)); return(currentTimeCode>openTimeCode && currentTimeCode<=closeTimeCode); } //+——————————————————————————————————————————————————————————————————+ //| | //+——————————————————————————————————————————————————————————————————+ bool isTradeTime(int openHour,int closeHour) { MqlDateTime dt; TimeToStruct(TimeCurrent(),dt); return((openHour < closeHour && dt.hour >= openHour && dt.hour < closeHour) || (openHour > closeHour && ((dt.hour >= openHour && openHour <=23) || (dt.hour<closeHour && closeHour>=0)))); } //+------------------------------------------------------------------+
Большое спасибо!
Alexsandr San:
для мт4 и мт5
Вроде в тестере сработало
Georgii Gabeev:
Большое спасибо!
Большое спасибо!
пожалуйста!

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь