Limitar cantidad de operaciones abiertas

 

Hola a todos!

Estoy creando mi primer EA y estoy aprendiendo a programar, basicamente es que abra operaciones con algunos cruces de medias y un par de condiciones.

Favor me pueden ayudar a saber de que forma agrego el código para limitar la cantidad de operaciones abiertas en simultaneo.

Además también me interesa saber si algunas función que permita que las operaciones se ejecuten, un par de velas post cruce de medias.


De antemano les agradezco muchísimo!!!

 
jconsa:

Hola a todos!

Estoy creando mi primer EA y estoy aprendiendo a programar, basicamente es que abra operaciones con algunos cruces de medias y un par de condiciones.

Favor me pueden ayudar a saber de que forma agrego el código para limitar la cantidad de operaciones abiertas en simultaneo.

Además también me interesa saber si algunas función que permita que las operaciones se ejecuten, un par de velas post cruce de medias.


De antemano les agradezco muchísimo!!!

input MaxOrders = 3;

if(PositionsTotal()<MaxOrders){(Trade);}

No sé si esto te da una idea de lo que quieres hacer.

 
jconsa:

Hola a todos!

Estoy creando mi primer EA y estoy aprendiendo a programar, basicamente es que abra operaciones con algunos cruces de medias y un par de condiciones.

Favor me pueden ayudar a saber de que forma agrego el código para limitar la cantidad de operaciones abiertas en simultaneo.

Además también me interesa saber si algunas función que permita que las operaciones se ejecuten, un par de velas post cruce de medias.


De antemano les agradezco muchísimo!!!

Hola Jconsa, 

Te comparto unas líneas que hice para que te sirvan de ayuda. No verifiqué que funcionara bien pero estoy seguro que te servirá de guía... 

//+------------------------------------------------------------------+
//|                                                       Prueba.mq5 |
//|                                                Simón Del Vecchio |
//|                    https://www.mql5.com/es/users/simondelvecchio |
//+------------------------------------------------------------------+
#property copyright "Simón Del Vecchio"
#property link      "https://www.mql5.com/es/users/simondelvecchio"
#property version   "1.00"

//+------------------------------------------------------------------+
//| Includes                                                         |
//+------------------------------------------------------------------+
#include <Trade\SymbolInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Indicators\Trend.mqh>
//+------------------------------------------------------------------+
//| Objetos                                                          |
//+------------------------------------------------------------------+
CSymbolInfo Info;
CTrade Trade;
CPositionInfo Posicion;
CAccountInfo Cuenta;
CiMA MediaLenta, MediaRapida;

//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
input int MaxCantDeOperaciones = 3;
input double Volumen = 0.01;

//+------------------------------------------------------------------+
//| Variables globales                                               |
//+------------------------------------------------------------------+
int Velas = 0;

//+------------------------------------------------------------------+
//| Función de inicialización del EA                                 |
//+------------------------------------------------------------------+
int OnInit()
  {
   CrearIndicadores();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(PositionsTotal() <= MaxCantDeOperaciones &&
      Velas < iBars(Symbol(), PERIOD_CURRENT))
     {
      if(CruceDeMedias() == true)
        {
         double SL = CalcularSL();
         double TP = CalcularTP();
         Trade.Buy(Volumen, Symbol(), 0, SL, TP, NULL);
         //Si quiero que la siguiente entrada la haga después de 5 velas,...
         Velas = iBars(Symbol(), PERIOD_CURRENT) + 5;
        }
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CrearIndicadores()
  {
//Creamos las medias móviles.
   MediaRapida.Create(Symbol(), PERIOD_CURRENT, 50, 0, MODE_EMA, 0);
   MediaLenta.Create(Symbol(), PERIOD_CURRENT, 200, 0, MODE_EMA, 0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CruceDeMedias()
  {
//Actualizamos los valores de las medias móviles
   MediaRapida.Refresh();
   MediaLenta.Refresh();

//Si la media rápida cruza de abajo hacia arriba la media lenta,...
   if(MediaRapida.Main(1) < MediaLenta.Main(1) &&
      MediaRapida.Main(0) > MediaLenta.Main(0))
     {
      return(true);
     }
   return(false);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalcularSL()
  {
   double Precio = SymbolInfoDouble(Symbol(), SYMBOL_BID);
   double StopLoss = Precio - 100 * Point();
   return(StopLoss);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalcularTP()
  {
   double Precio = SymbolInfoDouble(Symbol(), SYMBOL_BID);
   double TakeProfit = Precio + 200 * Point();
   return(TakeProfit);
  }
//+------------------------------------------------------------------+


Saludos...

Razón de la queja: