[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 249

 
artmedia70:
Não pergunte, verifique com um testador... :)
Após a compilação, o Expert Advisor trabalha da mesma forma que antes das mudanças. Isto é, desenha uma linha.
 
globad:
o especialista desenha uma linha.
se o código diz "desenhar linha 1 se não estiver desenhada; desenhar linha 2 se não estiver desenhada" - não podem ser desenhadas:)
 
eddy: artmedia70:
se o código diz "desenhar linha 1 se não estiver desenhada; desenhar linha 2 se não estiver desenhada" - eles não podem ser desenhados:)
Todos os caras, descobriram! Funciona!
 

Você pode me dizer por que todas as porcentagens estão em 0 no relatório de teste? Isto é, levantamento relativo, levantamento máximo, etc.?

 
artmedia70:

Por exemplo, assim:

Chamada como esta:

Espero que você possa transformar minutos em horas ... :)





Eu tentei escrever da maneira que você disse, mas funciona... ainda abre posições no fechamento do anterior...(

talvez você não entenda o que quero dizer, eu quero que ele abra uma posição não antes de 1 hora após a anterior ter fechado... e no seu caso, ele exclui a possibilidade de reabrir, mas assim que fechar, ele abre imediatamente a próxima

 if (SecondsAfterOpenLastPos(NULL, OP_SELL, MAGIC)>=(Period()*Interval)*60) {
        OpenSell();  
           } 
 
caras ajudam: precisamos que um comércio seja aberto se um certo tempo tiver passado depois que o anterior foi fechado....help
 
Vovo4ka:
caras ajudam: eu preciso abrir um negócio se um certo tempo passou depois que o anterior foi fechado
help


para (int i=0; i<OrdersTotal(); i++)
{ se(OrderSelect(i, SELECT_BY_POS)==verdadeiro)
{
TC = TimeCurrent();
OM = OrderMagicNumber();
if (TC-OM>86400 && (OrderType()==OP_SELLL)){
CLOSEORDER("Sell");
}
if (TC-OM>86400 && (OrderType()==OP_BUY)){
CLOSEORDER("Comprar");
}
}
}

Em OrderMagicNumber() ao abrir uma ordem, ele escreve: Magic = TimeCurrent();

 
ILL:


para (int i=0; i<OrdersTotal(); i++)
{ se (OrderSelect(i, SELECT_BY_POS)==verdadeiro)
{
TC = TimeCurrent();
OM = OrderMagicNumber();
if (TC-OM>86400 && (OrderType()==OP_SELLL)){
CLOSEORDER("Sell");
}
if (TC-OM>86400 && (OrderType()==OP_BUY)){
CLOSEORDER("Comprar");
}
}
}

Em OrderMagicNumber(), ao abrir um pedido, está escrito: Magic = TimeCurrent();


Eu esqueci =) 86400 - este é o número de segundos após o qual a posição é fechada
 
ILL:

Você pode me dizer por que todas as porcentagens estão em 0 no relatório de teste? Isto é, levantamento relativo, levantamento máximo, etc.?


Tudo calculado - o depósito era muito grande)
 
Vovo4ka:


Eu tentei escrever da maneira que você disse, funciona... ainda abre uma posição depois que a anterior fecha...(

Talvez você não entenda o que quero dizer, é necessário abrir um negócio não antes de uma hora após o anterior ter sido fechado... e no seu caso, exclui a possibilidade de abrir um negócio repetido, mas assim que for fechado, o próximo é aberto imediatamente

E pense no código de função? Encontre quatro diferenças :) :

//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy, int op, int mn) 
{
   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)        continue;
         if (OrderType()!=op)          continue; 
         if (OrderMagicNumber()!=mn)   continue; 
         if (t<OrderCloseTime()) t=OrderCloseTime();
         }
      }
  return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
Razão: