Механическая система должно быть?
extern int Expiration = 3600 // each order lives for 1 hour void CheckForExpired(int MN = -1) { for(int i = OrdersTotal() - 1; i >= 0; i--) { // already closed if(OrderSelect(i, SELECT_BY_POS) == false) continue; // not current symbol if(OrderSymbol() != Symbol()) continue; // order was opened in another way if(OrderMagicNumber() != MN && MN != -1) continue; if (TimeCurrent() - OrderOpenTime() > Expiration) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); } RefreshRates(); } } } int start() { if (OrdersTotal() > 0) CheckForExpired(Magic); }
Типа такого?
extern int ExpirationHour = 22 // each order lives until ExpirationHour void CheckForExpired(int MN = -1) { for(int i = OrdersTotal() - 1; i >= 0; i--) { // already closed if(OrderSelect(i, SELECT_BY_POS) == false) continue; // not current symbol if(OrderSymbol() != Symbol()) continue; // order was opened in another way if(OrderMagicNumber() != MN && MN != -1) continue; if (TimeHour(TimeCurrent()) == ExpirationHour) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); } RefreshRates(); } } } int start() { if (OrdersTotal() > 0) CheckForExpired(Magic); }Нивапрос, код пишу буквально на коленке, так что не обижайтесь, если не скомпилится.
Нивапрос, код пишу буквально на коленке, так что не обижайтесь, если не скомпилится.
спасибо. попробую. не хотелось бы надоедать, но что Вы скажете на это? т.е. я имею в виду как бы закрыть в 22.00 и открыть в 10.30? в одном советнике или скрипте? в известнейшем питерском ДЦ не работает такой скрипт, а обойти можно?
//+------------------------------------------------------------------+ //| | //| (если хватит денюшки) |ЗАМЕНИЛ НА //|https://forum.mql4.com/ru/13255#83888 - Открытие ордера по заданому времени //+------------------------------------------------------------------+ #property copyright "" #property link "" #property show_inputs // Если есть желание менять экстерны в процессе //---- extern int H = 10; //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ extern int M = 30; //И ... МИНУТ //-------------------------- int start() { int H, M; while (!IsStopped()) { //выполняется пока скрипт не остановлен Sleep(1000); if (TimeHour(TimeCurrent( ) ) != H || TimeMinute(TimeCurrent( ) ) != M) continue; //время еще не пришло - переходим в начало цикла и ждем 1с. RefreshRates(); //обновляем котировки //OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol() OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol() Print (GetLastError()); //OrderSend("EURUSD",OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol() //OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol() //Print (GetLastError()); return(0); //если оставить эту строку позиции откроются только 1 раз } return(0); }
спасибо. попробую. не хотелось бы надоедать, но что Вы скажете на это? т.е. я имею в виду как бы закрыть в 22.00 и открыть в 10.30? в одном советнике или скрипте? в известнейшем питерском ДЦ не работает такой скрипт, а обойти можно?
Хмм, должен работать... Хотя,
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
Проверьте стопы, возможно на Вашем ДЦ так близко нельзя (подчеркнул, что именно).
А возможно перекрытие переменных, тогда мое должно работать. Навскидку:
//+------------------------------------------------------------------+ //| | //| (если хватит денюшки) |ЗАМЕНИЛ НА //|https://forum.mql4.com/ru/13255#83888 - Открытие ордера по заданому времени //+------------------------------------------------------------------+ #property copyright "" #property link "" #property show_inputs // Если есть желание менять экстерны в процессе //---- extern int H = 10; //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ extern int M = 30; //И ... МИНУТ extern int CloseH = 22; extern int CloseM = 00; //-------------------------- int start() { while (!IsStopped()) { //выполняется пока скрипт не остановлен Sleep(1000); if (TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M); { RefreshRates(); //обновляем котировки //OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol() OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol() Print (GetLastError()); //OrderSend("EURUSD",OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol() //OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol() //Print (GetLastError()); return(0); //если оставить эту строку позиции откроются только 1 раз } if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM); { CheckForExpired(); } } return(0); }
Сорри за выравнивания, тут табов нет в редакторе :( .
Хмм, должен работать... Хотя,
Проверьте стопы, возможно на Вашем ДЦ так близко нельзя (подчеркнул, что именно).
А возможно перекрытие переменных, тогда мое должно работать. Навскидку:
Сорри за выравнивания, тут табов нет в редакторе :( .
Компиляция '_Open_TIME_BYU.mq4'...
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (24, 72)
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (37, 82)
'CheckForExpired' - function is not defined D:\- \experts\scripts\_Open_TIME_BYU.mq4 (39, 1)
1 ошибка, 2 предупр
Что-то такое выдало
Компиляция '_Open_TIME_BYU.mq4'...
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (24, 72)
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (37, 82)
'CheckForExpired' - function is not defined D:\- \experts\scripts\_Open_TIME_BYU.mq4 (39, 1)
1 ошибка, 2 предупр
Что-то такое выдало
Мои поздравления, Вам удалось таки заставить меня залезть в редактор :) .
//+------------------------------------------------------------------+ //| 1.mq4 | //| Copyright © 2008, Tinytjan | //| tinytjan@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Tinytjan" #property link "tinytjan@mail.ru" extern int H = 10; //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ extern int M = 30; //И ... МИНУТ extern int CloseH = 22; extern int CloseM = 00; //-------------------------- int start() { while (!IsStopped()) { //выполняется пока скрипт не остановлен Sleep(1000); if (TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M) { RefreshRates(); //обновляем котировки //OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol() OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol() Print (GetLastError()); //OrderSend("EURUSD",OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol() //OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol() //Print (GetLastError()); return(0); //если оставить эту строку позиции откроются только 1 раз } if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM) { CheckForExpired(); } } return(0); } void CheckForExpired(int MN = -1) { for(int i = OrdersTotal() - 1; i >= 0; i--) { // already closed if(OrderSelect(i, SELECT_BY_POS) == false) continue; // not current symbol if(OrderSymbol() != Symbol()) continue; // order was opened in another way if(OrderMagicNumber() != MN && MN != -1) continue; if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red); } RefreshRates(); } } }Опять же сорри, только скомпилил, работоспособность не проверял.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования