[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 149

 

Foi aqui que recentemente respondi a uma pergunta análoga.

https://www.mql5.com/ru/forum/109048/page11

-Consulte-o.

No seu caso, você provavelmente poderia ir assim:

if ( AutoClose) { //если выключатель закрытия включен 

//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== MagicNum)   { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                 //return(0); // выходим
                }       
      
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
     
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
   
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_
 

Cavalheiros, por favor expliquem a diferença entre

NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,10,0)],4)
de
NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,iBarShift(NULL,0,Time[1],FALSE),1)] + 10 * Point,4)

Não entendo o que é o iBarShift e o que ele faz

 
rid >> :

Foi aqui que recentemente respondi a uma pergunta análoga.

Uma pergunta para os conhecedores".

-Veja isto.

No seu caso, você provavelmente poderia ir assim:


Obrigado, livra!

Funcionou comigo, eu o fiz assim.

   if (( Close_P)&& TimeCurrent()>=StrToTime( CloseHour+":00")){  // даже по времени сделал
   int slippage=3;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
    if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID), slippage);
    if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK), slippage);
    }
    }


 
Dimoncheg >> :

Cavalheiros, poderiam por favor explicar a diferença entre

de

Não entendo o que é o iBarShift e o que ele faz

int iBarShift( símbolo de corda, período int, data/hora, bool exato=falso)
Procura de uma barra por tempo. A função retorna o offset da barra à qual pertence o tempo especificado. Se não houver barra para o tempo especificado (um "furo" no histórico), a função retorna, dependendo do parâmetro exato, -1 ou o offset da barra mais próxima.
Parâmetros:
símbolo - Nome simbólico do instrumento. NULL significa símbolo atual.
cronograma - Período. Pode ser um dos prazos de um gráfico. 0 significa o período do gráfico atual.
tempo - Valor de tempo para a busca.
exato - Valor devolvido se nenhuma barra for encontrada. FALSO - iBarShift retorna mais próximo. VERDADEIRO - iBarShift retorna -1.
 
1Rakso >> :
int iBarShift(símbolo de corda, período int, data/hora, bool exato=falso)
Busca de barras por tempo. A função retorna o offset da barra à qual pertence o tempo especificado. Se não houver barra para o tempo especificado (um "furo" no histórico), a função retorna -1 ou o offset da barra mais próxima, dependendo do parâmetro exato.
Parâmetros:
símbolo - Nome simbólico do instrumento. NULL significa símbolo atual.
cronograma - Período. Pode ser um dos prazos de um gráfico. 0 significa o período do gráfico atual.
tempo - Valor de tempo a ser pesquisado.
exato - Valor devolvido se nenhuma barra for encontrada. FALSO - iBarShift retorna mais próximo. VERDADEIRO - iBarShift retorna -1.

Eu li a referência, mas não entendo o que ela diz: "A função retorna o turno da barra" - o que significa? Se eu li o primeiro, isso significa simplesmente o número de castiçais e o segundo significa algum deslocamento. Acho que preciso da altura mais próxima depois de algumas condições, o primeiro caso não funcionará porque posso não ver no máximo 10 barras (e também não ver no máximo 20 ou 30), como devo descrevê-lo corretamente (a altura mais próxima, por exemplo, depois de cruzar 2 Mascos)?

 
Dimoncheg >> :

Eu li a ajuda, mas não entendo o que diz: "A função retorna a compensação da barra" - o que significa isso? Se eu li o primeiro, significa simplesmente o número de castiçais, e o segundo significa algum deslocamento. Acho que preciso da altura mais próxima depois de algumas condições, o primeiro caso não funcionará porque talvez eu não veja no máximo 10 barras (e talvez não veja no máximo 20 ou 30 também), qual será a maneira correta de fazer isso (a altura mais próxima depois da travessia de 2 Mascos, por exemplo)?

ibarshift mostra em que barra desde o início do gráfico a n-ésima segunda vez

 
Dimoncheg >> :

Já li, mas não entendo o que diz: "A função retorna o turno da barra" - o que significa? Se eu li o primeiro, significa simplesmente o número de castiçais, mas o segundo significa algum deslocamento. Acho que preciso da altura mais próxima depois de algumas condições, o primeiro caso não funcionará porque talvez eu não veja no máximo 10 barras (e talvez também não veja no máximo 20 ou 30), qual é a maneira correta de fazer isso (a altura mais próxima depois de atravessar 2 Mascos)?

Você lhe dá tempo e recebe um schift.

Suponha que você saiba a hora da barra zero.

Alguns eventos já passaram,

A situação mudou, e você quer verificar a posição da barra com este tempo, em comparação com a barra zero.

É aqui que você precisa desta função.

 

Dimoncheg

Eu mesmo sou um cliente desta seção)

======================

Tenho outra pergunta, como dividir a viga ZZ ao meio para calcular seu nível e fazer uma correção a este nível?


   double ind1. up = iCustom(Symbol(), PERIOD_H1, "ZigZag_NK", ZZ_Depth1, 5, 3, 0, 0);
   double ind1. dn = iCustom(Symbol(), PERIOD_H1, "ZigZag_NK", ZZ_Depth1, 5, 3, 1, 0);
   if ( ind1. up != EMPTY_VALUE  ) ind1. arr_1 =- 1;
	else if ( ind1. dn != EMPTY_VALUE )   ind1. arr_1 = 1;  
   

   if (( Close_P)&& ind. arr_1 /2*Point){   // как вписать формулу что я не так делаю? 
   
   int slippage=3;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
    if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID), slippage);
    if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK), slippage);
    }
    }
 
Meu indicador dentro do código é reinicializado, preciso conhecer o estado antes e depois para poder comparar. Qual é a melhor maneira de implementar este processo?
 
1Rakso >> :

Dimoncheg

Eu mesmo sou um cliente desta seção)

======================

Tenho outra pergunta, como dividir ao meio a viga ZZ que calcularia seu nível e faria uma correção a este nível?


O ziguezague não é calculado no último ponto. Como regra, também não pode ser fixado a este nível.