Sim, William. Quando uma ordem é totalmente executada, ela some do OrdersTotal() e se torna uma "position" (ou o volume executado se
soma à "position" já existente, caso seja uma conta netting e vc já tenha posição no mesmo ativo).
obs: se ela for apenas parcialmente executada, ela ainda continua no OrdersTotal() com status ORDER_STATE_PARTIAL e o volume
parcial que foi executado se torna "position" (ou se soma à posição previamente existente do mesmo ativo, se for conta netting).
Esse processo de varrer todas as ordens pendentes para em seguida cancelar todas e substituir por 1 única ordem precisa ser
implementado com bastante cuidado para cobrir todas as possíveis situações de exceção.
O motivo é que, por não se tratar de uma operação "atômica" (executada de uma vez só), pode acontecer de uma ou mais dentre as ordens
pendentes serem executadas em algum momento durante o processo (por exemplo: entre a leitura das ordens e o cancelamento das
mesmas, ou entre o cancelamento e o envio da nova ordem).
Você precisa, por exemplo, antes de enviar a nova ordem, verificar se todas as ordens anteriores foram realmente canceladas antes de
serem executadas, ou se alguma eventualmente foi executada (no todo ou em parte) antes do pedido de cancelamento ser processado no
servidor MT5 da corretora e na bolsa. Caso alguma execução de ordem seja detectada, vc vai precisar recalcular o volume da nova
ordem antes de enviá-la.
Vale lembrar que não adianta otimizar o código pra fazer as coisas rápido, pois existe a latência da rede, que geralmente é bem maior
que o tempo de processamento: a informação que vc coletou sobre as ordens estará defasada de alguns centésimos de segundo e o envio
de solicitações de cancelamento e de novas ordens também só será processado alguns centésimos de segundo depois (isso se
o servidor MT5 não estiver congestionado naquele
momento e se a rede estiver muito boa entre e o seu terminal e a corretora e entre a corretora e a bolsa)... e nesses centésimos
de segundo, ordens pendentes podem ser executadas.
Se vc estiver usando uma corretora que não cobra corretagem (ou seja, se o seu custo operacional for apenas os custos da B3, que são
proporcionais ao volume negociado e independentes da quantidade de ordens executadas), talvez vc nem devesse se preocupar em
unificar as ordens. Vc pode, nesse caso, simplesmente modificar os preços de todas as ordens para o valor desejado (média, maior
valor, menor valor etc.), sem cancelar nenhuma ordem nem enviar nenhuma ordem nova.
Após varias tentativas de pesquisa na web nao encontrei o que estou precisando. Então venho pedir o auxílio de vcs. Estou precisando
incluir em meu EA um código que busque dois numeros em um site. Irei criar um site simples com dois campos para digitar dois numeros
que meu EA precisaria buscar para fazer calculos. Na prática ao inves de digitar nos parametros do robo ele mesmo iria buscar esses
números nesse site em questao. Aceito sugestões de como poderia fazer isso. Preciso que o valor que seja digitado seja buscado por
mais de um robo. Por isso pensei na possibilidade de fazer isso via site. Para que mais de uma pessoa tenha acesso.
Olá
Robson Ferreira, o ajuste de fuso horário é um problema
típico no uso do calendário econômico, com timezone próprio que pode mudar conforme a sua localização, portanto recomendo
colocar um parâmetro em seu EA com essa opção para não depender de ajustes remotos e permitir ajustes locais. Note que no próprio
site do calendário no MQL5 (
https://www.mql5.com/en/economic-calendar ) existe uma opção de ajuste da time zone. Sds., Rogério
Figurelli
Fiz um teste hoje para envio de ordens e retorna o erro 10006 (Request rejected).
Na aba diário, o MT5 retorna: "rejected sell stop 1.00 WINQ18 at 76160 (74635) sl: 76250 tp: 75975 (Expert not authorized!)"
Outro teste que fiz, foi com relação às flags da conta com o seguinte código:
printf("Terminal build: %s", IntegerToString(TerminalInfoInteger(TERMINAL_BUILD)));
printf("Terminal conectado: %s", GetTrueFalse(TerminalInfoInteger(TERMINAL_CONNECTED)));
printf("Permissão para usar DLL: %s", GetTrueFalse(TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)));
printf("Permissão para enviar e-mails: %s", GetTrueFalse(TerminalInfoInteger(TERMINAL_EMAIL_ENABLED)));
printf("Permissão para enviar relatórios via FTP: %s", GetTrueFalse(TerminalInfoInteger(TERMINAL_FTP_ENABLED)));
printf("Permissão para enviar notificações: %s", GetTrueFalse(TerminalInfoInteger(TERMINAL_NOTIFICATIONS_ENABLED)));
printf("Negociação permitida nesta conta: %s", GetTrueFalse(AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)));
printf("Auto trade habilitado (geral): %s", GetTrueFalse(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)));
printf("Auto trade habilitado (este robô): %s", GetTrueFalse(MQLInfoInteger(MQL_TRADE_ALLOWED)));
printf("Auto trade permitido nesta conta: %s", GetTrueFalse(AccountInfoInteger(ACCOUNT_TRADE_EXPERT)));
E o retorno foi:
Terminal build: 1881
Terminal conectado: TRUE
Permissão para usar DLL: TRUE
Permissão para enviar e-mails: FALSE
Permissão para enviar relatórios via FTP: FALSE
Permissão para enviar notificações: FALSE
Negociação permitida nesta conta: TRUE
Auto trade habilitado (geral): TRUE
Auto trade habilitado (este robô): TRUE
Auto trade permitido nesta conta: TRUE
Ou seja, me parece que o MT5 na Clear permite o uso de estratégias automatizadas, mas, somente com a autorização deles.
Provavelmente a liberação é pelo Magic Number do robô.
Olá
tito.vinicius, essa é uma das perguntas clássicas desse
fórum, e ler o artigo abaixo é minha recomendação para encontrares a melhor solução para isso.
Olá
sergiomt, a resposta é simples: você deve criar funções
próprias para analisar suas posições e ordens pendentes discriminadas por ativo e até mesmo por número mágico.
Para isso, recomendo o artigo seguinte, com vários exemplos nesse sentido: https://www.mql5.com/pt/articles/211 Minha
recomendação final é que, antes de você colocar um robô em conta real a partir do codebase, não esquecer que grande parte deles foi
desenvolvido para o mercado Forex, e com regras de segurança (quando existem) focadas nesse mercado, portanto é importante fazer
um checklist como em
https://www.mql5.com/pt/forum/23409 para evitar problemas na B3. Sds., Rogério
Figurelli
Olá pessoal, sou novo nesse negócio de robô, tenho um pela smarttbot e tem dado certo, mas pela instabilidade queria criar um com a mesma
CONFIGURAÇÃO, uso hilo e medias móveis, alguém pode me ajudar no passo a passo pelo meta trader!? Ficaria grato.
Reformulada;
Alguém pode me ajudar com o trecho do código onde o EA faz saída parcial em conta HEDGE?
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Qual função me retorna a existência de uma ordem já enviada e que ainda não foi executada
Trader_Patinhas, 2019.08.02 22:32
Sim, William. Quando uma ordem é totalmente executada, ela some do OrdersTotal() e se torna uma "position" (ou o volume executado se soma à "position" já existente, caso seja uma conta netting e vc já tenha posição no mesmo ativo).
obs: se ela for apenas parcialmente executada, ela ainda continua no OrdersTotal() com status ORDER_STATE_PARTIAL e o volume parcial que foi executado se torna "position" (ou se soma à posição previamente existente do mesmo ativo, se for conta netting).
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Unir mais de uma ordem de compra ou de venda em apenas uma ordem de compra ou venda
Trader_Patinhas, 2019.08.20 01:12
Esse processo de varrer todas as ordens pendentes para em seguida cancelar todas e substituir por 1 única ordem precisa ser implementado com bastante cuidado para cobrir todas as possíveis situações de exceção.
O motivo é que, por não se tratar de uma operação "atômica" (executada de uma vez só), pode acontecer de uma ou mais dentre as ordens pendentes serem executadas em algum momento durante o processo (por exemplo: entre a leitura das ordens e o cancelamento das mesmas, ou entre o cancelamento e o envio da nova ordem).
Você precisa, por exemplo, antes de enviar a nova ordem, verificar se todas as ordens anteriores foram realmente canceladas antes de serem executadas, ou se alguma eventualmente foi executada (no todo ou em parte) antes do pedido de cancelamento ser processado no servidor MT5 da corretora e na bolsa. Caso alguma execução de ordem seja detectada, vc vai precisar recalcular o volume da nova ordem antes de enviá-la.
Vale lembrar que não adianta otimizar o código pra fazer as coisas rápido, pois existe a latência da rede, que geralmente é bem maior que o tempo de processamento: a informação que vc coletou sobre as ordens estará defasada de alguns centésimos de segundo e o envio de solicitações de cancelamento e de novas ordens também só será processado alguns centésimos de segundo depois (isso se o servidor MT5 não estiver congestionado naquele momento e se a rede estiver muito boa entre e o seu terminal e a corretora e entre a corretora e a bolsa)... e nesses centésimos de segundo, ordens pendentes podem ser executadas.
Se vc estiver usando uma corretora que não cobra corretagem (ou seja, se o seu custo operacional for apenas os custos da B3, que são proporcionais ao volume negociado e independentes da quantidade de ordens executadas), talvez vc nem devesse se preocupar em unificar as ordens. Vc pode, nesse caso, simplesmente modificar os preços de todas as ordens para o valor desejado (média, maior valor, menor valor etc.), sem cancelar nenhuma ordem nem enviar nenhuma ordem nova.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
acessar dados de um site via mql5
PlinioPaiva2019, 2019.08.24 02:55
Meus carissimos,
Após varias tentativas de pesquisa na web nao encontrei o que estou precisando. Então venho pedir o auxílio de vcs. Estou precisando incluir em meu EA um código que busque dois numeros em um site. Irei criar um site simples com dois campos para digitar dois numeros que meu EA precisaria buscar para fazer calculos. Na prática ao inves de digitar nos parametros do robo ele mesmo iria buscar esses números nesse site em questao. Aceito sugestões de como poderia fazer isso. Preciso que o valor que seja digitado seja buscado por mais de um robo. Por isso pensei na possibilidade de fazer isso via site. Para que mais de uma pessoa tenha acesso.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Fuso horário do calendário econômico
Rogerio Figurelli, 2019.08.24 19:02
Olá Robson Ferreira, o ajuste de fuso horário é um problema típico no uso do calendário econômico, com timezone próprio que pode mudar conforme a sua localização, portanto recomendo colocar um parâmetro em seu EA com essa opção para não depender de ajustes remotos e permitir ajustes locais. Note que no próprio site do calendário no MQL5 ( https://www.mql5.com/en/economic-calendar ) existe uma opção de ajuste da time zone.
Sds.,
Rogério Figurelli
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
possivel pegar cor candle? (imovment.ex5)
Flavio Jarabeck, 2019.08.13 15:09
todas as cores residem no buffer #4. use o iCustom com o buffer certo e todas as cores estarão l;á...Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Robôs na corretora Clear
Gustavo Hennemann, 2018.08.13 15:24
Fiz um teste hoje para envio de ordens e retorna o erro 10006 (Request rejected).
Na aba diário, o MT5 retorna: "rejected sell stop 1.00 WINQ18 at 76160 (74635) sl: 76250 tp: 75975 (Expert not authorized!)"
Outro teste que fiz, foi com relação às flags da conta com o seguinte código:
E o retorno foi:
Ou seja, me parece que o MT5 na Clear permite o uso de estratégias automatizadas, mas, somente com a autorização deles. Provavelmente a liberação é pelo Magic Number do robô.
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Abrir nova posição apenas num novo Candle
Rogerio Figurelli, 2019.08.24 19:17
Olá tito.vinicius, essa é uma das perguntas clássicas desse fórum, e ler o artigo abaixo é minha recomendação para encontrares a melhor solução para isso.
https://www.mql5.com/pt/articles/159
Sds.,
Rogério Figurelli
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Dois EA´s, dois Profit´s
Rogerio Figurelli, 2019.08.24 19:24
Olá sergiomt, a resposta é simples: você deve criar funções próprias para analisar suas posições e ordens pendentes discriminadas por ativo e até mesmo por número mágico.
Para isso, recomendo o artigo seguinte, com vários exemplos nesse sentido: https://www.mql5.com/pt/articles/211
Minha recomendação final é que, antes de você colocar um robô em conta real a partir do codebase, não esquecer que grande parte deles foi desenvolvido para o mercado Forex, e com regras de segurança (quando existem) focadas nesse mercado, portanto é importante fazer um checklist como em https://www.mql5.com/pt/forum/23409 para evitar problemas na B3.
Sds.,
Rogério Figurelli