DUVIDA CODIGO PARA ABRIR PROXIMA OPERAÇÃO APÓS EXEMPLO 1 MINUTOS

 

BOA NOITE!!!


CRIEI UM EA,

QUANDO ELE ENTRA NUMA OPERAÇÃO NO CANDLE DE 5 MINUTO E ENCERRAR NESSE MESMO CANDLE O QUAL DEU O SINAL, ELE ACABA ENTRANDO NOVAMENTE NA OPERAÇÃO.

GOSTARIA SE ALGUEM PUDER ME AJUDAR A COLOCAR UM TEMPO APÓS UMA ENTRADA, PARA QUE ISSO NÃO ACONTEÇA.

DESDE JÁ AGRADEÇO, QUEM ME AJUDAR!!


ABS

 
RAFAEL DITTRICH:

BOA NOITE!!!


CRIEI UM EA,

QUANDO ELE ENTRA NUMA OPERAÇÃO NO CANDLE DE 5 MINUTO E ENCERRAR NESSE MESMO CANDLE O QUAL DEU O SINAL, ELE ACABA ENTRANDO NOVAMENTE NA OPERAÇÃO.

GOSTARIA SE ALGUEM PUDER ME AJUDAR A COLOCAR UM TEMPO APÓS UMA ENTRADA, PARA QUE ISSO NÃO ACONTEÇA.

DESDE JÁ AGRADEÇO, QUEM ME AJUDAR!!


ABS

Talvez usando a função OnTimer você consiga, eu pessoalmente nunca usei mas parece que ela é pra isso.

Documentação sobre MQL5: Manipulação de eventos / OnTimer
Documentação sobre MQL5: Manipulação de eventos / OnTimer
  • www.mql5.com
//|                                               OnTimer_Sample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | "Exemplo de uso de temporizador para calcular a hora do servidor de negociação...
 
Sidnei Da Silva Santos Junior:

Talvez usando a função OnTimer você consiga, eu pessoalmente nunca usei mas parece que ela é pra isso.

Ok, vou estudar para ver se consigo


obrigado!!

 
RAFAEL DITTRICH:

...

Dando minha contribuição para o assunto...Eu não faria via OnTimer, motivo? vc terá apenas um temporizador, e isso não quer dizer que seja no momento do trade...

Eu usaria a OnTradeTransaction, nela basta capturar a data/hora atual, e multiplicar por um delta de tempo....apos isso feito basta compara a data/hora atual com a variável que recebe esse delta.
Então... se TimeLocal() >= last_execute => se passaram X minutos


//declaração
datetime last_execute=0;
int      delta       = 1; // delta in minutes


//OnTradeTransaction
last_execute=TimeLocal();



//OnTick
last_execute+delta*PeriodSeconds(PERIOD_M1)
Documentação sobre MQL5: Manipulação de eventos / OnTradeTransaction
Documentação sobre MQL5: Manipulação de eventos / OnTradeTransaction
  • www.mql5.com
É chamada em EAs quando ocorre o evento TradeTransaction. A função é projetada para processar os resultados de execução da solicitação de negociação. [in]  Variável do tipo MqlTradeTransaction com descrição da transação feita na conta de negociação. [in]  Variável do tipo MqlTradeRequest com descrição da solicitação que gerou a transação...
 
Jonathan Pereira:

Dando minha contribuição para o assunto...Eu não faria via OnTimer, motivo? vc terá apenas um temporizador, e isso não quer dizer que seja no momento do trade...

Eu usaria a OnTradeTransaction, nela basta capturar a data/hora atual, e multiplicar por um delta de tempo....apos isso feito basta compara a data/hora atual com a variável que recebe esse delta.
Então... se TimeLocal() >= last_execute => se passaram X minutos


//declaração
datetime last_execute=0;
int      delta       = 1; // delta in minutes



void  OnTradeTransaction()
{
last_execute=TimeLocal();
}


void OnTick()
{



last_execute+delta*PeriodSeconds(PERIOD_M1)
if(SETUP_COMPRA) { if(PositionsTotal() == 0 && OrdersTotal()==0) { if(trade.Buy(lote, Symbol(), 0, 0, 0, "Compra")) { addTakeStop(stopLoss, takeProfit); } } } }

Boa tarde!!

Obrigado pela dica, no caso eu colocaria a variavel last_execut... aonde eu coloquei ou teria que esta dentro do if do setup de compra??

 
RAFAEL DITTRICH:

....

Na OnTradeTrasaction vc tem que capturar eventos de adição de posição, ou seja, o momento que a posição foi registrada no historico...

Ja a utlização de last_execute vai depender do seu objetivo...Pelo que eu entendi vc so quer entrar ou olhar para novos sinais apos X minutos certo? Então teria que estar em um if dentro de ontick validando se o tempo atual já é = ou superior ao valor que vc atribuiu.

Note que quando vc captura a data/hora atual e soma com o delta e multiplica por PeriodSeconds vc esta jogando uma data/hora futura...

imagine:

28/11/2020 16:22:30 + 3 * PeriodSeconds(PERIOD_M1) =  28/11/2020 16:25:30


 
Jonathan Pereira:

Na OnTradeTrasaction vc tem que capturar eventos de adição de posição, ou seja, o momento que a posição foi registrada no historico...

Ja a utlização de last_execute vai depender do seu objetivo...Pelo que eu entendi vc so quer entrar ou olhar para novos sinais apos X minutos certo? Então teria que estar em um if dentro de ontick validando se o tempo atual já é = ou superior ao valor que vc atribuiu.

Note que quando vc captura a data/hora atual e soma com o delta e multiplica por PeriodSeconds vc esta jogando uma data/hora futura...

imagine:

28/11/2020 16:22:30 + 3 * PeriodSeconds(PERIOD_M1) =  28/11/2020 16:25:30


Boa noite Jonthan, eu sou novo nesse mundo de programador. Não estudei ainda açgumas funções, se esse para você me ajudar escrevendo o script eu agradeço.