Trabalho concluído
Termos de Referência
Estou, no momento, estudando programação MQL5.
Entretanto, não estou conseguindo criar um EA usando o Buy_Stop que funcione para Dólar BMF.
Dessa forma, preciso de um EA com código aberto para que eu possa aprender.
Nesse EA, eu irei colocar a entrada manualmente, assim como o StopLoss e o TakeProfit.
Segue, a minha programação com erro na execução.
//+------------------------------------------------------------------+
//| OrdemPendente.mq5 |
//| AdoniasJr |
//| https://www.facebook.com/adoniasjr |
//+------------------------------------------------------------------+
#property copyright "AdoniasJr"
#property link "https://www.facebook.com/adoniasjr"
#property version "1.00"
//--- input parameters
input double quantidade=1.0;
input int high=3810; //Maior valor do candle anterior
input int low=3808; //Menor valor do candle anterior
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(5);
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
{
Alert("Verifique se a Negociação Automatizada está ligada!");
ExpertRemove();
}
else if(!MQLInfoInteger(MQL_TRADE_ALLOWED))
{
Alert("Verifique se a Negociação Automatizada está proibida nas opções do Expert Advisor: ",__FILE__);
ExpertRemove();
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
bool comprado = false;
void OnTimer()
{
//---
if(comprado == false)
{
comprado = true;
//ordem pendente
MqlTradeRequest requisicao;
ZeroMemory(requisicao);
requisicao.action = TRADE_ACTION_PENDING;
requisicao.symbol = Symbol();
requisicao.price = high; //Entrada no maior valor do candle anterior
requisicao.volume = quantidade;
requisicao.sl = low; //Saida com prejuizo no menor valor do candle anterior
requisicao.tp = high+(high-low); //Saida com lucro
requisicao.type = ORDER_TYPE_BUY_STOP;
requisicao.type_time = ORDER_TIME_DAY;
MqlTradeResult resultado;
ZeroMemory(resultado);
if(!OrderSend(requisicao,resultado))
{
Alert("Erro ao enviar Ordem na função: " + __FUNCTION__+". Último Erro: "+ GetLastError()+" Erro da variável resultado: "+ resultado.retcode);
}
Sleep(12*60*60*1000); // linha colocada para impedir a abertura de nova operação no prazo de 12 horas
}
}
//+------------------------------------------------------------------+