Saída repetida - página 2

 

Lucas,

Recomendo fortemente seguir a recomendação do Rogério Giannetti.

Tratar os códigos de retorno das chamadas de função é uma boa prática básica e essencial para desenvolver um software confiável.

Se os erros que eventualmente ocorrem nessas chamadas de função não forem tratados, vc corre o risco de o seu robô (ou qualquer software que você esteja desenvolvendo) ficar apresentando aqueles problemas intermitentes "misteriosos" e difíceis de serem reproduzidos e depurados.  

De qualquer forma, uma vez testado o código de retorno e confirmado que a posição foi fechada, vc precisará garantir que a função PositionClose() não seja chamada mais de uma vez, inserindo algum tipo de tratamento na cláusula "else" do "if" que o Giannetti inseriu.

Acredito que a sua sugestão de inserir um sleep(2000) funcionará tão bem quanto a minha, com a vantagem de ser mais simples.

A única brecha da sua solução é a possibilidade de demorar mais de 2 segundos para ser confirmado o fechamento da posição e, nesse meio tempo, chegar mais um tick acionando novamente o Ontick() e o PositionClose(). É extremamente implausível isso acontecer, mas "vai que", né? ... Se a conexão entre o terminal e o servidor da corretora sair do ar por mais de 2 segundos, por exemplo ... Por isso acho mais seguro usar uma variável booleana para marcar que a posição já foi fechada, para garantir que nunca haverá um segundo acionamento da PositionClose().


 

Fico agradecido pela ajuda de todos, irei alterar para o Código mais completo e vou esperar que seja retirado perfeitamente do mercado para saber que tudo deu certo. Vou analisar hoje o meu código todo e ver aonde podem ter brechas como esta, para me precaver de mais erros na execução.

Obrigado a todos, e feliz carnaval rsrs

 

Tive problema com estas função :


 if (DailyClose && TimeToString(TimeCurrent(), TIME_MINUTES )>=closeHour   && position.SelectPosition(Symbol()) )

O que pode ser isto?

 
Lucas Tavares:

Tive problema com estas função :


O que pode ser isto?

Deve ser exatamente o que a mensagem diz: a variável "position" não foi declarada.

A variável "position" tem que ser um objeto da classe na qual o método SelectPosition() foi declarado. 

Se essa classe que contém o método SelectPosition() não tiver sido construída por você, provável você precisará fazer o #include de algum arquivo de extensão ".mqh" contendo a declaração da classe, para poder usá-la.

 

bom dia, queria saber como estirar o dinheiro que depositei direto no site do metatrader 5 e não em uma corretora?

Razão: