Limitar Ordenes

 

Estoy empezando a programar y estoy haciendo un robot con cruces de medias moviles pero cuando se produce el cruce envia muchas ordenes. Como limito el numero? Ahora no puse la parte

del codigo que envia la orden pero cuando lo hice se me disparaban.



#property copyright "Copyright 2018, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include <Trade\Trade.mqh>

#include <Trade\SymbolInfo.mqh>

#include <Trade\PositionInfo.mqh>

#include <Trade\AccountInfo.mqh>

CTrade Trade;

CSymbolInfo InfoDivisa;

CPositionInfo Posiciones;

CAccountInfo InfoCuenta;

extern int NMagico=111;

extern double Lote=0.01;

extern ulong desviacion=100;

extern double StopLoss=50;

extern double TakeProfit=150;



int OnInit()

  {

   CSymbolInfo InformacionDivisa;

   InformacionDivisa.Name(_Symbol);

   InformacionDivisa.RefreshRates();

   Print("Divisa: ",InformacionDivisa.Name());

   Print("Descripcion: ",InformacionDivisa.Description());

   Print("Spread: ",InformacionDivisa.Spread());

   Print("Ask: ",InformacionDivisa.Ask());

   Print("Bid: ",InformacionDivisa.Bid());

   return(INIT_SUCCEEDED);

  }

void OnTick()

  {

   bool compra=1,venta=1,Ccompra=1,Cventa=1;

   double DiferenciaCompra,DiferenciaVenta;

   double M1[],M2[];

   int Digitos=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);

   int MediaDefinicion1=iMA(_Symbol,PERIOD_M1,5,0,MODE_EMA,PRICE_CLOSE);

   int MediaDefinicion2=iMA(_Symbol,PERIOD_M1,25,0,MODE_EMA,PRICE_CLOSE);

   ArraySetAsSeries(M1,true);

   ArraySetAsSeries(M2,true);

   CopyBuffer(MediaDefinicion1,0,0,5,M1);

   CopyBuffer(MediaDefinicion2,0,0,25,M2);

   M1[1]=NormalizeDouble(M1[1],Digitos);

   M2[0]=NormalizeDouble(M2[0],Digitos);

   M1[2]=NormalizeDouble(M1[2],Digitos);

       

   if(M1[1]>M2[0]){compra=1;}else{compra=0;} //Cruce de la barra 1 de M1 hacia arriba

   if(M1[1]<M2[2]){Ccompra=1;}else{Ccompra=0;}//La barra 1 de M1 es menor a la barra 2 de M2 (confrima compra)

   if(M1[1]<M2[0]){venta=1;}else{venta=0;} //Cruce de la barra 1 de M1 hacia abajo 

   if(M1[1]<M2[2]){Cventa=1;}else{Cventa=0;}//La barra 1 de M1 es mayor a la barra 2 de M2 (Confirma venta)

   

 Comment("Info de la barra 1 de M1: ", M1[1],

           "\nInfo de la barra 0 de M2: ",M2[0],

           "\nInfo de la barra 2 de M2: ",M2[2],

           "\ncompra= ",compra,"\nventa= ",venta,

           "\nCcompra= ", Ccompra,"\nCventa= ",Cventa);

  //Estos son solo datos para guiarme en la pantalla

           

}

           

void OnDeinit(const int reason)

{   

}




void OnTrade()

{

}

void OnTradeTransaction(const MqlTradeTransaction& trans,

                        const MqlTradeRequest& request,

                        const MqlTradeResult& result)

{

}


double OnTester()

{

double ret=0.0;

return(ret);

}

void OnTesterInit()

{

}

void OnTesterPass()

{

}

void OnTesterDeinit()

{

}

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

{

}

void Compra()

{

   int Digitos= (int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);

   double Puntos=(double)SymbolInfoDouble(_Symbol,SYMBOL_POINT);

   double PrecioCompra=(double)SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double SL=PrecioCompra-StopLoss*Puntos;

   double TP=PrecioCompra+TakeProfit*Puntos;

   Trade.Buy(0.01,_Symbol,0,SL,TP);

}

void Venta()

{

   int Digitos=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);

   double Puntos=(double)SymbolInfoDouble(_Symbol,SYMBOL_POINT);

   double PrecioVenta=(double)SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   double SL=PrecioVenta-StopLoss*Puntos;

   double TP=PrecioVenta+TakeProfit*Puntos;

   Trade.Sell(0.01,_Symbol,0,SL,TP);

}


Descubra las nuevas posibilidades de MetaTrader 5 con la comunidad y los servicios MQL5
Descubra las nuevas posibilidades de MetaTrader 5 con la comunidad y los servicios MQL5
  • www.mql5.com
Aprenda a crear sus propios indicadores técnicos y robots comerciales siguiendo los ejemplos de los artículos que otros tráders escriben para usted. Comparta su experiencia en el comercio y la programación con los principiantes del trading algorítmico ¡escriba un artículo sobre ello y nosotros lo traduciremos a 6 idiomas, y además le pagaremos...