Tudo sobre Arquitetura de Robôs - página 6

 
Aryel Marques:

Reformulada;

Alguém pode me ajudar com o trecho do código onde o EA faz saída parcial em conta HEDGE?

Consegui, tem que usar a função PositionClosePartial para realizar saída parcial na conta HEDGING.
 

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

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:

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ô.


 

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


 
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.
Razão: