[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 364

 
Olá! Você poderia me dizer como registrar que uma ordem é aberta apenas uma vez (enquanto a condição é cumprida) e quando a ordem é fechada (mesmo que a condição ainda seja cumprida), nenhuma outra ordem é executada!
 
como fazer um pedido aberto uma vez por hora e somente no início da hora
 
shljachov:
como fazer um pedido aberto uma vez por hora e somente no início da hora
int TimeBar_t = (TimeCurrent()-Time[0])/60; // время в минутах с открытия свечи

ou

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

verificar apenas naturalmente se uma ordem é aberta para que outra não seja aberta

 
Olá, ajuda com o código!! Preciso de uma ordem de abertura baseada em uma condição uma vez por hora no início da hora (em um novo bar horário) e independentemente do resultado uma nova abertura foi somente após 1 hora ou 2 ou 3 etc. e também somente no início da hora (em um novo bar horário) dependendo da condição ?????
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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
 
muito obrigado 604 CervejaDeus 03.09.2012 13:06
 
paladin80:
Primeiro mostre a parte do código onde você encontra os valores do indicador para outros períodos de tempo na EA. A suspeita é de que pode haver um erro à espreita.
 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);

A função 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, tente desta forma:
   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, tente desta forma:
No testador o mesmo efeito, na conta tudo funciona da mesma maneira (exibido).
 
pendurar o EA por um minuto e ver o resultado
Razão: