terça-feira, 28 de março de 2023

Codigo de Expert Advisor

Criar um Expert Advisor (EA) em MQL4 para cruzamento de médias móveis e saída baseada em inversão de tendência é simples. Aqui está um exemplo básico de código:

```cpp
//+------------------------------------------------------------------+
//|                                                     SimpleEA.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

// Parâmetros do EA
extern double TakeProfit = 50;
extern double StopLoss = 50;
extern int MA_Period1 = 15;
extern int MA_Period2 = 30;
extern int Stochastic_Period = 14;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
  }

void OnTick()
  {
   double MA1_Current = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 0);
   double MA1_Previous = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 1);
   double MA2_Current = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 0);
   double MA2_Previous = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 1);

   bool BuySignal = MA1_Current > MA2_Current && MA1_Previous <= MA2_Previous;
   bool SellSignal = MA1_Current < MA2_Current && MA1_Previous >= MA2_Previous;
   
   if (BuySignal)
     {
      double SL = NormalizeDouble(Bid - StopLoss * Point, Digits);
      double TP = NormalizeDouble(Bid + TakeProfit * Point, Digits);
      int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, SL, TP, "Buy Order", 0, 0, Blue);
     }
   if (SellSignal)
     {
      double SL = NormalizeDouble(Ask + StopLoss * Point, Digits);
      double TP = NormalizeDouble(Ask - TakeProfit * Point, Digits);
      int ticket = OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, SL, TP, "Sell Order", 0, 0, Red);
     }

   for (int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol())
        {
         if (OrderType() == OP_BUY && MA1_Current < MA1_Previous)
           {
            OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
           }
         if (OrderType() == OP_SELL && MA1_Current > MA1_Previous)
           {
            OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
           }
        }
     }
  }
//+------------------------------------------------------------------+
```

Este EA usa duas médias móveis simples (SMA) com períodos de 15 e 30 e um estocástico com período 14. Ele abre uma ordem de compra quando a SMA de 15 cruza acima da SMA de 30 e abre uma ordem de venda quando a SMA de 15 cruza abaixo da SMA de 30. As ordens são fechadas quando a SMA de 15 inverte a tendência.

Sem comentários:

Enviar um comentário