Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
if (err===146)
{
while (IsTradeContextBusy())
{
if (IsTradeAllowed()) break;
else
Sleep(1000*1,1);
}}}}
Acho que esta é uma solução mais rápida. Por favor, compartilhe seus comentários.
Obrigado.
Como você se sentiria em relação a esta variante?
Esta parece-me ser uma solução mais rápida, trabalho desta forma. Comente.
Obrigado.
Por mim, tudo bem. Com compreensão. A pausa é menor, funciona mais rápido... Mas há alguma redundância injustificada em sua versão.
A função IsTradeContextBusy retorna a bandeira de ocupação do fio comercial. Essa função não existia antes da construção do 195º. Assim, usamos a função IsTradeAllowed que retorna um sinal de que a EA está autorizada a negociar e o fluxo comercial é livre.
Permitimos que a EA negocie, marcando a caixa "Allow EA to trade" na caixa de diálogo de propriedades da EA (tecla F7).
O erro 146 (Trade Stream está ocupado) não tem nada a ver com permitir que o Expert Advisor possa negociar. Portanto, vejamos as propriedades da função IsTradeAllowed na medida em que se relacionam apenas com o fio condutor do comércio.
Portanto, o fio comercial é livre e a função IsTradeAllowed retorna True. O fio comercial está ocupado, a função IsTradeAllowed retorna Falso. Agora vamos ver os valores retornados pela função IsTradeContextBusy. O fio comercial é livre, a função IsTradeContextBusy retorna Falso. O fio comercial está ocupado, a função IsTradeContextBusy retorna True. Podemos ver que para os mesmos estados de fluxo comercial, os valores das funções IsTradeAllowed e IsTradeContextBusy são opostos. Além disso, essas funções se duplicam em vez de se complementarem em relação aos estados de fluxo comercial. Portanto, um deles pode ser excluído. Qual deles? A função IsTradeAllowed, como já mencionei acima, além da bandeira do estado do fluxo comercial, também devolve a bandeira permitindo que a EA negocie o que, nesta situação, ou seja, quando se trata de erro 146 (o fluxo comercial está ocupado), não é necessário para nós. Portanto, será necessário e suficiente utilizar apenas uma função IsTradeContextBusy. Se você executar as abreviações acima, seu código será reduzido ao meu:
com a única diferença sendo o tamanho da pausa. Mas isto é uma questão de gosto, preferência pessoal, estilo comercial e assim por diante. Você poderia fazer uma pausa de 0,1 segundo. Não é um grande problema... Eu só prefiro 11 segundos.Dois erros foram encontrados na função SetOrder:
Atenção! O posto com a função SetOrder para comércio on-line foi corrigido. A função é um pouco mais longa. Não cabia em todo o posto, então teve que ser movido para o trailer.
Neste posto decidi dar os principais pontos explicando como funciona a função SetOrder. Eu mesmo não trabalho com ordens, ou seja, estou no território de outra pessoa aqui. Talvez alguém que saiba como funciona a função SetOrder sugira melhorias ou encontre erros.
1. Nas primeiras linhas de código, são declaradas variáveis locais e algumas delas são inicializadas. Por exemplo, em lsComm, o nome da EA e o nome do prazo retornado pela função GetNameTF são escritos. A propósito, não vou me deter em funções como GetNameOP, GetNameTF, Mensagem, etc., somente se alguém tiver perguntas sobre elas.
2. Verificação dos parâmetros recebidos. Se o sy estiver vazio, ele é inicializado com o nome da ferramenta atual. A variável para a cor do ícone na tabela é rubricada pelo tipo de operação. Se o tempo de expiração não zero do pedido for menor que o tempo atual, ele é reposto a zero.
3. O corpo do ciclo de tentativas de negociação, cujo número é limitado pelo valor da variável global NumberOfTry. As operações realizadas dentro do laço principal da função SetOrder vão mais longe.
4. Se a função SetOrder não for executada no testador, temos a oportunidade de encerrar sua operação. A espera pelo ciclo de liberação do fluxo comercial é realizada aqui. As variáveis do ambiente de mercado são atualizadas e a hora atual é registrada.
5. Envio de um pedido a um servidor comercial. Se o bilhete for positivo, a função SetOrder é encerrada.
6. Se o bilhete for negativo, o processamento dos erros de execução é realizado.
7. No caso de erros 128 (o tempo de espera para a execução do negócio expirou), 142 (a ordem é enfileirada) e 143 (a ordem é aceita pelo revendedor para execução), fazemos uma pausa de 66 segundos. Após a pausa, usando a função ExistOrders (que descreveremos mais tarde), verificamos se a ordem já foi definida durante o período de tempo entre o pedido do servidor e o momento atual. Se a ordem tiver sido definida, saia da função.
8. O tamanho do item e os preços Bid and Ask são armazenados nas variáveis locais.
9. Em caso de erro 130 (Paradas incorretas), os níveis de preço do pedido, parar e retirar são corrigidos, se possível.
10. As informações que podem ajudar a resolver o problema ou a encontrar o erro mais tarde são exibidas no relatório.
No final, processamos outros erros. Alguns deles mostram uma longa pausa (5 minutos), outros bloqueiam o Expert Advisor, outros permitem novas tentativas de comércio, etc.
É isso aí! Fim da descrição!
A função ExistOrders().
Devolve uma bandeira para a existência de uma ordem. Responde à pergunta se a ordem está definida ou não. Você pode usar esta função para solicitar qualquer pedido, bem como pedidos mais específicos. O filtro de solicitação é configurado utilizando os parâmetros da função:
Exemplos de como usar a função ExistOrders().
1. Verifique a disponibilidade de qualquer pedido
2. Verificar a disponibilidade de qualquer pedido em qualquer instrumento da tabela atual
3. Verifique a presença do pedido BuyLimit em qualquer instrumento
4. Verifique se há um pedido SellStop com o número mágico 123456 em EURUSD
5. Verificar a disponibilidade de qualquer pedido com um tempo de preparação de 2 horas ou menos
No trailer há um roteiro para testar a função ExistOrders. Os 4 primeiros exemplos no roteiro são comentados.Advertência! No correio de 12.03.2008 07:24 substituí o anexo SetOrder.mq4