#define DEVIATION 5 // desvio permitido do preço
#define VOLUME 1.0 // // volume da ordem
#define EXPERT_MAGIC 123 // MagicNumber
#define DIRECTION ORDER_TYPE_BUY // direção da posição aberta (ORDER_TYPE_BUY ou ORDER_TYPE_SELL)
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- declaração e inicialização das estruturas de solicitação, verificação e resultado
MqlTradeRequest request={};
MqlTradeCheckResult check ={};
MqlTradeResult result ={};
//--- preparamos os parâmetros da solicitação de negociação
PrepareRequest(_Symbol, DIRECTION, VOLUME, request);
//--- verificamos os parâmetros da solicitação de negociação
ResetLastError();
bool res=OrderCheck(request, check);
if(!res)
{
PrintFormat("Trade request verification completed with error %d\nServer retcode: %u, comment: %s", GetLastError(), check.retcode, check.comment);
return;
}
//--- a verificação da solicitação de negociação foi bem-sucedida, imprimimos no log a descrição dos campos da estrutura de verificação da solicitação de negociação
Print("Trade request verification completed successfully");
MqlTradeCheckResultPrint(check, 14);
//--- envio da solicitação de negociação
if(!OrderSend(request, result))
Print("OrderSend error ", GetLastError()); // se não for possível enviar a solicitação, imprimimos o código de erro
//--- informações sobre a operação
PrintFormat("Trade request result: retcode=%u, deal=%I64u, order=%I64u", result.retcode, result.deal, result.order);
/*
resultado com a negociação automática desativada no terminal do cliente:
Trade request verification completed with error 4752
Server retcode: 10027, comment: AutoTrading disabled by client
ativamos a negociação automática e verificamos novamente no mercado fechado:
Experts automated trading is enabled
Trade request verification completed successfully
Retcode: 0
Balance: 10779.50 USD
Equity: 10779.50 USD
Profit: 0.00 USD
Margin: 1104.79 USD
Margin free: 9674.71 USD
Margin level: 975.71 %
Comment: Done
OrderSend error 4756
Trade request result: retcode=10018, deal=0, order=0
verificamos no mercado aberto:
Trade request verification completed successfully
Retcode: 0
Balance: 10779.50 USD
Equity: 10779.50 USD
Profit: 0.00 USD
Margin: 110.46 USD
Margin free: 10669.04 USD
Margin level: 9758.74 %
Comment: Done
Trade request result: retcode=10009, deal=2777010968, order=2802818813
*/
}
//+------------------------------------------------------------------+
//| Preparação de parâmetros para a solicitação de negociação |
//+------------------------------------------------------------------+
void PrepareRequest(const string symbol, const ENUM_ORDER_TYPE order_type, const double volume, MqlTradeRequest &request)
{
ENUM_ORDER_TYPE type=(DIRECTION !=ORDER_TYPE_BUY ? ORDER_TYPE_SELL : DIRECTION);
double price=(DIRECTION==ORDER_TYPE_BUY ? SymbolInfoDouble(Symbol(), SYMBOL_ASK) : SymbolInfoDouble(Symbol(), SYMBOL_BID));
//--- parâmetros da solicitação
request.action = TRADE_ACTION_DEAL; // tipo de operação de negociação
request.symbol = symbol; // símbolo
request.volume = volume; // volume
request.type = type; // tipo de ordem
request.price = price; // preço para abertura
request.deviation = DEVIATION; // desvio permitido em relação ao preço
request.magic = EXPERT_MAGIC; // MagicNumber da ordem
}
//+------------------------------------------------------------------+
//| Imprime no log os campos da estrutura |
//| do resultado da verificação da solicitação de negociação |
//+------------------------------------------------------------------+
void MqlTradeCheckResultPrint(const MqlTradeCheckResult &check, const uint header_width=0)
{
//--- obtemos a moeda da conta e o número de dígitos após a vírgula para a moeda da conta
string currency=AccountInfoString(ACCOUNT_CURRENCY);
int digits =(int)AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
//--- definimos o texto do cabeçalho e a largura do campo de cabeçalho
//--- se a largura do cabeçalho for passada para a função igual a zero, a largura será o tamanho da linha do cabeçalho + 1
string header="Retcode:";
uint w=(header_width==0 ? header.Length()+1 : header_width);
//--- imprimimos no log o código de retorno com um cabeçalho de largura definida
PrintFormat("%-*s%-u", w, header, check.retcode);
//--- imprimimos no log o valor do saldo que estará disponível após a execução da operação de negociação
header="Balance:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-.*f %s", w, header, digits, check.balance, currency);
//--- imprimimos no log o valor dos fundos próprios que estarão disponíveis após a execução da operação de negociação
header="Equity:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-.*f %s", w, header, digits, check.equity, currency);
//--- imprimimos no log o valor do lucro flutuante que estará disponível após a execução da operação de negociação
header="Profit:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-.*f %s", w, header, digits, check.profit, currency);
//--- imprimimos no log o tamanho da margem necessária para a operação de negociação requerida
header="Margin:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-.*f %s", w, header, digits, check.margin, currency);
//--- imprimimos no log o valor dos fundos próprios disponíveis que permanecerão após a execução da operação de negociação necessária
header="Margin free:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-.*f %s", w, header, digits, check.margin_free, currency);
//--- imprimimos no log o nível de margem que será estabelecido após a execução da operação de negociação necessária
header="Margin level:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-.2f %%", w, header, check.margin_level);
//--- imprimimos no log o comentário sobre o código de resposta, descrição do erro
header="Comment:";
w=(header_width==0 ? header.Length()+1 : header_width);
PrintFormat("%-*s%-s", w, header, check.comment);
}
|