[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 414

 
inoy:

O consultor não fechará uma ordem a tempo se houver outra ordem no símbolo aberto em um momento anterior ao da própria ordem do consultor.
ordem. Se a ordem de outra pessoa for aberta mais tarde ou se não houver outras ordens, a função OrderClose funciona corretamente. Favor informar onde está o erro


O erro é que você apenas pega o pedido com índice 0 e não o procura entre os pedidos em aberto.
 
Roger:

o erro é que você simplesmente aceita uma ordem com índice 0 em vez de procurá-la entre as ordens abertas.

Peço desculpas, mas a situação é semelhante nessa variante.
//---- закрытие позиции
if(OrdersTotal() > 0)
for(int i=OrdersTotal();i>=0;i--)
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber)
if ( iTime(Symbol(),0,0) >= OrderOpenTime()+SecondsClose )
if (OrderType() == OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);
Você teria a gentileza de fornecer a solução correta para o problema?
 
Avelox:

Como emitir um sinal sonoro em um indicador a partir da seguinte expressão:

se (num1 == 9) {
ObjectCreate(""+i, OBJ_TEXT, 0, Time[i+1],High[i+1]+10*Point );
ObjectSetText(""+i, ""+DoubleToStr(num1,0), 16, "Arial", RoyalBlue);

}

Se você puder ser mais detalhado que "Você pode usar OBJ_SICICOCI e ver os detalhes na documentação da MQL4, ela tem tudo"!

Eu mesmo consegui resolver este problema:


ObjectCreate(""+i, OBJ_TEXT, 0, Time[i+1],High[i+1]+10*Point );
ObjectSetText(""+i, ""+DoubleToStr(num1,0), 18, "Arial", RoyalBlue);
PlaySound("havecall.wav"); }
 
inoy:

Peço desculpas, mas neste cenário a situação é semelhante. Você teria a gentileza de fornecer uma solução adequada para o problema?

//---- закрытие позиции
if(OrdersTotal() > 0) 
{
  for(int i=OrdersTotal();i>=0;i--) 
  {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber) 
    {
      if ( iTime(Symbol(),0,0) >= OrderOpenTime()+SecondsClose ) 
      {
         if (OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);
         }
      }
   }
}
 

Bem, também, substitua

for(int i=OrdersTotal();i>=0;i--) 

para

for(int i=OrdersTotal()-1;i>=0;i--) 


И еще, не понял, что за элемент в функции (подчеркнуто красным)?

OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);

 
 para ( Expressão_1; ; Expressão_2) // Sem Condição { // Abrir o suporte encaracolado Bloco do operador, // O corpo do laço pode consistir de ... compondo o corpo do laço //... de vários operadores } // Fechando o suporte encaracolado

Você pode me dizer qual é uma condição para sair de um loop como este? Ou um loop como este

 Para ( ; ; ; ) // Ausente. Expressão e Condição { // Abertura do suporte de malha Um bloco de operadores, // Um corpo de malha pode consistir de // ... vários operadores que compõem o corpo de malha } // Fechamento do suporte de malha
 
VladimirR:

Você pode me dizer qual é a condição para sair de um ciclo desse tipo? Ou um destes


intervalo
 

Vinin, Roger - obrigado, ajudou.

NormalizeDouble((Ask - Bid) * Ponto,Dígitos) é Slippage para símbolos com grandes spreads, por exemplo XAUUSD.

 
inoy:

Vinin, Roger - obrigado, ajudou.

NormalizeDouble((Ask - Bid) * Ponto,Dígitos) é Slippage para símbolos com grandes spreads, por exemplo XAUUSD.


Então, você pode imaginar que é 0? Primeiro, o deslizamento deve ser um inteiro positivo, segundo, a diferença deve ser dividida por Ponto, não multiplicada.
 
Cavalheiros, como "treinar" um EA para não negociar à noite ? Isto é, tempo terminal entre 23 e 02 horas (GMT)... Hora()>=2&Hora()<=23 não ajudou...