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

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Enviar e-maisl com formatação

Rogerio Figurelli, 2019.06.07 10:05

Olá André Barbisan, em tese realmente você só pode enviar textos sem formatação nenhuma, mas recomendo estudares a thread https://www.mql5.com/en/forum/123932 (em inglês) com uma solução de contorno usando uma aplicação relay SMTP (em http://www.blat.net/miniRelay/docs.html) para conseguir enviar HTML diretamente pelo SendMail().
Na prática, a solução de contorno faz uma mudança no header 'Content-Type' MIME form tipo 'text/plain' para tipo 'text/html', portanto tenha cuidado em fazer isso e também na validação de qualquer aplicação externa adicional, por sua conta e risco.
Sds.,
Rogério Figurelli


 

Artigos

Construindo uma Startup em Tecnologia Social, Parte II: Programando um cliente REST em MQL5

Jordi Bassaganas, 2014.09.01 16:15

Vamos agora dar forma a idéia do Twitter baseado em PHP que foi introduzido na primeira parte deste artigo. Nós estamos reunindo as diferentes partes do SDSS. Quanto a arquitetura do sistema pelo lado do cliente, nós estaremos contando com a nova função WebRequest() em MQL5 para o envio de sinais de negociação via HTTP.

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Enviar e-maisl com formatação

Rogerio Figurelli, 2019.06.07 15:50

Olá Joscelino Celso de Oliveira,
Concordo totalmente, e, nesse caso, sugiro manter uma função de rede como a SendMail(), mas fazendo diretamente uma solicitação na camada de aplicação web, através da função WebRequest() e chamando uma aplicação script (PHP, ASP, etc.), que irá enviar o e-mail ou até mesmo endereçar para um grupo de discussão, rede social, aplicativo de mensagens, torpedo, etc.
Sds.,
Rogério Figurelli


 
Integração da MetaTrader 5 e Python: recebendo e enviando dados
Integração da MetaTrader 5 e Python: recebendo e enviando dados
  • www.mql5.com
Um socket de rede é o ponto final da comunicação entre processos através de uma rede de computadores. A biblioteca padrão MQL5 inclui um grupo de funções Socket, que fornecem uma interface de baixo nível para trabalhar na Internet. Esta é uma interface comum para diferentes linguagens de programação, já ela que usa chamadas do sistema no nível...
 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Order close

Joscelino Celso de Oliveira, 2019.06.23 17:46

@danielg13,


Primeiramente, parece-me que você esta confundindo "ordens" com "posições".

Sugiro que você leia o artigo neste link.

Alem disso, sugiro que repense a abordagem durante a elaboração de seu código. Você relata que quer encerrar a  ordem ( o correto seria posição) apos atender determinada especificação. Que especificação? Se for lucro, o ideal usar ordem TP, se for prejuízo, SL. Se a especificação for horário, use o encerramento por posição (ou posição oposta). Para conta netting veja a documentação aqui e para conta hedge, neste link.

Outro ponto importante eh se a conta eh netting ou hedge (como ja observado pelo @Rodolpho Nogueira De Sousa). Se você usar o código da forma que esta fazendo em conta hedge vai acabar por abrir nova posição. Cuidado com isso e pense nestas coisas.

Percebo também que você não verifica o resultado da função OrderSend() e que não trata eventuais erros. Tenha atenção neste ponto!!!

Por fim, sugiro que estude a classe CTRADE. Vai facilitar sua vida.


[ ]'s


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Como utilizar dados de outros tempos gráficos no tempo atual?

Rogerio Figurelli, 2019.06.24 11:54

