Escolar Documentos
Profissional Documentos
Cultura Documentos
Anao2 mq5
Anao2 mq5
//| Anao.mq5 |
//| Fernando Sousa |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Fernando Sousa"
#property link "https://www.mql5.com"
#property version "2.00"
#include <Trade\Trade.mqh>
//---
CTrade trade;
MqlBookInfo book[];
MqlTick tick;
MqlRates candle[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
MarketBookAdd(_Symbol);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
MarketBookRelease(_Symbol);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
MarketBookGet(_Symbol,book);
CopyRates(_Symbol,PERIOD_M1,0,5,candle);
ArraySetAsSeries(candle,true);
SymbolInfoTick(_Symbol, tick);
//---
if(tick.last==tick.ask) // Verifica se foi uma agressão de compra
{
Num_Vela_compra++;
volumeComprado += tick.volume_real;
}
}
}
if(VolVendVelaAtual>VolComprVelaAtual) //Condição de entrada na venda
{
if(DeltaPreco<0.0)
{
if(volumeVendido>volumeComprado)
{
VendaAMercado();
}
}
}
}
PMCAnterior = PMCompra;
PMVAnterior = PMVenda;
PMCompra = 0.0;
PMVenda = 0.0;
}
Num_Vela_compra = 0;
Num_Vela_vendas = 0;
}
}
//+------------------------------------------------------------------+
//+-----------------------------------------------------------------------------+
//| Retorna true se uma nova barra aparecer para um par de símbolos / períodos |
//+-----------------------------------------------------------------------------+
bool isNewBar()
{
//--- memorizar o tempo de abertura da última barra na variável estática
static datetime last_time=0;
//--- time atual
datetime
lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
if(trade.ResultRetcode() == 10009)
{
contaCompra++;
//numeroDeOperacoesDia++;
Print("Ordem de Compra executada com sucesso! Compras já executadas =", contaCompra);
PositionTick = PositionGetTicket(POSITION_TICKET);
}
else
{
Print("Erro ao enviar Ordem Compra. Erro = ", GetLastError());
ResetLastError();
}
}
//+------------------------------------------------------------------+
//| Função qde VENDA A MERCADO |
//+------------------------------------------------------------------+
void VendaAMercado()
{
trade.Sell(num_lots+acrescimo,_Symbol,tick.bid,0.0,tick.bid-3.0,"Venda a mercado");
//---
if(trade.ResultRetcode() == 10009)
{
contaVenda++;
//numeroDeOperacoesDia++;
Print("Ordem de Venda executada com sucesso! Vendas já executadas = ",contaVenda);
PositionTick = PositionGetTicket(POSITION_TICKET);
}
else
{
Print("Erro ao enviar Ordem Venda. Erro = ", GetLastError());
ResetLastError();
}
}
//+------------------------------------------------------------------+
//| Função que normaliza o takeprofit e o stoploss |
//+------------------------------------------------------------------+
double TKprev(double entr)
{
double cheio1 = (int)entr; //Parte inteira do takeprofit
double sobra = entr - cheio1; //Parte fracionária do takeprofit em uma variavel tipo
double
double sobra1 = NormalizeDouble(sobra, Digits()); //Em uma variavel tipo double coloca-se valor
normalizado pelo ativo
if(sobra1<=0.250) // compara se a sobra é menor ou igual a 25% sobra igual a
zero
{
sobra = 0.0;
}
else
{
sobra = 0.5; // Se maior que 25% e menor que 75% sobra igual 0.5
}
if(sobra1>0.750) // compara se a sobra é maior que 75% soma um inteiro
{
sobra = 1.0;
}
return cheio1 + sobra; //soma a parte inteira com a parte fracionária normalizada
}
bool par(double a)
{
double b;
double c;
if(a==0)
{
return true;
}
if(a==1)
{
return false;
}
b = a/2;
c = b - int(b);
if(c==0.0)
{
return true;
}
else
{
return false;
}
}