Monday 15 January 2018

Fechar todo o mercado forex da ordem


Como fechar um investimento de alto risco de comércio Aviso: Negociação de câmbio e / ou contratos de diferenças sobre margem carrega um alto nível de risco e pode não ser adequado para todos os investidores. A possibilidade existe que você poderia sustentar uma perda em excesso de seus fundos depositados e, portanto, você não deve especular com capital que você não pode perder. Antes de decidir negociar os produtos oferecidos por FXCM você deve considerar com cuidado seus objetivos, situação financeira, necessidades e nível de experiência. Você deve estar ciente de todos os riscos associados à negociação em margem. FXCM fornece aconselhamento geral que não leva em conta seus objetivos, situação financeira ou necessidades. O conteúdo deste Website não deve ser interpretado como um conselho pessoal. FXCM recomenda que você procure o conselho de um conselheiro financeiro separado. Clique aqui para ler o aviso de risco total. A FXCM é uma Comerciante de Mercadorias e Comerciante de Câmbio de Varejo registrada com a Comissão de Negociação de Futuros de Mercadorias e é membro da Associação Nacional de Futuros. NFA 0308179 Forex Capital Markets, LLC (FXCM LLC) é uma subsidiária operacional dentro do grupo de empresas FXCM (coletivamente, o Grupo FXCM). Todas as referências neste site para FXCM referem-se ao Grupo FXCM. Observe que as informações neste site são destinadas apenas a clientes de varejo e certas declarações aqui contidas podem não ser aplicáveis ​​a Participantes elegíveis do contrato (isto é, clientes institucionais), conforme definido na Seção1 (a) (12) da Lei de Intercâmbio de Mercadorias. Copyright cópia 2017 Forex Capital Markets. Todos os direitos reservados. 55 Water St. 50th Floor, Nova Iorque, NY 10041 USAMarket-On-Close Order - MOC O que é um Market-on-Close Order - MOC Uma ordem de mercado de fechamento (MOC) é uma ordem de mercado sem limite que é Executado o mais próximo possível do fim do dia de mercado. Todas as ordens de MOC devem ser enviadas por 3:45 p. m. ET na NYSE e por 3:50 p. m. ET na Nasdaq. Como ambos fecham às 4 p. m. e nenhuma troca permite a modificação ou cancelamento de ordens de MOC depois desses tempos. (MOC) significa que o investidor quer comprar ou vender um dado instrumento financeiro ao último preço negociado no mercado no final do dia de negociação. Ordens MOC não especificar um preço-alvo alguns analistas acreditam que isso torna muito fácil tirar vantagem dos investidores, dando uma má execução. Tipos de Pedidos Também conhecido como uma ordem de take-profit, uma ordem de limite estipula o nível de destino no qual uma compra ou venda será executada. O nível no qual uma ordem de limite é feita é sempre melhor que o preço de mercado no momento em que a ordem é iniciada. O preço-alvo poderia ser projetado para obter lucro em uma posição existente, limitar uma perda ou entrar em uma nova posição. Uma ordem stop-loss é essencialmente um pior cenário e novamente pode ter lucro, limitar uma perda ou entrar em uma posição. Na melhor das hipóteses é uma ordem de mercado para comprar ou vender ao melhor preço disponível no mercado para o volume desejado no momento em que a ordem é colocada. Um cancela o outro ou ordena a ordem dos cancelamentos (OCO) é uma combinação de uma ordem do limite e de uma ordem stop-loss. Quando qualquer nível de destino é atingido eo comércio é executado, o outro lado da ordem é automaticamente cancelada. Bom até cancelado (GTC) é uma ordem que permanecerá em vigor até que a transação seja executada ou cancelada, não há limite de quanto tempo uma ordem pode permanecer no lugar. As ordens de GTC são colocadas geralmente para fazer exame do lucro em uma posição existente. Execução de MOC Uma ordem de MOC é uma ordem de mercado que será executada no ou logo após o fechamento. Às vezes é usado como um qualificador de ordem de limite, o que significa que se uma ordem de limite não for executada durante o dia de negociação, essa ordem será automaticamente cancelada e substituída por uma ordem de MOC. Isso garante que a transação desejada é executada, mas deixa o investidor exposto aos movimentos de preço no final do dia. Este tipo de ordem oferecer proteção aos investidores, garantindo a compra ou venda de um estoque que pode se mover drasticamente durante a noite como resultado de um anúncio programado de ganhos depois de horas ou uma notícia de notícia antecipada. Eles também são úteis para os investidores que podem não estar disponíveis para executar uma transação essencial no final do dia. O risco de usar uma ordem de MOC, no entanto, é que um aglomerado de ordens no final fino de dia de negociação pode levar a uma execução pobre. Fechamento e exclusão de pedidos Pedidos de fechamento de ordens de mercado são formados usando a função OrderClose () . Function OrderClose () É uma função usada para fechar uma ordem de mercado. A função retorna TRUE, se o comércio for executado com êxito. Retorna FALSO, se o comércio falhar. Bilhete - o número único da ordem. Lotes - a quantidade de lotes a ser fechado. É permitido especificar um valor que é menor do que a quantidade disponível de lotes na ordem. Neste caso, se a solicitação comercial for executada com sucesso, a ordem será fechada parcialmente. Preço - fechar preço. Este parâmetro é ajustado de acordo com os requisitos e limitações aceitos para a realização de negócios (ver Características e Regras de Ordem para Fazer Operações e Apêndice 3). Se não houver preço solicitado para fechamento da ordem de mercado no fluxo de preços ou se estiver desatualizado, este pedido de comércio será rejeitado se o preço estiver desatualizado, mas encontrado no fluxo de preços e, ao mesmo tempo, seu desvio A partir das gamas de preço atual dentro do valor de derrapagem, o pedido de comércio será aceito pelo terminal cliente e enviado para o servidor de comércio. Derrapagem - o desvio máximo permitido do preço solicitado para o fechamento da ordem do preço de mercado (em pontos). Cor - a cor da seta de fechamento em um gráfico. Se esse parâmetro não estiver disponível ou seu valor for igual ao de CLRNONE, a seta não será exibida no gráfico. Se o programa contém informações sobre o tipo de ordem a ser fechada, sobre seu número exclusivo, bem como sobre a quantidade de lotes a ser fechado, é muito fácil fechar a ordem. Para isso, você deve usar no código do programa a chamada de função OrderClose () com parâmetros predefinidos. Por exemplo, se o número único da ordem de compra é 12345 e se você quiser fechar 0,5 lote, a chamada para a função de fechamento da ordem pode ser assim: Para decidir sobre o que ordens e em que seqüência deve ser fechado, Você tem que ter dados de todas as ordens abertas na situação atual. Em MQL4, há uma série de funções que podem ser usadas para obter vários dados que caracterizam qualquer ordem. Por exemplo, a função OrderOpenPrice () retorna o valor do preço de ordem aberto (ou do preço solicitado para pedidos pendentes), a função OrderLots () retorna a quantidade de lotes, a função OrderType () retorna o tipo da ordem, Etc. Todas as funções que retornam os valores de uma chamada de característica de ordem na sua execução para a ordem que foi selecionada pela função OrderSelect (). Função OrderSelect () Para obter os parâmetros de qualquer uma de suas ordens (não importa o mercado ou pendente, fechado ou excluído), você deve primeiro selecioná-lo usando a função OrderSelect (). OrderSelect é uma função que seleciona uma ordem para outras operações com ele. Retorna TRUE, se a função é executada com êxito. Caso contrário, ele retorna FALSE. Índice - a posição da ordem ou número, ele depende do segundo parâmetro. Selecione - o flag do método de seleção. A selecção de parâmetros pode assumir um dos dois valores possíveis: SELECTBYPOS - no índice de parâmetros é devolvido o número da encomenda na lista (a numeração começa com 0), SELECTBYTICKET - no índice de parâmetros, o número do pedido devolvida. Pool - a fonte de dados para seleção. O pool de parâmetros é usado, quando o parâmetro select é igual ao valor de SELECTBYPOS. O pool de parâmetros é ignorado, se a ordem for selecionada pelo número do ticket (SELECTBYTICKET). O conjunto de parâmetros pode assumir dois valores possíveis: MODETRADES (por padrão) - a ordem é selecionada em ordens abertas e pendentes, ou seja, entre as ordens exibidas na guia quotTropriedade da janela quotTerminalquot MODEHISTORY - a ordem é selecionada em fechado e excluído Ordens, ou seja, entre as ordens exibidas na guia quotAccount Historyquot da janela quotTerminalquot. Nesse caso, a profundidade do histórico especificado pelo usuário para exibir ordens fechadas e excluídas é importante. Para demonstrar o método de utilização de funções comerciais para fechamento de ordens de mercado, vamos resolver um problema: Problema 28. Escreva um script que fecha uma das ordens de mercado disponíveis na conta. A execução do script deve resultar no fechamento da ordem mais próxima ao local do script anexado à janela de símbolos com o mouse. Suponha que haja três ordens de mercado abertas no terminal para o símbolo Eur / Usd e uma ordem pendente aberta para Usd / Chf: Fig. 90. Exibindo várias ordens abertas para diferentes símbolos na janela do terminal. Devemos escrever tal script que pode ser arrastado pelo mouse da janela quotNavigatorquot para a janela de símbolos, o que deve resultar no fechamento de uma das ordens de mercado, ou seja, a ordem mais próxima do cursor (a partir do momento em que o usuário Liberado o botão do mouse). Na Fig. 91, você pode ver a alternativa, em que o cursor está mais próximo de ordem Sell 4372889. É esta ordem que deve ser fechado como resultado da execução do script. Para resolver o problema, devemos selecionar (usando a função OrderSymbol ()) entre todas as ordens somente as abertas para o símbolo, na janela da qual o script é descartado. Então, devemos encontrar os preços abertos de todas as ordens de mercado selecionadas (ou seja, executar a função OrderOpenPrice () sucessivamente para cada ordem). Sabendo a ordem de preços abertos, podemos facilmente selecionar um deles que corresponde com a declaração do problema. Para especificar os valores corretos dos parâmetros na função OrderClose (), também precisamos conhecer alguns outros dados sobre a ordem selecionada: a quantidade de lotes (determinada pela função OrderLots ()) eo número de ordem exclusivo (determinado pela Função OrderTicket ()). Além disso, para encontrar um ou outro preço de uma citação de duas vias, temos de saber o tipo da ordem (determinada pela função OrderType ()). Vamos considerar quais parâmetros devem ser especificados na função OrderSelect () para obter as características de ordem acima. Em primeiro lugar, é necessário escolher o método de seleção de ordem. Em nosso problema, o método de seleção é determinado pela própria declaração do problema: Os dados sobre os números de ordem devem estar indisponíveis no programa desde o momento do lançamento do script para execução, ou seja, o programa é considerado como contendo um bloco que Determinar os números de ordem. Isso significa que devemos verificar todas as ordens uma a uma exibidas em quotTerminalquot (Fig. 64.1), então temos que usar o parâmetro SELECTBYPOS. A fonte para seleção de pedidos é óbvia, também. Para resolver o problema, não há necessidade de analisar ordens fechadas e excluídas. Neste caso, estamos interessados ​​em encomendas de mercado apenas, por isso vamos procurá-los usando o parâmetro MODETRADES na função OrderSelect (). Para o pool de parâmetros, o valor padrão de MODETRADES é especificado no cabeçalho da função, portanto, pode ser ignorado. Abaixo é mostrado como um bloco para análise de ordens de mercado e pendentes pode ser construído: No cabeçalho do operador de ciclo, o valor inicial é especificado como i1, enquanto que a condição para sair do ciclo é a expressão iltOrdersTotal (). A função OrdersTotal () retorna a quantidade total de pedidos de mercado e pendentes, ou seja, as ordens que são mostradas na guia quotTrropriot da janela quotTerminalquot. É por isso que haverá tantas iterações no ciclo como muitas ordens participam na negociação. Em cada iteração, quando a condição é calculada no operador se, a função OrderSelect (i-1, SELECTBYPOS) será executada. A seguinte questão importante deve ser observada aqui: A numeração de ordens na lista de ordens de mercado e pendentes começa com zero. Isto significa que a primeira ordem da lista (figura 90) é colocada na posição zero, a posição da segunda ordem é numerada como 1, a da terceira ordem é numerada como 2, etc. É por isso que, na função Call OrderSelect (), o valor do índice é dado como i-1. Assim, para todas as ordens selecionadas, esse índice será sempre 1 menor que o valor da variável i (que coincide com o número da próxima iteração). A função OrderSelect () retorna true, se a ordem for selecionada com sucesso. Isso significa que é possível que uma seleção de ordem possa falhar. Isso pode acontecer, se a quantidade de pedidos mudou durante o seu processamento. Ao programar em MQL4, você deve lembrar que um programa aplicativo funcionará no modo de tempo real e que, enquanto estiver processando alguns parâmetros, os valores desses parâmetros podem mudar. Por exemplo, a quantidade de ordens de mercado pode mudar como resultado de abertura / fechamento de pedidos e modificação de pedidos pendentes em mercados. É por isso que você deve manter a seguinte regra ao programar o processamento de pedidos: As ordens devem ser processadas o mais rápido possível, enquanto que o bloco de programa responsável por esse processamento não deve conter, se possível, linhas de programa redundantes. De acordo com o código representado na Fig. 64.3, no cabeçalho do operador se, o programa analisa se a próxima ordem está disponível na lista de pedidos no momento em que é selecionada. Se a próxima ordem estiver disponível, o controle será passado para o corpo do operador se para processar os parâmetros da ordem. Deve-se notar que tal construção não ajuda muito, em caso de possíveis conflitos, porque a ordem pode ser perdida (fechada) durante o processamento de seus parâmetros. No entanto, esta solução revela-se mais eficiente se, a partir do momento de sua seleção, a ordem não está mais disponível. No corpo do operador se, os parâmetros da ordem selecionada são analisados. Ao executar as funções OrderOpenPrice (), OrderTicket (), OrderType () e outras do tipo, cada uma retornará o valor de uma determinada característica da ordem selecionada como resultado da execução da função OrderSelect (). Todo o raciocínio acima foi usado no programa que resolveria o Problema 28. Um exemplo de um script simples destinado ao fechamento de uma ordem de mercado, cujo preço aberto está mais próximo da localização do anexo do script do que os preços abertos de outras ordens (Closeorder. mq4). O código inteiro do programa closeorder. mq4 é concentrado na função especial start (). No bloco 1-2, algumas variáveis ​​são inicializadas. A variável Dist é a distância do local onde o script foi descartado para a ordem mais próxima. A variável RealOrder é um sinalizador que exibe a disponibilidade de pelo menos uma ordem de mercado no terminal cliente (valor não negativo). A variável WinPrice é o preço, no qual o usuário anexou o script à janela de símbolo. No bloco 2-6, a ordem é analisada: Uma das ordens disponíveis é atribuída a ser fechado. O bloco 6-10 é o bloco de fechamento da ordem e de processar os erros que podem ocorrer durante a execução da operação. A partir do momento em que o usuário anexou o script à janela de símbolos, os valores das variáveis ​​são calculados no bloco 1-2, a variável WinPrice assumindo o valor do preço, ao nível do qual o usuário anexou o script. Agora é necessário encontrar a ordem (com suas características) mais próxima a esse local. No ciclo para (bloco 2-6), as ordens são pesquisadas. No bloco 2-3, o programa verifica se há uma ordem na próxima linha do quotTerminalquot. Se uma ordem é encontrada, o controle é passado para o corpo do operador se para obter e analisar as características dessa ordem. No bloco 3-4, as ordens abertas para símbolos errados (não o símbolo, para o qual o programa está sendo executado) são filtradas. No nosso caso, é a ordem 4372930 aberta para Usd / Chf. Função OrderSymbol () retorna o nome do símbolo da ordem selecionada. Se esse nome de símbolo for diferente daquele, para o qual o programa está sendo executado, a iteração atual é interrompida, impedindo que a ordem aberta para outro símbolo seja processada. Se a ordem sob análise for aberta para o símbolo de quotourquot, será realizada mais uma verificação. O tipo de ordem é determinado usando a função OrderType () (consulte Tipos de negócios). Se o tipo de ordem resultar ser mais do que 1, isso significa que a ordem é pendente. Neste caso, a iteração atual é interrompida, também, porque não estamos interessados ​​em ordens pendentes. No nosso exemplo, temos tal ordem, mas ela é aberta para outro símbolo, então ela já foi filtrada. Todas as ordens que passam o bloco 3-4 com sucesso são de mercado. O bloco 4-5 destina-se a selecionar apenas uma ordem de todas as ordens de mercado que passaram com êxito o bloco anterior. Esta ordem deve ser a mais próxima do preço predefinido (o valor da variável WinPrice). O usuário não é necessário para quotpinpointquot a linha de ordem com seu cursor do mouse. A ordem que está mais próxima do que qualquer outra ordem para o cursor a partir do momento do lançamento do script para execução será selecionada. O preço aberto da ordem processada é encontrado usando a função OrderOpenPrice (). Se o valor absoluto da distância entre o preço da ordem atual eo preço do quotcursor é menor que a mesma distância para a ordem anterior, a ordem atual será selecionada (o valor absoluto da distância é necessário para excluir a influência de Posição do cursor - abaixo ou acima da linha de ordem). Neste caso, esta ordem será memorizada na iteração corrente do ciclo como corredor de frente para ser fechado. Para essa ordem, o número do bilhete (o número individual da ordem) ea quantidade de lotes são calculados no final do bloco 4-5. Neste exemplo (figura 90), o total de encomendas é de quatro (três de mercado e uma pendente), pelo que haverá quatro iterações executadas no ciclo, o que resultará na obtenção de todos os dados necessários para o encerramento de um Ordem selecionada. Em seguida, o controlo no programa de execução será passado para o operador de ciclo enquanto (bloco 6-10). No bloco 6-7, as ordens de mercado encontradas são verificadas quanto à disponibilidade. Se nenhuma ordem de mercado for encontrada no bloco 2-4 (é possível, em geral), o valor do sinalizador RealOrder permanece igual a -1, o que significa a indisponibilidade de ordens de mercado. Se a verificação no bloco 6-7 não detectar ordens de mercado, a execução do ciclo enquanto está quebrado, o programa termina suas operações. Se o valor da variável RealOrder for igual a 0 ou 1, isso significa que um mercado é predefinido para fechamento e deve ser fechado. No bloco 7-8, de acordo com o tipo de ordem, o preço de fechamento da ordem é calculado. É o valor das ordens de lance para compra e o valor das ordens de pedido de venda (consulte Requisitos e limitações na criação de negócios). No bloco 7-8, são calculados os valores da variável auxiliar Texto. A solicitação de negociação para o encerramento da ordem é formada na função OrderClose () na linha abaixo: A função de comércio OrderClose () retorna true, se a negociação for feita com sucesso e false, se não. Se a solicitação de negociação for executada com êxito no servidor, o valor true será atribuído à variável Ans (resposta). Neste caso, ao executar o bloco 8-9, o programa informará o utilizador sobre o encerramento bem sucedido da encomenda. Depois disso, a execução do operador de ciclo enquanto será parada, eo programa terminará suas operações. Caso contrário, o controlo será passado para o bloco 9-10 para analisar o erro devolvido pelo terminal cliente ao programa. No início do bloco 9-10, o código de erro é calculado. Depois disso, de acordo com o código de erro, saída do programa ou operação repetida são executadas. No primeiro interruptor de operador, o programa processa os erros que são implicitamente superáveis, isto é, os erros podem ser considerados como dificuldades temporárias na realização do comércio. Todas as ações necessárias são tomadas para cada um desses erros, então a iteração atual é interrompida ea execução do ciclo enquanto reinicia. (Observe que, neste exemplo, usamos para o processamento de erros o interruptor de operador que é retirado como resultado do uso do operador continuar que, como tal, não se destina a passar o controle fora do interruptor do operador. Apenas porque o interruptor de operador é uma parte do conteúdo do operador de ciclo externo enquanto e o operador continua interrompe a iteração corrente passando o controle para o cabeçalho do operador enquanto). Se o código de erro não é processado no primeiro comutador de operador, este erro é considerado crítico. Neste caso, o controlo é passado para o segundo comutador de operador, o qual é executado para informar o utilizador de que ocorreu um ou outro erro crítico. Além disso, o programa usa o intervalo do operador que interrompe a execução do ciclo while. Sair do ciclo enquanto, por qualquer motivo, resultará na passagem do controlo para o bloco 9-10 que produz uma mensagem sobre o fim das operações do programa. O retorno do operador interrompe a execução da função especial start () eo programa termina suas operações. O resultado prático obtido após o lançamento do script nas condições indicadas (ver Figuras 90 e 91) é mostrado abaixo. O comércio foi feito com sucesso no servidor. Como resultado do fechamento de uma das ordens, há duas ordens deixadas na janela de Eur / Usd. O fechamento do pedido também foi exibido na janela do quotTerminalquot: Fig. 94. Após a Execução do Script closeorder. mq4. Duas ordens de mercado são exibidas na janela quotTerminalquot. Mais tarde, as outras duas ordens são fechadas usando este script, também. Exclusão de ordens pendentes As solicitações de comércio para exclusão de ordens pendentes são formadas usando a função OrderDelete (). Função OrderDelete () A função elimina a ordem pendente colocada anteriormente. Retorna TRUE, se ele tiver funcionado com êxito. Caso contrário, ele retorna FALSE. Bilhete - o número único de um pedido. Arrowcolor - a cor de uma seta em um gráfico. Se esse parâmetro não estiver disponível ou seu valor for igual ao de CLRNONE, a seta não será exibida no gráfico. É fácil ver que a função OrderDelete () não contém uma especificação do volume eo preço de fechamento da ordem a ser excluído. A ordem é eliminada independentemente de quaisquer preços de mercado. A exclusão parcial de uma ordem também é impossível. Você pode diminuir a quantidade de lotes em uma ordem pendente em duas etapas: excluir a ordem existente e, em seguida, colocar uma nova ordem pendente com a diminuição (qualquer) quantidade de lotes. O algoritmo do programa que irá apagar uma ordem pendente pode ser bastante idêntico ao de fechamento de ordem de mercado. Uma pequena diferença é que nenhum preço próximo é necessário para excluir uma ordem pendente, então o programa abaixo não contém o bloco que atualiza os preços de mercado. Um exemplo de um script simples destinado à exclusão de uma ordem pendente, cujo preço solicitado está mais próximo do local do anexo do script do que os preços de outras ordens pendentes (deleteorder. mq4). O bloco de processamento de erros também foi ligeiramente alterado. Você deve considerar a possibilidade de erros relacionados a mudanças de preços (erros 135 e 136) ao fechar ordens de mercado, mas esses erros não ocorrem ao excluir pedidos pendentes. Pela mesma razão, a função RefreshRates () é usada em nenhum lugar no programa. O processamento de erros como o erro 4 eo erro 137 (consulte Códigos de erro) pode ser um pouco difícil. Por exemplo, ao obter o erro 137, o programa pode levar em consideração que o quotbroker está ocupado. No entanto, surge uma questão natural: Quando o corretor é livre, para que o usuário continue seu erro de negociação não fornece essas informações. É por isso que o programador deve decidir-se como construir o programa de processamento de tais erros corretamente. Em um caso simples, o pedido pode ser repetido após uma certa pausa (em nosso exemplo, em 3 segundos). Por outro lado, após uma série de tentativas malsucedidas de excluir (ou, em um caso comum, fechar, abrir ou modificar) uma ordem, o servidor pode retornar o erro 141 - muitas solicitações. Este erro resulta em que o script deleteorder. mq4 pára de funcionar. Geralmente, esses conflitos não são questões de programação. Nesses casos, você deve entrar em contato com o serviço de suporte de centros de negociação e esclarecer os motivos da rejeição para executar o pedido de comércio. O erro 145 pode ocorrer se uma ordem pendente (em um caso comum, pode ser uma ordem de parada de uma ordem de mercado) estiver muito próxima do preço de mercado. Este erro não ocorre, se você está negociando firmemente em um mercado calmo. Se os preços mudam rapidamente, seu corretor pode decidir que uma determinada ordem será aberta em breve, de modo que o corretor não permitirá excluí-la ou modificá-la. Este erro é considerado no script como um crítico e resulta em encerramento do programa (não faz qualquer sentido para incomodar o corretor com pedidos de comércio). Se o preço mudar depois de um tempo, você pode tentar excluir a ordem, iniciando o script para execução novamente. Geralmente, a ocorrência do erro 145 pode ser evitada, se você considerar o nível de congelamento definido pelo centro de negociação. O nível de congelamento é um valor que determina a faixa de preço, dentro da qual a ordem é considerada congelada, ou seja, pode ser proibido excluí-la. Por exemplo, se uma ordem pendente for colocada em 1.2500 eo nível de congelamento for igual a 10 pontos, isso significa que, se o preço varia de 1.2490 a 1.2510, a exclusão da ordem pendente é proibida. Você pode obter o valor de nível de congelamento tendo executado a função MarketInfo () com o identificador de solicitação de MODEFREEZELEVEL. Encerrar ordens opostas Ordem oposta (contra) é uma ordem de mercado aberta na direção oposta à direção de outra ordem de mercado aberta para o mesmo símbolo. Se você tiver duas ordens opostas para um determinado símbolo, você pode fechá-las simultaneamente, uma por outra, usando a função OrderCloseBy (). Você salvará uma propagação se você executar tal operação. Função OrderCloseBy () A função fecha uma ordem de mercado por outra ordem de mercado aberta para o mesmo símbolo na direção oposta. A função retorna TRUE, se for concluída com êxito, e FALSE, se não. Bilhete - o número único da ordem a ser fechado. Oposto - o número único da ordem oposta. Cor - a cor da seta de fechamento em um gráfico. Se esse parâmetro não estiver disponível ou seu valor for igual ao de CLRNONE, a seta não será exibida no gráfico. Não é necessário que ordens opostas tenham o mesmo volume. Se você fechar uma ordem por uma ordem oposta, a negociação será realizada no volume da ordem que tiver o menor volume. Vamos considerar um exemplo. Que haja duas ordens de mercado do mesmo volume no terminal do cliente, uma compra e uma venda. Se fecharmos cada um deles separadamente usando a função OrderClose (), nossa saída econômica será a soma dos lucros obtidos de cada ordem: Fig. 95. Resultado do fechamento separado de ordens usando a função OrderClose (). No entanto, se usarmos nessa situação a função OrderCloseBy () destinada ao fechamento oposto de ordens, a saída econômica será melhor (em comparação com a alternativa anterior) pela quantidade proporcional ao custo de um spread de ordens: 96. Resultado do fechamento de pedidos por outros pedidos usando a função OrderCloseBy (). É óbvio que, se houver ordens opostas a serem fechadas no terminal, seria economicamente correto usar a função OrderCloseBy (), não OrderClose (). Quanto à economia de um spread no fechamento de ordens opostas, devemos dar algumas explicações mais gerais. De fato, abrir uma ordem (por exemplo, uma ordem de compra) é implicitamente um negócio que é oposto à abertura de uma ordem na direção oposta (isto é, uma ordem de venda) ao mesmo grau que o fechamento da ordem ordem). Em outras palavras, é economicamente o mesmo que as alternativas a usar: apenas para fechar uma ordem de mercado ou para abrir uma ordem oposta do mesmo volume (e depois fechar ambas as ordens umas das outras). A diferença entre estas duas alternativas pode consistir apenas em métodos diferentes usados ​​em diferentes centros de negociação para calcular o dinheiro a ser desviado para suportar ordens de mercado (ver Fig. 85 e Fig. 88). Também é fácil ver que o preço de fechamento não é necessário ser especificado na função OrderCloseBy () para fechamento de ordens opostas. É desnecessário, porque o lucro ea perda de duas ordens opostas compensam mutuamente, de modo que a produção econômica total não depende do preço de mercado. É claro que esta regra é eficaz apenas para ordens do mesmo volume. Se, por exemplo, tivermos duas ordens para um símbolo: uma ordem de compra de 1 lote e uma ordem de venda de 0,7 lote, essa negociação depende apenas do preço de mercado relacionado à parte da ordem de compra de 0,3 lote, enquanto 0,7 lote de Ambas as ordens não dependem do preço do símbolo. Ordens opostas não influenciam os resultados totais de negociação. É por isso que as táticas de negociação baseadas na abertura de ordens opostas não têm qualquer conteúdo informal (por esta razão, alguns centros de negociação obrigatoriamente fechar quaisquer ordens opostas dentro dos montantes coincidentes de lotes). A única influência (negativa) dessas táticas pode consistir na desviação de dinheiro de acordo com as regras aceitas em alguns centros de negociação. Além disso, a disponibilidade de várias ordens opostas fornece mais dificuldades no contexto da negociação programada do que uma ordem. Se considerarmos várias comissões e swaps (para cada ordem de mercado separadamente), a necessidade de fechar ordens opostas torna-se óbvia. Um exemplo de um script simples que fecha todas as ordens opostas para um símbolo (closeby. mq4). O algoritmo do script acima é um pouco diferente do que os precedentes. Esta diferença consiste em que o mesmo código deve ser executado muitas vezes, a fim de fechar várias ordens (a quantidade de ordens a ser fechado em não limitado) com êxito. O script foi testado em um conjunto aleatório de ordens de mercado. 5 ordens de volumes diferentes são representadas na Fig. 97 abaixo. Para fechar as ordens opostas disponíveis, devemos predefinir os critérios de seleção. Este critério no dado algoritmo é o tamanho da ordem - as ordens de volumes maiores são fechadas primeiro, então as ordens de volumes menores são fechadas. Depois que as ordens opostas de volumes diferentes foram fechadas, as ordens dos volumes de descanso permanecem. Por exemplo, o fechamento de pedidos opostos Compra (1 lote) e Venda (0,8 lote) resultará em que a ordem Comprar (0,2 lote) permanece aberto. É por isso que, após cada encerramento bem sucedido, o programa deve consultar a lista atualizada de pedidos para encontrar duas outras ordens opostas maiores nesta lista atualizada. Os cálculos acima são realizados num ciclo contínuo (condicional) enquanto que, nos blocos 2-10. O início do ciclo, em cada iteração o programa supõe que não há mais ordens de um certo tipo. Para isso, o valor de -1 é atribuído às variáveis ​​HedgBuy e HedgSell. O algoritmo do bloco de processamento de ordens é, em geral, preservado (ver o código de closeby. mq4). No ciclo de busca de pedidos, ou seja, no bloco 3-4, como nos programas anteriores, as ordens de ordem são filtradas. Neste caso, são ordens abertas para outro símbolo e ordens pendentes. No bloco 4-5, o volume de cada ordem verificada no bloco 3-4 é calculado. Se durante os cálculos verificar que a ordem atualmente processada é a maior em volume entre todos os pedidos processados, seu ticket é armazenado. Isto significa que a ordem que tem este bilhete é, nesta fase de cálculos, um candidato para o fechamento de ordens opostas. No momento em que a última iteração do ciclo para acabamentos, os ingressos de encomendas com quantidade máxima de lotes abertos em direções opostas já foram conhecidos. Essas ordens são selecionadas pelo programa. Se quaisquer ordens de qualquer tipo já estiverem indisponíveis por este momento, o bloco 5-6 sai do programa. O bloco 6-10 representa o processamento de erros. É completamente o mesmo que aqueles considerados acima (neste e nas seções precedentes). O pedido de comércio para fechamento de ordens opostas é formado no bloco 7-8 usando a função OrderCloseBy (). If it fails, according to the error code, the program passes the control either to retry making the trade (for the same tickets) or to the operator return that ends the program operations. If a trade is successfully performed, the program exits the error-processing block, and the current iteration of the most external cycle while will end. the next iteration of this cycle, all calculations will be repeated: searching in the orders available, selecting market orders, selected one ticked for each of order types, forming a trade request for opposite closing, and subsequent error analyzing. This cycle is executed until there are no available orders of a certain type (or, in a particular case, of both types) in the terminal. This event will be calculated in block 5-6, then the program ends its operations. The following messages were received at the execution of the script closeby. mq4 intended for closing of market orders shown in Fig. 97: On the quotAccount Historyquot tab of the quotTerminalquot window, you can see that some orders are closed with a zero profit. This is what we save when closing opposite orders. You can compare economic results in Fig. 97 and Fig. 99: On the quotJournalquot tab in the quotTerminalquot window, you can track the history of order closing (the latest events are on top): the execution of the script, according to the algorithm, the orders of maximum volume available at the moment will be closed. In spite of the fact that the orders were opened in a random sequence (Fig. 97), the first orders to be closed were Buy 778594 and Sell 778595, with the volumes of 1 lot and 0.8 lot, respectively (the lower lines in Fig. 100). Since these orders have different volumes, the opposite closing produced a new order, Buy 778597, with the resting volume of 0.2 lot. Then the program selected orders Buy 778592 and Sell 778593, 0.5 lot each, to be closed as opposite orders. These orders were closed without opening a resting order. By the moment the third iteration started, two orders had remained in the symbol window in the external cycle: initial order Sell 778596 of 0.3 lot and the order opened as a result of the execution of the script, Buy 778597 of 0.2 lot. In the upper lines of Fig. 100, you can see that those orders are also closed as opposite orders. The volumes of those orders were different, so the last trade resulted in that one market order of 0.1 lot remained in the symbol window (please note the economic results): It is convenient to use the script closeby. mq4 in manual trading, especially in cases of many differently-directed market orders available in the symbol window.

No comments:

Post a Comment