Olá  ericonunes, isso pode ser muito simples ou muito complexo, depende exatamente o que você está projetando. Mas se você vai ter esses parâmetros fixos (o muito simples), como parece o caso, basta que o EA ou Indicador utilizem funções que possuam parâmetros de timeframe e período para você selecionar o que deseja utilizar.
Por exemplo, se seu EA ou Indicador utilizar um indicador técnico nativo na plataforma, como o iRSI (https://www.mql5.com/pt/docs/indicators/irsi), você deverá ajustar os parâmetros abaixo:

int  iRSI( 
   string              symbol,            // símbolo nome 
   ENUM_TIMEFRAMES     period,            // período 
   int                 ma_period,         // período médio 
   ENUM_APPLIED_PRICE  applied_price      // tipo de preço ou manipulador 
   );

Evidentemente que pode fazer isso com vários indicadores ao mesmo tempo, mas tenha cuidado se estiver desejando mudar dinamicamente esses parâmetros (o muito complexo), principalmente no caso de indicadores.
Por exemplo, no meu caso específico, que trabalho com robôs focado em inteligência artificial, é muito comum fazer esse tipo de análise em múltiplos timeframes e períodos de forma dinâmica, o que permite analisar milhares ou até mesmo milhões de combinações em tempo real, mas aí o problema é bem mais complexo.
Dessa forma, minha recomendação é que comece pelo mais simples.
Sds.,
Rogério Figurelli


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Envio de Ordens

Rogerio Figurelli, 2019.06.24 12:18

Olá  Edilson Domingos, provavelmente seu "mais leve" seja o "mais simples", abstraindo detalhes de envio de ordens, etc., correto?
Se for esse o caso, recomendo estudares a classe CExpertSignal para criar sinais de negociação, que é muito utilizada pelo sistema wizard (veja aqui um bom artigo sobre isso).
Existe uma opção de desenvolvimento ainda "mais simples" que é acessar diretamente sinais externos, utilizando funções específicas para gerenciar esse tipo de sinal de negociação, mas aí você estará utilizando também estratégias externas, o que me parece o limite da simplicidade em termos de codificação de um robô ( se for esse o caso veja aqui as funções para isso).
E, se tudo isso ainda estiver complicado, uma opção do MQL5 é você contratar um freelance para desenvolver seu robô, que provavelmente irá utilizar a Ctrade para isso, voltando ao início da sua pergunta, o que, na minha opinião também apresenta riscos, principalmente no mercado B3, já que essa função foi desenvolvida essencialmente para Forex, e existem várias situações problemáticas que podem levar a grandes perdas se não forem protegidas ou no mínimo contornadas, certamente por um bom desenvolvedor. Mas, nesse caso, tenha em mente que todas as funções que estou sugerindo também estão passíveis de problemas similares, e recomendo sempre um checklist para avaliar todo o conjunto da obra ( veja aqui uma thread onde é tratado exatamente isso).
Sds.,
Rogério Figurelli


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Atualização de símbolos personalizados sintético

dvd, 2019.06.27 05:07

Você pode tentar a variante de CopyRates com datas.

int  CopyRates( 
   string           symbol_name,       // nome do ativo 
   ENUM_TIMEFRAMES  timeframe,         // período 
   datetime         start_time,        // data e hora de início 
   datetime         stop_time,         // data e hora de término 
   MqlRates         rates_array[]      // array destino para copiar 
   );

no lugar de: int recebido=CopyRates(_Symbol,PERIOD_M1,1,10000,Custom);

seria: int recebido=CopyRates(_Symbol,PERIOD_M1,inicio,fim,Custom);

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Como colocar um filtro de noticias em um ea grid?

Joscelino Celso de Oliveira, 2019.06.29 14:32

Você pode efetuar "raspagem de dados" e, dependendo de seus conhecimentos em big data e matemática, criar uma analise utilizando técnicas como " bag of words" e estatistica de Zipf. Acredito que o ideal seria desenvolver esta parte em Python e efetuar a comunicação com MT5 através de socket.

Por outro lado, voce pode ler esta thread e este artigo.

Seja qual for o caminho escolhido, terá um certo trabalho no desenvolvimento.


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Erro ao copiar DIDI index em um EA.

Rogerio Giannetti Torres, 2019.07.02 19:53

Boa tarde,

1) Use o ALT-S para postar códigos.

2) Você copiou sem procurar entender minha sugestão, entao:

2.1) O HANDLE dos indicadores  devem ser criados somente uma vez de prefêrencia no OnInit(), então retire a criação do HANDLE dentro do OnTick().  (*)

2.2) Teste o retorno da criação do HANDLE dos três.


3) Bom dia Rogerio, obrigado pela ajuda, mas ainda ha algo errado, me parece ser algo relacionado a inserção do indicador DIDI e a janela de visualização.

Se você acha que é isso por que não testou, ainda?

  if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("Falha para adicionar indicador MACD na janela do gráfico %d. Código de erro %d",
                  subwindow,GetLastError());
     }


3) Feito as alterações, compile e plugue o programa na janela gráfica e veja o resultado na aba EXPERTS.


(*) Nas situações que precisar criar o mesmo handle com novos operadores o handle corrente deve ser liberado usando o comando IndicatorRelease( handle );


Razão: