Você está na página 1de 2

Para construir um robô de médias móveis em MQL5, você precisará seguir os seguintes

passos:

Defina as var que serão usadas no seu robô, como a média móvel rápida (FastMA) e a
média móvel lenta (SlowMA).
python
Copy code
input int FastMA = 10;
input int SlowMA = 30;

double MA1, MA2;


No evento OnInit(), defina as configurações do seu robô, como o símbolo a ser
negociado, o período do gráfico e o desvio padrão.
scss
Copy code
void OnInit()
{
SymbolInfoTick(_Symbol, Tick);
if(SymbolInfoInteger(_Symbol, SYMBOL_TRADE_MODE)==false)
return;
if(Period() != PERIOD_M15 && Period() != PERIOD_H1)
return;
if(SymbolInfoInteger(_Symbol, SYMBOL_DIGITS)!=4 && SymbolInfoInteger(_Symbol,
SYMBOL_DIGITS)!=2)
return;
if(SymbolInfoDouble(_Symbol, SYMBOL_SPREAD)<0.0015)
return;
if(!IsTradeAllowed())
return;
if(!IsTesting() && MarketInfo(_Symbol, MODE_SWAPLONG)<=-1000)
return;
}
No evento OnTick(), calcule as médias móveis e tome decisões de compra e venda com
base na diferença entre as médias.
scss
Copy code
void OnTick()
{
MA1 = iMA(_Symbol, _Period, FastMA, 0, MODE_SMA, PRICE_CLOSE, 0);
MA2 = iMA(_Symbol, _Period, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 0);

if(MA1 > MA2)


{
// Abrir posição de compra
}
else if(MA1 < MA2)
{
// Abrir posição de venda
}
}
No evento OnTrade() gerencie as ordens abertas e fechadas.
scss
Copy code
void OnTrade()
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(i))
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && MA1 < MA2)
{
// Fechar posição de compra
}
else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && MA1 >
MA2)
{
// Fechar posição de venda
}
}
}
}
No evento OnDeinit(), encerre as posições abertas e limpe as variáveis.
scss
Copy code
void OnDeinit(const int reason)
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(i))
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
OrderClose(PositionGetTicket(), PositionGetDouble(POSITION_VOLUME),
Bid, 5, clrNone);
else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
OrderClose(PositionGetTicket(), PositionGetDouble(POSITION_VOLUME),
Ask, 5, clrNone);
}
}

MA1 = 0;
MA2 = 0;
}
Lembre-se de adicionar quaisquer outros recursos que você deseja, como
gerenciamento de risco ou filtros adicionais.

Você também pode gostar