[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 188

 
Mas não sei como apagar um pedido pendente se o pentamino era inferior a 30 pips.
 
hoz:

Sim, e daí?

Há uma série de limitações quando se trabalha em modo de visualização
 

O que eu fiz de errado!!!!

Eu encontrei esta solução para meu problema

int start()
  {
     double Price=Ask+300*Point;    
     double SL=Price-300*Point;    
     double TP=Price+150*Point;
     bool New_Bar;
                          
     if (Time[0])                                                                           //   если образовался новый бар               
         int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); //   выставить отложенный ордер
     return ;
     Fun_New_Bar();                                                                      
     if ( New_Bar==true)                                                // если образовался следующий бар
        OrderDelete(Ticket);                                          // удалить отложенный ордер
  
//+------------------------------------------------------------------+
     void  Fun_New_Bar();                            //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ       '(' - function definition unexpected  
       {                                                                           
          static datetime New_Time=0;
          New_Bar=false;
                                
         if( New_Time!==Time[0])                       
            New_Time=Time[0];                         
         New_Bar=true;                             
      }

/* desculpe, eu mudei ligeiramente o posto - para que o Vinin seja legível */

 
Obrigado por sua preocupação. Que botão devo apertar para obter o código neste formato?
 
solnce600:

O que eu fiz de errado!!!!

Eu encontrei esta solução para meu problema

/* desculpe, mudou um pouco o post - para tornar o Vinin legível */

Esta linha
 if (Time[0])

meios: "se o tempo da última barra não for zero". Portanto, nem sempre é igual a zero.

Além disso, a variável

bool New_Bar;

é definido dentro da função start(), portanto não será visível dentro de outras funções. Além disso, a Fun_New_Bar() que você tentou definir dentro do corpo start(), você não pode fazê-lo em MQL, todas as funções devem ser declaradas no nível do módulo global. A declaração de New_Bar deve ser colocada lá também.

 

Além disso, durante uma execução da função start() (se não estiver em loop), não é possível definir a formação da barra e depois esperar pela formação da próxima barra: start() por definição é chamada e termina a cada tick (com nuances, mas em geral é assim).

Aconselho reler a ajuda e eliminar as lacunas na execução do programa MQL, e ver um exemplo de como escrever um programa em loop, não inclinado também.

 
solnce600:
Obrigado por sua atenção. Que botão devo apertar para obter o código neste formato?

SRC----------------------------\|/

--------------------------------------- V

 
Ele tem o direito.
 
alsu:
Esta linha
 if (Time[0])

meios: "se o tempo da última barra não for igual a zero". Portanto, nem sempre é igual a zero.


Obrigado. Mas não entendo onde está o "NÃO" nesta linha. Não igual é indicado pelo símbolo !==.

O que eu quis dizer foi que, assim que a hora de abertura de um novo bar aparece, ou seja, um novo bar aparece, o pedido é aberto.

E este é de fato o código que abre uma ordem na abertura de cada cinco barras

 int start()

  {
 double Price=Open[0]+300*Point;	
 double SL=Price-300*Point;	
 double TP=Price+150*Point;
 if (Time[0])                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
  

 
 }


 

Decidi tomar o que pensava ser um caminho mais simples.

Não para apagar a ordem pendente - mas para colocar uma ordem pendente somente se uma vela de cinco minutos não tiver terminado

Ou seja, o pedido pendente deve ser feito somente quando duas condições forem cumpridas. Se a primeira condição for cumprida

 if (Time[0])

- Eu verifiquei, o pedido está pronto.

Como devo estabelecer a segunda condição, ou seja, estabelecer uma ordem pendente somente se 5 minutos ainda não tiverem passado. se (---------- && ?????????)

int start()

  {
 double Price=Open[0]+300*Point;    
 double SL=Price-300*Point;     
 double TP=Price+150*Point;
 
  
 
 
                          
   if (Time[0]&& ?????????  )                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
 return(0);
 
  }