Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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);
}