вторник, 15 мая 2018 г.

Forex error 133


OrderSend Error 130 Error Opening Long Order: 130 Aqui está o código, que foi modificado de um consultor especialista que pode abrir negócios sem erro. Então não tenho certeza porque estou recebendo este erro. if (BarCloseltBollingerLower ampamp trendlt0) // O preço de fechamento é menor que a linha superior de Bollinger // if (trendlt0) // Tendência está inoperante ticketOrderSend (Symbol (), OPBUY, Lotes, Ask, 3, Ask-TrailingStop, 0, quotTempo de contador : Long Order Placedquot, 16384,0, Green) // Abrir a ordem longa if (ticketgt0) if (OrderSelect (ticket, SELECTBYTICKET, MODETRADES)) Imprimir (pedido do quotBUY aberto. Quot, OrderOpenPrice ()) else Imprimir (quotErro abrindo a ordem LONG ., GetLastError ()) return (0) return (0) Seu Ask pode ser 1.340 no EUR / USD, por exemplo. Qual é o valor do seu TrailingStop? Deve ser algo como 0,0010 ou 0,0020 ou 0,0011 ou 0,133 ou etecetera. Você está tentando subtrair 0.0001s e não inteiros como 10, 20, 11, etc. Se você quer que o TrailingStop seja um número inteiro que um usuário digita, como 10 por exemplo, então você tem que fazer 0.0010 primeiro para subtrair de Ask. Você pode fazer isso com o seguinte: TrailingStop Point. Aponte para o EURUSD 0.0001. Então você pode querer mudar seu código para o seguinte: Ask - (TrailingStop Point), que é o mesmo que Ask-TrailingStop Point. Abaixo está o código de um dos meus scripts, para que você possa ver como alguém pode fazer isso. OrderSend (Symbol (), OPBUY, dLotSize, Ask, 3, Ask - StoplossPoint. Pergunte ao TakeprofitPoint, strOrderComment, MAGICID, 0, Green) // Open Buy Order Espero que isso funcione. Modificação de Pedidos O MQL4 permite que você modifique ordens de mercado e pendentes . As encomendas são modificadas de acordo com as regras descritas em Características do Pedido e no Apêndice 3. Função OrderModify () Pedidos comerciais para modificação de ordens de mercado e pendentes são formados usando a função OrderModify (). A função modifica os parâmetros de ordens de mercado e pendentes. A função retorna TRUE, se a negociação for feita com sucesso. Caso contrário, retorna FALSE. ticket - o número único do pedido. preço - o preço recentemente solicitado de uma ordem pendente ou o novo preço de abertura para uma ordem de mercado. stoploss - o novo valor do StopLoss. takeprofit - o novo valor do TakeProfit. expiração - o tempo de expiração de um pedido pendente. arrowcolor - a cor das setas para modificar o StopLoss e / ou o TakeProfit no gráfico. Se este parâmetro não estiver disponível ou seu valor for igual ao de CLRNONE, as setas não serão exibidas no gráfico. Nota: Você pode alterar o preço de abertura e a expiração somente para pedidos pendentes. Se você passar valores inalterados como os parâmetros da função, o terminal gerará o erro 1 (ERRNORESULT). Pode haver um conjunto de limitações para a aplicação do tempo de expiração a pedidos pendentes em alguns servidores de negociação. Nesse caso, se você tentar criar um valor diferente de zero nos parâmetros de expiração, o erro 147 (ERRTRADEEXPIRATIONDENIED) será gerado. Modificação de ordens de mercado Uma ordem de mercado padrão contém duas ordens de parada - StopLoss e TakeProfit. Eles instruem para fechar a ordem nos preços solicitados, a fim de parar as perdas e fixar os lucros. A modificação de ordens de mercado pode ser útil para alterar os preços solicitados de ordens de parada, seja como resultado de novos valores calculados obtidos no programa ou na iniciativa dos comerciantes. O terminal do cliente tem sua própria ferramenta usada para modificação do StopLoss: Trailing Stop. Ele permite que o programa modifique o nível de StopLoss seguindo a taxa a uma determinada distância fixa a partir dele (consulte o Guia do usuário do Terminal MetaTrader 4 Cleitn). A função de modificação de pedidos OrderModify () expande consideravelmente as capacidades de modificação: Os preços solicitados de ambas as ordens de parada podem ser alterados na direção do preço de mercado ou excluídos. Uma limitação para a modificação do pedido de mercado é a distância mínima permitida entre a ordem de parada e o preço de mercado, definida pelo centro de negociação (consulte Características e requisitos do pedido e Limitações na realização de negociações). Se o programa tentar alterar a posição de uma ordem de parada de tal forma que seja colocada mais próxima do mercado do que a distância mínima permitida, essa solicitação de negociação será rejeitada pelo terminal do cliente e a execução da função OrderModify () será falhar (erro 130). É por isso que você deve fornecer um bloqueio especial em seu programa, o que considerará essa limitação. Exemplo de um Expert Advisor simples que modifica o StopLosses de todas as ordens do mercado, para as quais a distância entre o preço solicitado do StopLoss e o preço de mercado é maior do que a predefinida (modifystoploss. mq4) O programa acima é um Expert Advisor. Se necessário, você pode facilmente realizar a função de modificação de pedidos em um script. No entanto, não seria muito útil usar um script normal neste exemplo, porque o script encerraria suas operações após a negociação ter sido feita. O uso de um script seria razoável, caso o programa realize uma execução única de uma operação, por exemplo, ordens de abertura ou fechamento. Neste caso, no entanto, estavam resolvendo uma tarefa que precisa de controle contínuo sobre a situação: alterar a posição de uma ordem de parada, se uma determinada condição for atendida, ou seja, se a distância entre a taxa de mercado e o valor solicitado da ordem de parada excede um certo valor pré-definido (10 pontos, no nosso caso). Para um uso de longo prazo, é muito mais conveniente escrever um EA que seja iniciado para execução a cada tique e pare de funcionar somente com a instrução direta do usuário. O algoritmo do EA modifystoploss. mq4 acima é muito simples. Os principais cálculos são realizados no ciclo de busca nas ordens (bloco 2-9). O pedido é pesquisado em ordens de mercado e pendentes (o pool de parâmetros na chamada de função OrderSelect () não é explicitamente especificado). No bloco 2-3, ordens pendentes e as ordens abertas para outro símbolo são filtradas para as ordens que foram selecionadas, o valor de StopLoss é determinado. O bloco 3-9 representa um ciclo para modificação da ordem selecionada. No bloco 3-4, o novo valor atual da distância limite é determinado (seu corretor pode alterar esse valor a qualquer momento). No bloco 4-5, a necessidade de modificar a ordem selecionada (atualmente processada no ciclo para) é calculada, bem como um novo valor de StopLoss. Se a ordem atual não precisa ser modificada, o programa sai do ciclo enquanto no final do bloco 4-5 e esta ordem não é modificada (no bloco 5-6). No entanto, se a ordem precisar ser modificada, o controle é passado para o bloco 5-6, no qual os parâmetros necessários são calculados e a função OrderModify () é chamada e forma uma solicitação de troca. Se uma negociação for concluída com sucesso, a interrupção do operador no bloco 6-7 encerrará a execução do ciclo enquanto, o que resulta no término da iteração atual do ciclo de pesquisa de pedidos para (o próximo pedido começará a ser processado no ciclo). próxima iteração). Se a negociação não for executada com sucesso, os erros serão processados. Se um erro não for crítico, o programa tentará fazer uma troca. No entanto, se o erro for estimado como crítico, o controle será passado fora do ciclo de modificação para processamento do próximo pedido (no ciclo para). Você deve observar um pequeno recurso aqui relacionado à modificação de ordens de mercado. A função OrderModify () define novos valores de preço para as duas ordens de parada simultaneamente. No entanto, a necessidade de cumprir a distância mínima diz respeito apenas à ordem de parada, cujo novo valor difere do atual. Se o novo valor permanecer o mesmo que o atual, a ordem de parada poderá estar a qualquer distância do preço de mercado, enquanto a solicitação de troca correspondente é considerada correta. Por exemplo, temos uma ordem de compra de mercado aberta ao preço de 1.295467, com as seguintes ordens de parada: StopLoss 1.2958 e TakeProfit 1.2960. A distância mínima definida pelo corretor é de 5 pontos. Para o preço de mercado Bid 1.2959, surgem as condições para modificação do pedido, ou seja, para colocação de StopLoss 1.2949 (Bid - 10 pontos). Para executar a função OrderModify (), você também deve especificar um novo valor de TakeProfit. Nosso EA não altera a posição de TakeProfit, portanto, definimos seu valor atual na função: TakeProfit 1.2960. Apesar de o novo valor solicitado de TakeProfit 1.2960 estar próximo do preço de mercado Bid (apenas 1 ponto, ou seja, menor que a distância mínima permitida de 5 pontos), este valor não difere do valor atual de TakeProfit 1.2960, portanto, a solicitação de negociação será considerada correta e executada no servidor (em geral, a solicitação pode ser rejeitada, mas por outros motivos). As figuras 102 e 103 representam os resultados de uma modificação bem-sucedida em tal situação. Fig. 102. Janela de alerta e janela de símbolo como aparecem na modificação de uma ordem pela EA modifystoploss. mq4 quando a taxa de mercado está próxima do valor solicitado de TakeProfit. Podemos ver na Fig. 103 que a modificação resultou no novo valor de StopLoss 1.2949, e o preço atual Bid 1.2959 estava a uma distância de 1 ponto do valor de TakeProfit. Deve notar-se separadamente que nem o mercado nem as ordens pendentes devem ser modificados) isoladamente da análise da situação do mercado. Essa modificação só pode ser útil se a taxa de mercado se mover rapidamente e em uma direção, o que pode acontecer após notícias importantes. Entretanto, se você negociar em um mercado normal, a decisão da necessidade de modificar pedidos deve ser feita com base em critérios de mercado. No Expert Advisor, modifystoploss. mq4. também usamos um critério (o StopLoss está mais longe do preço de mercado do que o desejado), com base no qual o programa decide modificar os pedidos. No entanto, esse critério é simples demais e difícil de ser considerado como um critério que caracteriza a situação do mercado. Modificação de pedidos pendentes A modificação de ordens pendentes difere ligeiramente das ordens de mercado. A diferença importante é que é possível alterar o preço solicitado do próprio pedido. Você deve manter as regras que limitam a posição de uma ordem pendente como relacionadas ao preço de mercado e às ordens de parada em relação ao preço do pedido solicitado (consulte Características do pedido e Requisitos e limitações na realização de negociações). Ao mesmo tempo, todas as características da ordem pendente são consideradas como solicitadas recentemente, independentemente do histórico anterior de eventos relacionados. Por exemplo, suponha que temos uma ordem pendente BuyStop 1.2030 com StopLoss 1.2025 e TakeProfit 1.2035. O corretor definiu a distância mínima permitida como 5 pontos. É fácil ver que as ordens de parada estão dentro da faixa permitida, portanto, qualquer modificação do preço de abertura do pedido solicitado resultará na modificação necessária de pelo menos uma das ordens de parada. No entanto, se for formado um pedido de negociação que alterará o preço do pedido solicitado, os valores das ordens de parada permanecerão os mesmos, o terminal do cliente considerará esse pedido como errado e não o enviará ao servidor para execução. Por exemplo, se a solicitação especificar os seguintes valores: BuyStop 1. 2028, StopLoss 1.2025 e TakeProfit 1.2035, essa solicitação estará incorreta, embora os valores de suas ordens de parada não tenham sido alterados: nesse caso, a solicitação está violando a regra de mantendo a distância mínima entre o preço de abertura do pedido solicitado e o preço de um dos pedidos de parada (consulte Requisitos e limitações na realização de negócios). Vamos ver como um script pode parecer que modifica uma ordem pendente para aproximar o preço solicitado ao preço de mercado a uma certa distância predefinida. Vamos definir a distância como 10 pontos. Para indicar a ordem a ser modificada (pode haver várias ordens pendentes na janela), estamos usando o preço, no qual o script foi anexado à janela de símbolos. Exemplo de um script simples que modifica uma ordem pendente, cujo preço de abertura solicitado está mais próximo do preço do anexo de script do que os preços de outros pedidos pendentes (modifyorderprice. mq4). A distância entre o preço de mercado e o preço solicitado da ordem pendente é definida na variável Tral. A variável WinPrice contém o valor do preço, no qual o script foi anexado à janela de símbolos. No ciclo de busca em ordens (bloco 2-5), as características da ordem mais próxima do nível de anexo do script são calculadas. O bloco 6-13 representa o ciclo de fechamento de pedidos. No bloco 8-9, é decidido se a ordem selecionada deve ser modificada. Se necessário, os novos valores do preço solicitado de ordens de parada são calculados aqui. A modificação da ordem é solicitada usando a função OrderModify () no bloco 10-11. Erros são processados ​​no bloco 11-13. O bloco 8-9 consiste em quatro blocos similares, nos quais os novos valores usados ​​na solicitação são calculados. Vamos considerar o pretendido para o pedido SellLimit: Os novos parâmetros do pedido são calculados somente se o preço atual do preço for maior do preço de mercado atual Bid do que a distância desejada TS. Se assim for, o controle será passado para o corpo do operador se o novo preço de abertura do pedido, NewPrice, for calculado. Os novos valores de StopLoss e TakeProfit são calculados apenas para valores diferentes de zero. A distância entre o preço do pedido solicitado e cada preço da ordem de parada permanece a mesma. Por exemplo, o pedido SellLimit é colocado em 1.2050, seu StopLoss 1.2073 e seu TakeProfit 1. 2030. Suponha que os cálculos resultem em um novo preço de abertura de pedido igual a 1.2040. Neste caso, os novos valores de ordens de parada serão os seguintes: StopLoss 1.2063, TakeProfit 1. 2020. Assim, as operações do programa resultam em que a ordem é modificada cotas um todo - todos os três parâmetros básicos (preço aberto, StopLoss e TakeProfit ) desce simultaneamente, mantendo uma distância entre eles. No final do bloco 8-9, os novos valores de ordens de parada são verificados quanto a valores negativos. Essa verificação é útil se uma ordem de parada previamente colocada (por outro programa ou manualmente) estiver próxima do preço zero, por exemplo, apenas 1 ponto acima de zero. Nesse caso, se o pedido for reduzido em mais de um ponto, o novo preço de um dos pedidos de parada se tornará negativo. Se esse valor fosse especificado em uma solicitação de troca, a solicitação seria rejeitada pelo terminal do cliente. Temos que apontar uma desvantagem de tais programas - tanto scripts quanto Expert Advisors. O programa modifyorderprice. mq4 acima é altamente limitado em sua decisão de ação. A ordem a ser modificada só pode ser movida em uma direção - na direção da taxa de mercado, suas ordens de parada sendo estritamente "côncavas" para a ordem. Este programa não está ajustado para modificar o preço do pedido solicitado na direção diferente do preço de mercado. A possibilidade de alterar a posição de qualquer ordem de parada separada também não é realizada no programa. A limitação acima é determinada, em primeiro lugar, pela quantidade de controles usados. Neste programa, existe apenas um controle do tipo - o local onde o script foi anexado à janela de símbolos. Usando este parâmetro, o trader pode determinar qualquer ordem a ser modificada. No entanto, esta é toda a iniciativa dos usuários. Para trabalhar com mais eficiência, o usuário precisa de ferramentas adicionais, permitindo que ele afete outros parâmetros de pedidos. Essas tarefas podem ser resolvidas de maneira bastante eficiente usando o MQL4. No entanto, você terá que usar outro algoritmo, mais categórico para esse propósito. É possível criar um programa que automatize sua negociação e modifique pedidos de acordo com seus desejos. Você pode usar em tal programa, por exemplo, objetos gráficos como ferramentas de controle adicionais para negociação manual. O lado do Servidor MetaTrader4 não tem nada a ver com isso. Verifique as configurações do Terminal localhost. Pode haver várias razões, por que o EA estava funcionando (o DDR funcionou conforme você o publicou) e você ainda recebe um erro. Uma alteração de MT4.Terminal. Profile também pode causar isso. Uma alteração MT4.Terminal. LogAnotherUser também pode causar isso. Uma mudança de MT4.Terminal. Graph também pode causar isso. Marque a opção Ferramentas de Ferramentas do Expert Advisor TAB para obter valores ativos nas respectivas caixas de seleção para todos os itens acima. Verifique se você está corretamente conectado a uma conta de negociação correta (não cancelada). Verifique, se a sua conexão estiver verde / funcionando Verifique, se o seu símbolo comercial tem mercado ativo (horário comercial aberto) Se ainda estiver com problemas, envie alguns OrderSend () - s com PrintScreen - s e copie as respostas do Log-File amp post aqui .

Комментариев нет:

Отправить комментарий