Escolar Documentos
Profissional Documentos
Cultura Documentos
//| 9_1.mq5 |
//| DevTrader |
//| medium.com/devtrader |
//| Setup 9.1 criado por Larry Williams |
//+------------------------------------------------------------------+
#property copyright "@DevTrader"
#property link "medium.com/devtrader"
#property version "1.0"
#include <Trade/SymbolInfo.mqh>
// Identificador do EA
int magic_number = 1234;
if(!simbolo.Name(_Symbol))
{
Print("Erro ao carregar o ativo.");
return INIT_FAILED;
}
handle_media = iMA(_Symbol, TimeFrame, Media, 0, MODE_EMA, PRICE_CLOSE);
if (handle_media < 0)
{
Print("Erro ao inicializar a média móvel.");
return INIT_FAILED;
}
ultimo_sinal = NULO;
return(INIT_SUCCEEDED);
if(novo_candle)
{
}
}
//Se houver posição aberta e um sinal na posição contrária for lançado o stop loss
da posição aberta é alterado
void CheckPosicaoAberta(ENUM_SINAL sinal)
{
if (IsPosicionado())
{
if ((IsComprado() && sinal == VENDA) || (IsVendido() && sinal == COMPRA))
AlterarStopLoss(sinal);
}
}
//Se houver ordem aberta e um sinal na posição contrária for lançado a ordem é
fechada imediatamente
void CheckOrdemAberta(ENUM_SINAL sinal)
{
if (IsOrdemLancada())
{
if ((IsOrdemCompra() && sinal == VENDA) || (IsOrdemVenda() && sinal ==
COMPRA))
Fechar();
}
}
//Se estiver no horário permitido para novas entradas e não houver posição aberta
//É lançada uma nova ordem de entrada na superação do candle de sinal
void CheckNovaEntrada(ENUM_SINAL sinal)
{
if (IsHorarioPermitido() && !IsPosicionado())
{
if (ultimo_sinal == VENDA && sinal == COMPRA)
{
bool op = Comprar();
if (op)
ultimo_sinal = COMPRA;
}
else if (ultimo_sinal == COMPRA && sinal == VENDA)
{
bool op = Vender();
if (op)
ultimo_sinal = VENDA;
}
}
}
//Se o horário limite para operações abertas foi alcançado, todas as ordens e
operações abertas são fechadas imediatamente
void CheckHorarioFechamento()
{
if(IsHorarioFechamento())
{
if(IsPosicionado() || !IsOrdemLancada()) {
Print("Horário limite atingido. Encerrando ordens e posições abertas");
Fechar();
}
}
}
return false;
}
if (hora_atual.hour == hora_inicial.hour)
{
if (hora_atual.min >= hora_inicial.min)
return true;
else
return false;
}
if (hora_atual.hour == hora_final.hour)
{
if (hora_atual.min <= hora_final.min)
return true;
else
return false;
}
return true;
}
return false;
}
return false;
}
MqlRates mrate[];
ArraySetAsSeries(mrate,true);
CopyRates(_Symbol,TimeFrame,0,2,mrate);
MqlDateTime time;
TimeToStruct(lastbar_time, time);
return false;
}
ZerarRequest();
request.action = TRADE_ACTION_PENDING;
request.magic = magic_number;
request.symbol = _Symbol;
request.volume = Volume;
request.price = preco_entrada;
request.sl = stop_loss;
request.tp = take_profit;
request.type = ORDER_TYPE_BUY_STOP;
request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
request.comment = "Compra";
return EnviarRequisicao();
ZerarRequest();
request.action = TRADE_ACTION_PENDING;
request.magic = magic_number;
request.symbol = _Symbol;
request.volume = Volume;
request.price = preco_entrada;
request.sl = stop_loss;
request.tp = take_profit;
request.type = ORDER_TYPE_SELL_STOP;
request.type_filling = ORDER_FILLING_RETURN;
request.type_time = ORDER_TIME_DAY;
request.comment = "Venda";
return EnviarRequisicao();
FecharPosicao();
}
request.action = TRADE_ACTION_REMOVE;
request.order = ticket;
request.comment = "Removendo ordem";
EnviarRequisicao();
}
}
}
}
ZerarRequest();
request.action = TRADE_ACTION_DEAL;
request.magic = magic_number;
request.symbol = _Symbol;
request.volume = volume_operacao;
request.type_filling = ORDER_FILLING_RETURN;
request.comment = "Fechando posição";
if(tipo == POSITION_TYPE_BUY)
{
request.price = simbolo.Bid();
request.type = ORDER_TYPE_SELL;
}
else
{
request.price = simbolo.Ask();
request.type = ORDER_TYPE_BUY;
}
EnviarRequisicao();
}
//Altera o stop loss de uma posição aberta para o novo ponto de saída
bool AlterarStopLoss(ENUM_SINAL sinal)
{
if(!PositionSelect(_Symbol))
return false;
double novo_alvo = simbolo.NormalizePrice(GetPrecoEntrada(sinal));
ZerarRequest();
request.action = TRADE_ACTION_SLTP;
request.magic = magic_number;
request.symbol = _Symbol;
request.sl = novo_alvo;
request.position = PositionGetInteger(POSITION_TICKET);
request.comment = "Alterando Stop Loss";
request.type_time = ORDER_TIME_DAY;
return EnviarRequisicao();
PrintFormat("Request - %s, VOLUME: %.0f, PRICE: %.2f, SL: %.2f, TP: %.2f",
request.comment, request.volume, request.price, request.sl, request.tp);
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d - Código: %d", GetLastError(),
check_result.retcode);
return false;
}
if(!OrderSend(request, result))
{
PrintFormat("Erro em OrderSend: %d - Código: %d", GetLastError(),
result.retcode);
return false;
}
return true;
}
return NULO;
}
if (sinal == COMPRA)
return rate[1].high;
if (sinal == VENDA)
return rate[1].low;
return -1;
}
if (sinal == COMPRA)
return rate[1].low;
if (sinal == VENDA)
return rate[1].high;
return -1;
}