Помогите !Есть ли такой советник? - страница 2

 

Не работает, первый вариант как было, позу не открыл, вставку что вы дали по времени, не компилирует.

 

так проверьте:

//+------------------------------------------------------------------+
//|                                                   Order_Time.mq4 |
//|                                                            IgorM |
//|                                        https://forum.mql4.com/ru/ |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://forum.mql4.com/ru/"

extern string     _P1         = "тип ордера: 1 BUY ;  2 -SELL";
extern int        order_type  = 1;
extern int        Hour_Time1  = 0;        // час выставления ордера
extern int        Hour_Time2  = 1;        // час закрытия ордера
extern int        Minute_Time1 =0;        // минуты открытия ордера
extern int        Minute_Time2 =1;        // минуты закрытия ордера
extern string     _P2         =  "номер дня недели (воскресенье-0,1,2,3,4,5,6)";
extern int        Day_Week1   = 1;        // день выставления ордера
extern int        Day_Week2   = 1;        // день закрытия ордера
extern double     Lot         = 0.01;
extern int        StopLoss    = 300;      // в пунктах
extern int        TakeProfit  = 500;      // в пунктах
extern int        Slippage    = 50;      // величина проскальзования при открытии ордера
extern int        Magic       = 123456;

bool MyOrderOK = false ; 

int init()
  {
   return(0);
  }

int deinit()
  {
   return(0);
  }
  
int MyOrderSend()
{
   int cmd, ticket=-1;
   double SL, TP, PR;
   if (order_type == 1){ cmd = OP_BUY; PR = NormalizeDouble(Ask,Digits); }
   if (order_type == 2){ cmd = OP_SELL; PR = NormalizeDouble(Bid,Digits); }
   
   if (StopLoss==0) SL=0; else SL = NormalizeDouble(PR - StopLoss * Point, Digits);
   if (TakeProfit==0) TP=0; else TP = NormalizeDouble(PR + TakeProfit * Point, Digits);
   
   ticket = OrderSend(Symbol(),cmd, Lot, PR, Slippage, SL, TP, NULL, Magic, 0, Blue);
   if (ticket > 0) {
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("Order opened : ", OrderOpenPrice());
      MyOrderOK = true; 
   }
   else Print("Ошибка № ",GetLastError()," при открытиии ордера");
   
   return(0);
}

int MyOrderClose()
{
   int cmd;
   if (order_type == 1) cmd = OP_BUY; 
   if (order_type == 2) cmd = OP_SELL;
   for (int i=OrdersTotal()-1;i>=0;i--) {
      OrderSelect(i, cmd, MODE_TRADES);
      if (OrderMagicNumber() == Magic)
                if (OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Violet)) { OrderPrint();  MyOrderOK = false; }
                        else Print("Ошибка № ",GetLastError()," при закрытии ордера");
   }
}

int start()
  { 
// если не выставлен ордер && день недели равен заданому && и текущее время сервера рано заданному то выставим ордер
//      if ((!MyOrderOK) &&(DayOfWeek()== Day_Week1) && (Hour_Time1 ==TimeHour(TimeCurrent()))) MyOrderSend();
      if ((!MyOrderOK) &&(DayOfWeek()== Day_Week1) && (Hour_Time1 ==TimeHour(TimeCurrent())) &&(Minute_Time1==TimeMinute(TimeCurrent()))) MyOrderSend();    
//      if ((MyOrderOK) &&(DayOfWeek()== Day_Week2) && (Hour_Time2 ==TimeHour(TimeCurrent()))) MyOrderClose();
      if ((MyOrderOK) &&(DayOfWeek()== Day_Week2) && (Hour_Time2 ==TimeHour(TimeCurrent()))&&(Minute_Time2==TimeMinute(TimeCurrent()))) MyOrderClose();
      Sleep(60000); // пауза одну минуту
   return(0); 
  }

тут по времени сервера

если надо по локальному времени компа то замените  TimeCurrent() на TimeLocal()

 

Я поменял, а как мне его счас проверить, допустим на открытии след часа или 30м. какое время выставить ? так чтоли 13-00 3 день недели?

extern int Hour_Time1 = 0; // час выставления ордера 13-00
extern int Hour_Time2 = 1; // час закрытия ордера
extern int Minute_Time1 =0; // минуты открытия ордера
extern int Minute_Time2 =1; // минуты закрытия ордера
extern string _P2 = "номер дня недели (воскресенье-0,1,2,3,4,5,6)";
extern int Day_Week1 = 1; // день выставления ордера 3
extern int Day_Week2 = 1; // день закрытия ордера
extern double Lot = 0.01;
extern int

 
valeribob:

Я поменял, а как мне его счас проверить, допустим на открытии след часа или 30м. какое время выставить ? так чтоли 13-00 3 день недели?



т.е. заменил TimeCurrent() на TimeLocal() и будете работать по локальному времени компа, тогда

ставьте в окне настроек  

extern int  Hour_Time1 =13; // час выставления ордера 13-00
extern int Hour_Time2 = 13; // час закрытия ордера
extern int Minute_Time1 =30; // минуты открытия ордера
extern int Minute_Time2 =45; // минуты закрытия ордера
extern string _P2 = "номер дня недели (воскресенье-0,1,2,3,4,5,6)";
extern int Day_Week1 = 3; // день выставления ордера 3
extern int Day_Week2 = 3; // день закрытия ордера
extern double Lot = 0.01;  

лот проверьте или в журнале посмотрите ошибки если не выставился, там же в журнале будут ошибки и по ТР и стопу 

 

Счас попробую! Спасибо!

 

Вроде работает, а почему св-ва не открывает на экране, нужно удалять, только потом заново в св-ва заходить?

 

у меня все норм 

 

ищите баги в терминале - или перезапустите терминал и на новом графике запустите советник 

 

Спасибо! но перезагруз не помог, а что это за баги ?, почему то стандартные советники в MT открываются.

 

баги = ошибки косяки

у меня на metatrader 4 build 226 работает норм, да и там код простой, все что в extern описано - должно появиться в окне настроек

создайте новый советник с помощью мастера в MetaEditor, вставьте туда полность мой код, сохраните,откомпилируйте и нажмите кнопу терминал, потом перетяните советника на график

Причина обращения: