[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 364

 
Hola! ¿Podríais decirme cómo registrar que una orden se abre sólo una vez (mientras se cumple la condición) y cuando la orden se cierra (aunque se siga cumpliendo la condición) no se ejecutan más órdenes?
 
cómo hacer que una orden se abra una vez por hora y sólo al principio de la hora
 
shljachov:
cómo hacer que una orden se abra una vez por hora y sólo al principio de la hora
int TimeBar_t = (TimeCurrent()-Time[0])/60; // время в минутах с открытия свечи

o

https://docs.mql4.com/ru/dateandtime/minute

sólo, por supuesto, para comprobar si se abre un pedido para que no se abra otro

 
Hola , ayuda con el código !!! Necesito una orden para abrir en base a una condición una vez por hora al comienzo de la hora ( en una nueva barra horaria) e independientemente del resultado una nueva apertura sólo después de 1 hora o 2 o 3 etc. y también sólo al comienzo de la hora (en una nueva barra horaria) dependiendo de la condición ?????
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после открытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
https://www.mql5.com/ru/forum/131859
 
muchas gracias 604 BeerGod 03.09.2012 13:06
 
paladin80:
Primero, muestre la parte del código donde se encuentran los valores de los indicadores para otros marcos temporales en el EA. La sospecha es que puede haber un error al acecho.
 int pic1=GetExtremumZZBar("",PERIOD_M1,0,12,5,3);
   int pic5=GetExtremumZZBar("",PERIOD_M5,0,12,5,3);
   int pic15=GetExtremumZZBar("",PERIOD_M15,0,12,5,3);
   int pic30=GetExtremumZZBar("",PERIOD_M30,0,12,5,3);
   int pic60=GetExtremumZZBar("",PERIOD_H1,0,12,5,3);
   int pic240=GetExtremumZZBar("",PERIOD_H4,0,12,5,3);

Función de Kim

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 
Hmm, inténtalo de esta manera:
   int pic1=GetExtremumZZBar(NULL,PERIOD_M1,0,12,5,3);
   int pic5=GetExtremumZZBar(NULL,PERIOD_M5,0,12,5,3);
   int pic15=GetExtremumZZBar(NULL,PERIOD_M15,0,12,5,3);
   int pic30=GetExtremumZZBar(NULL,PERIOD_M30,0,12,5,3);
   int pic60=GetExtremumZZBar(NULL,PERIOD_H1,0,12,5,3);
   int pic240=GetExtremumZZBar(NULL,PERIOD_H4,0,12,5,3);

//---
int GetExtremumZZBar(string sy, int tf, int ne, int dp, int dv, int bc) {
...
}
 
paladin80:
Hmm, inténtalo de esta manera:
En el probador el mismo efecto, en la cuenta todo funciona igual (se muestra).
 
cuelgue el EA durante un minuto y vea el resultado