Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Все программы в Code Base доступны из MetaTrader 5. Опубликуй и ты свою!
cos17
22
cos17 2012.02.01 17:23 
Здравствуйте. Подскажите код или мысль - как на одной свече открыть не более одной сделки, если сработал SL, то нужно ждать следующей свечи. Как это можно осуществить?
Валентин
871
Валентин 2012.02.01 17:26  

if(OrderTotal() < 1){ ...;}

else {...}

Это вообще для одной сделки.

А для одной сделки не свече нужно запомнить время открытия текущей свечи и если оно не равно с временем открытия текущей свечи, тогда что-то там делаем.

Leonid Borsky
2363
Leonid Borsky 2012.02.01 17:30  
https://www.mql5.com/ru/forum/102366 - поиск рулит
cos17
22
cos17 2012.02.02 06:09  
спасибо за помощь
Рустам
3602
Рустам 2012.02.02 14:21  
//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){
   if(sy == ""){sy = Symbol();}
   if(per==0){per=Period();}
   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }
   for(i = OrdersHistoryTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }   
   return(false);
}
//+------------------------------------------------------------------+
//|  Проверяет был ли закрыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdClSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){
   if(sy == ""){sy = Symbol();}
   if(per==0){per=Period();}
   for(int i = OrdersHistoryTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderCloseTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }
   return(false);
}
//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpSelfBar(int magik = 0,  int bar = 0, int typ = -1,string sy = "",int per = 0){
   if(sy == ""){sy = Symbol();}
   if(per==0){per=Period();}
   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,0)){return(true);}
            }
         }
      }
   }
   return(false);
}
cos17
22
cos17 2012.02.03 07:53  

А если так:

if(TimeCurrent()<OrderOpenTime()+Period()*60)
break;

ilunga
744
ilunga 2012.02.03 08:07  
Cos:

А если так:

if(TimeCurrent()<OrderOpenTime()+Period()*60)
break;

но открыв сделку за 2 минуты до конца часовой свечи вы будете ждать на новом баре 58 минут ничего не делая
Михаил
1025
Михаил 2012.02.03 10:44  

я такую конструкцию использую:

//+----------------------------------------------------------------------------+
//|  Описание : Запрет торговли в одном баре                                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|              Type - тип ордера                                             |  
//|                                                                            |
//|  Если функция фозвращает True, то открывать позу можно                     |
//|                                                                            |
//|  Пример:     if(CheckOpenPosition(OP_BUY))   {    // Открытие Buy    }     |  
//+----------------------------------------------------------------------------+
bool CheckOpenPosition(int Type)
 {
  bool Result = True;
  for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i, SELECT_BY_POS))
    if(OrderType() == Type && OrderMagicNumber() == magic_bands_lyg && OrderSymbol() == Symbol())
     if(OrderOpenTime() >= Time[0])
      Result = False;
  for(i = 0; i < OrdersHistoryTotal(); i++)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     if(OrderType() == Type && OrderOpenTime() >= Time[0] 
        && OrderMagicNumber() == magic_bands_lyg && OrderSymbol() == Symbol())
      Result = False;
    }    
      
  return(Result);    
  }
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий