Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Biblioteca de E-mail SMTP - biblioteca para MetaTrader 5
- Visualizações:
- 1812
- Avaliação:
- Publicado:
- 2016.12.27 09:12
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Esta biblioteca é projetado para enviar mensagens de e-mail
Conjunto de funções que amplia as possibilidades do tradicional SendMail. Agora você pode enviar mensagens tanto em formatos de texto quanto HTML. As mensagens podem ser enviadas para vários destinatários. Você pode anexar um ou vários arquivos ao seu e-mail. SSL é suportado.
O código-fonte da DLL está escrito em Delphi XE4 usando a biblioteca Indy.
Além dos arquivos do projeto, você deve instalar a biblioteca OpenSSL.
Lista de funções da biblioteca:
Função | Descrição |
---|---|
MailConnect | Conecta com servidor de e-mail |
MailSendText | envia textos |
MailSendHtml | Envia mensagens em HTML |
MailSendInlineTextFile | Envia mensagens com o conteúdo inserido em um arquivo de texto |
MailSendInlineHtmlFile | Envia mensagens com o conteúdo inserido em um arquivo HTML |
MailErrorDescription | Traz a descrição do erro de volta |
MailClose | Encerra a conexão com o servidor de e-mail |
Mensagens de erro:
Constante | Valor | Descrição |
---|---|---|
MAIL_NO_CONNECTION | -2 | sem conexão |
MAIL_NO_INITIALIZATION | -1 | nenhum objeto para o servidor SMTP |
MAIL_NO_ERROR | 0 | nenhum erro |
MAIL_TIMEOUT | 1 | conexão fechada devido ao tempo ter sido excedido |
MAIL_WRONG_LOGIN | 2 | login/senha errado |
MAIL_WRONG_HOST_NAME | 3 | nome do host errado |
MAIL_HOST_NOT_FOUND | 60 | host não foi encontrado |
Exemplo do Script:
//+------------------------------------------------------------------+ //| MailSend.mq5 | //| avoitenko | //| https://www.mql5.com/en/users/avoitenko | //+------------------------------------------------------------------+ #property copyright "avoitenko" #property link "https://www.mql5.com/en/users/avoitenko" #property version "1.00" #property script_show_inputs #include <Trade\Trade.mqh> #include <Arrays\ArrayString.mqh> #include <SmtpMailLibrary.mqh> //+------------------------------------------------------------------+ //| ENUM_MESSAGE | //+------------------------------------------------------------------+ enum ENUM_MESSAGE { MESSAGE_TEXT, // texto MESSAGE_HTML, // html MESSAGE_INLINE_TEXT, // texto em linha MESSAGE_INLINE_HTML // html em linha }; //+------------------------------------------------------------------+ //| Parâmetros de entrada | //+------------------------------------------------------------------+ input string mail_options="=== Mail Options ==="; // Opcões do e-mail input string InpMailHost="smtp.gmail.com"; // Host input int InpMailPort=465; // Porta input string InpMailUser="user@gmail.com"; // Usuário input string InpMailPassword="password"; // Senha input string InpMailFrom=""; // De (texto) input string InpMailSubject="Smtp Mail Library"; // Assunto (text) input string InpMailTo="user@ukr.net"; // E-mail para input uint InpMailConnectionTimeout=5000; // Tempo limite de conexão, msec input string msg_options="=== Opções de Mensagem ==="; // Opções de Mensagem input ENUM_MESSAGE InpMessageType=MESSAGE_HTML; // Tipo input string InpMessageAttachmentFiles="d:\\Temp\\dollar.bmp;d:\\Temp\\euro.bmp";// Arquivos Anexos input string InpMessageInlineFiles="d:\\Temp\\ReportTester-20066082.html";// Arquivos em linha //+------------------------------------------------------------------+ //| Script da função de início do programa | //+------------------------------------------------------------------+ void OnStart() { long smtp=0;//inicializar //--- conexão int err=MailConnect(smtp,InpMailHost,InpMailPort,InpMailUser,InpMailPassword,InpMailConnectionTimeout); if(err!=0) { Print("MailConnect erro: ",MailErrorDescription(err)); return; } switch(InpMessageType) { //--- case MESSAGE_TEXT: { //--- texto simples string text=StringFormat("Account: %d\r\nBalance: %.2f %s",AccountInfoInteger(ACCOUNT_LOGIN),AccountInfoDouble(ACCOUNT_BALANCE),AccountInfoString(ACCOUNT_CURRENCY)); //--- enviar e-mail para si mesmo err=MailSendText(smtp,InpMailUser,InpMailFrom,InpMailSubject,text,InpMessageAttachmentFiles); if(err!=0) Print("MailSendText error: ",MailErrorDescription(err)); else PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailUser); //--- Enviar e-mail para MailTo err=MailSendText(smtp,InpMailTo,InpMailFrom,InpMailSubject,text,InpMessageAttachmentFiles); if(err!=0) Print("MailSendText error: ",MailErrorDescription(err)); else PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo); } break; //--- case MESSAGE_HTML: { //--- construção html string html=BuildReport(); //--- enviar html err=MailSendHtml(smtp,InpMailTo,InpMailFrom,InpMailSubject,html,""); if(err!=0) Print("MailSendText error: ",MailErrorDescription(err)); else PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo); } break; //--- case MESSAGE_INLINE_TEXT: { err=MailSendInlineTextFile(smtp,InpMailTo,InpMailFrom,InpMailSubject,InpMessageInlineFiles); if(err!=0) Print("MailSendText error: ",MailErrorDescription(err)); else PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo); } break; //--- case MESSAGE_INLINE_HTML: { err=MailSendInlineHtmlFile(smtp,InpMailTo,InpMailFrom,InpMailSubject,InpMessageInlineFiles); if(err!=0) Print("MailSendText error: ",MailErrorDescription(err)); else PrintFormat("Program '%s' has sent mail to '%s'",MQLInfoString(MQL_PROGRAM_NAME),InpMailTo); } break; } //--- encerra a conexão MailClose(smtp); } //+------------------------------------------------------------------+ //| BuildReport | //+------------------------------------------------------------------+ string BuildReport() { CArrayString html; //--- html.Add("<html><head><title>Report</title>"); html.Add("<meta name=\"format-detection\" content=\"telephone=no\">"); html.Add("<style type=\"text/css\" media=\"screen\">"); html.Add("<!--"); html.Add("td{font: 8pt Tahoma,Arial;}"); html.Add("//-->"); html.Add("</style>"); html.Add("<style type=\"text/css\" media=\"print\">"); html.Add("<!--"); html.Add("td{font: 7pt Tahoma,Arial;}"); html.Add("//-->"); html.Add("</style>"); html.Add("</head>"); html.Add("<body topmargin=1 marginheight=1> <font face=\"tahoma,arial\" size=1>"); html.Add("<div align=center>"); html.Add(StringFormat("<div style=\"font: 18pt Times New Roman\"><b>%s</b></div>",AccountInfoString(ACCOUNT_SERVER))); html.Add("<table cellspacing=1 cellpadding=3 border=0>"); //--- html.Add("<tr>"); html.Add(StringFormat("<td colspan=2>A/C No: <b>%d</b></td>",AccountInfoInteger(ACCOUNT_LOGIN))); html.Add(StringFormat("<td colspan=6>Name: <b>%s</b></td>",AccountInfoString(ACCOUNT_NAME))); html.Add("<td colspan=2> </td>"); html.Add(StringFormat("<td colspan=2 align=right>%s</td>",TimeToString(TimeCurrent()))); html.Add("</tr>"); //--- html.Add("<tr>"); html.Add("<td colspan=13><b>Open Trades:</b></td>"); html.Add("</tr>"); //--- html.Add("<tr align=center bgcolor=\"#C0C0C0\">"); html.Add("<td>Ticket</td>"); html.Add("<td nowrap>Open Time</td>"); html.Add("<td>Type</td>"); html.Add("<td>Size</td>"); html.Add("<td>Symbol</td>"); html.Add("<td>Price</td>"); html.Add("<td>S/L</td>"); html.Add("<td>T/P</td>"); html.Add("<td>Price</td>"); html.Add("<td nowrap>Commission</td>"); html.Add("<td>Swap</td>"); html.Add("<td>Profit</td>"); html.Add("</tr>"); //--- double profit=0.0; int total=PositionsTotal(); if(total == 0) { html.Add("<tr align=right><td colspan=13 nowrap align=center>No transactions</td></tr>"); } else { CPositionInfo m_position; for(int i=0; i<total; i++) { m_position.SelectByIndex(i); //--- cor if((i&1)==0)html.Add("<tr align=right>"); else html.Add("<tr bgcolor=#E0E0E0 align=right>"); //--- dados html.Add(StringFormat("<td>%d</td>",m_position.Identifier())); html.Add(StringFormat("<td> %s</td>",TimeToString(m_position.Time()))); if(m_position.PositionType()==POSITION_TYPE_BUY) html.Add("<td>buy</td>"); else html.Add("<td>sell</td>"); html.Add(StringFormat("<td>%.2f</td>",m_position.Volume())); html.Add(StringFormat("<td>%s</td>",m_position.Symbol())); html.Add(StringFormat("<td>%.5f</td>",m_position.PriceOpen())); html.Add(StringFormat("<td>%.5f</td>",m_position.StopLoss())); html.Add(StringFormat("<td>%.5f</td>",m_position.TakeProfit())); html.Add(StringFormat("<td>%.5f</td>",m_position.PriceCurrent())); html.Add(StringFormat("<td>%.2f</td>",m_position.Commission())); html.Add(StringFormat("<td>%.2f</td>",m_position.Swap())); html.Add(StringFormat("<td>%.2f</td>",m_position.Profit())); html.Add("</tr>"); //--- profit+=m_position.Profit(); } } //--- html.Add("<tr>"); html.Add(StringFormat("<td colspan=2><b>Balance: %.2f</b></td>",AccountInfoDouble(ACCOUNT_BALANCE))); html.Add(StringFormat("<td colspan=5><b>Equity: %.2f</b></td>",AccountInfoDouble(ACCOUNT_EQUITY))); html.Add("<td colspan=3><b>Floating P/L:</b></td>"); html.Add(StringFormat("<td colspan=4 align=right><b>%.2f</b></td>",profit)); html.Add("</tr>"); //--- html.Add("</table></div></font></body></html>"); //--- Salva em uma única string string result=""; total=html.Total(); for(int i=0;i<total;i++) result+=html.At(i); //--- feito return(result); } //+------------------------------------------------------------------+
Resultados:
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/11466
Mostra o aspecto de dois planetas, a declinação dos planetas ou apenas a posição do corpo.
FxTrend 25EMAFxTrend 25EMA é baseado na diferença do valor de EMA de 25 durante dois momentos diferentes.
Este EA pode ser executado em todos os Símbolos e tempo gráficos, ele usa o cruzamento de duas Médias Móveis Lineares como sinal e uma Média Móvel Exponencial como Stop Móvel.
Módulo de Stop Móvel Baseado no Delta ZigZagO módulo de Stop Móvel das posições em aberto com base no Delta ZigZag para o Assistente MQL5.