Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 12

 

Por favor, me perdoe, eu não entendia como usar esse botão na época, mas agora acho que entendo.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
[Excluído]  
Grenjohn:

Por favor, me perdoe, eu não entendia na época como usar esse botão, mas agora acho que entendo.

A questão é a condição:

if( OrdersTotal() == 0 )

Falta uma verificação de que a data que você especificou date1 ocorreu. Agora você deve abrir uma ordem imediatamente com o primeiro tique, se não houver ordens abertas! Ou seja, você precisa fazer o mesmo que aqui,

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

mas especificar o dia, a hora, o minuto e o segundo corretos (alguns segundos).

Sim, e mais uma coisa. Os preços sl e tp devem ser normalizados, caso contrário, pode haver erros.

 

Algo que parou de se juntar ao gráfico e, por favor, me diga o que significa normalizar os preços de sl e tp?

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

Por favor, me perdoe, eu não entendia como usar esse botão, mas agora acho que entendi.

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - sem posição
   case 0:
   {
     // Quando chegar a hora de date1, abra uma posição
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 era uma posição
   case 1:
   {
     // Fechar a posição quando a hora date2 chegar
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

Quando ocorre a data 1 , abrimos uma posição, quando ocorre a data 2, a fechamos e, depois disso, não fazemos nada até o reinício.

[Excluído]  
Grenjohn:

Algo que parou de se juntar ao gráfico e, por favor, me diga o que significa normalizar os preços sl e tp?

https://www.mql5.com/pt/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Muito obrigado a todos pela ajuda e paciência, mas até agora, infelizmente, não está funcionando!!!?

Estou tentando adicionar um Expert Advisor, mas ele não é adicionado!!!?!?

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - sem posição
   case 0:
   {
     // Quando chegar a hora de date1, abra uma posição
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 era uma posição
   case 1:
   {
     // Fechar a posição quando a hora date2 chegar
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}


 
Grenjohn:

Muito obrigado a todos pela ajuda e paciência, mas até agora, infelizmente, não está funcionando!!!?

Estou tentando adicionar um Expert Advisor, mas ele não é adicionado!!!?!?


Isso significa que você não criou um Expert Advisor, mas um indicador.

Crie um novo EA por meio do assistente e substitua apenas o código da função OnStart e todas as variáveis globais/parâmetros externos.

[Excluído]  
komposter:

Isso significa que você não criou um Expert Advisor, mas um indicador.

Crie um novo EA por meio do assistente e substitua apenas o código da função OnStart e todas as variáveis globais/parâmetros externos.

Provavelmente, ele criou um Expert Advisor, mas com a função OnStart(), que é apenas para scripts.
[Excluído]  
Grenjohn:

Muito obrigado a todos pela ajuda e paciência, mas até agora, infelizmente, não está funcionando!!!?

Estou tentando adicionar um Expert Advisor, mas ele não é adicionado!!!?


Crie um novo Expert Advisor na MQL4, copie o código existente e substitua a linha

void OnStart()

por

void OnTick()

Isso é para o caso de você querer criar um Expert Advisor. Se quiser criar um script, crie um novo script e copie completamente o código existente sem alterações (embora não haja sentido em um script no caso de negociações baseadas em tempo).

 
Do artigo:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

Onde está o código que atende a essa descrição? Não estou entendendo algo ou não existe tal coisa no código.