Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 423

 
novichok2018:

Olá! Ajude-me a resolver a situação: abro uma posição 1 sob a condição de Y1, fechada sob a condição de Y2. Mas se antes da ocorrência do U2 ocorrer mais uma vez o U1 e abrir a posição 2, ele não reage ao U2, e pende para o próximo U2, que veio depois do novo U1 (!) E esta nova posição não é fechada por um novo U2, e espera pela próxima condição U1-U2. Como evitar isso? Minha cabeça está me matando. Obrigado.

Precisamos de um loop para fechar OrderClose(...) de todos os pedidos com a condição U2 - mesmo que tenhamos uma centena deles. Podemos apagar um em cada carrapato - então faça o seguinte: 1) por condição U2, levante a bandeira. 2) Se a bandeira for hasteada, apagar UM pedido. 3) Se não houver ordens, abaixe a bandeira. Então todos os pedidos, um após o outro, serão excluídos....

 
STARIJ:

Precisamos de um loop para fechar OrderClose(...) de todos os pedidos por condição U2 - você pode abrir uma centena deles de uma só vez


Estou em um ciclo como ele é. Há algo de errado com isso?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
      }
    } 
  }   
 
novichok2018:
Estou em um ciclo como ele é. Há algo de errado com isso?
Não entendo - eu usei SRC para inserir código e não consigo vê-lo.
Você tem que pressionar Inserir e depois Adicionar
 
STARIJ:
Você tem que pressionar Colar e depois Adicionar

Acima, embora não no lugar certo, mas lê-se. Oh! agora está no lugar certo. Oh, meu Deus!

 
novichok2018:

Eu inseri seu código corretamente.

Primeiro pressione o botão SRC, em seguida, cometa seu código na janela, pressione o botão "Inserir" e envie sua mensagem.

 
tura210577:

Obrigado por sua resposta!

Seja bem-vindo. Tente usar características multiplataforma como esta:

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018: Estou em um ciclo como ele é. Há algo de errado com isso?

Há 2 erros no código. 1) Esta página explica a ordem dos pedidos no laço. 2) quebrar - sair do laço e continuar - pular isto

 
Artyom Trishkin:

Eu inseri seu código corretamente.

Primeiro você pressiona o botão SRC, depois submete seu código à janela, pressiona o botão "Inserir" e submete sua mensagem.


Obrigado (risos) Ao menos você me fez rir da minha escrita. Qual é o objetivo da pergunta? Está tudo correto no loop?

 
novichok2018:

Obrigado (risos) Ao menos você me fez rir da minha escrita. Qual é o objetivo? O ciclo está certo?

Você já foi respondido:

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Qualquer pergunta de iniciantes sobre MQL4, ajuda e discussão sobre algoritmos e códigos

STARIJ, 2018.01.18 20:19

Há 2 erros no código. 1) Esta página explica a ordem dos pedidos no laço. 2) quebrar - sair do laço, e você deve continuar - pular isto


 
Artyom Trishkin:

Você já foi respondido:



Sim, obrigado, eu li a página. Somente meu conhecimento em MKL4 foi suficiente para perceber que em minhas posições de loop são loopadas de zero para o último, enquanto no exemplo vice-versa, de último para zero.Eu ainda não sei onde inseriro intervalo. E quando mudei meu laço para inverter, as posições pararam de fechar.