Código: Seleccionar todo
int alerta = 0;
bool velanueva = False; // Variable que nos detecta la vela
extern int numeromagico = 6;
extern int periodo = 20;
extern int desviacion = 2;
extern double lote = 0.08;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
nuevabarra ();
int totalordenes = OrdersTotal();
for (int i=0; i <= (totalordenes); i++){
//Seleccionamos la orden del mercado
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==TRUE){
if (OrderSymbol()==Symbol() && OrderMagicNumber()==numeromagico){
double Nbollsup1 = NormalizeDouble (iBands(Symbol(),0,periodo,desviacion,0,PRICE_CLOSE,MODE_UPPER,1),0);
double precioentrada = OrderOpenPrice();
double precioactual = MarketInfo(Symbol(),MODE_ASK);
if (Close[1]>Nbollsup1&&precioactual>precioentrada){
int cerrar;
cerrar = OrderClose(OrderTicket(),lote,Bid,3,Black);
return;
}
}
}
}
//---
if (velanueva == True){
double bollsup1 = iBands(Symbol(),0,periodo,desviacion,0,PRICE_CLOSE,MODE_UPPER,1);
double bollinf1 = iBands(Symbol(),0,periodo,desviacion,0,PRICE_CLOSE,MODE_LOWER,1);
double mmbb1 = iMA (Symbol(),0,periodo,0,MODE_EMA,PRICE_CLOSE,1);
double bollsup2 = iBands(Symbol(),0,periodo,desviacion,0,PRICE_CLOSE,MODE_UPPER,2);
double bollinf2 = iBands(Symbol(),0,periodo,desviacion,0,PRICE_CLOSE,MODE_LOWER,2);
double mmbb2 = iMA (Symbol(),0,periodo,0,MODE_EMA,PRICE_CLOSE,2);
}
if (Close[1] > bollinf1 && Open[1] < bollinf1 && (Close[1]>Low[2]-stop1) ){
int compra;
compra = OrderSend(Symbol(),OP_BUY,lote,Ask,3,0,0,NULL,numeromagico,0,Red);
minima2 = Low[2]-stop1;
return;
}
}
}
//+------------------------------------------------------------------+
// Funcion encargada de cambiar la variable nuevavela
void nuevabarra(){
static datetime nuevotime = 0; //Detectar nuevo tiempo
velanueva = False; // 0 - misma vela, 1 - vela nueva
if (nuevotime != Time[0]){
nuevotime = Time[0];
velanueva = True;
}
}
Hola, he creado este sencillo EA para que cuando el precio corte hacia arriba la banda de bollinger inferior abra un largo y que cierre el largo cuando la vela cierre por encima de la banda superior. Solo quiero que cierre las operaciones si estan en positivo, y el problema es que al abrir una operación nueva al tener el mismo numero magico al cerrar una me cierra todas las que estan abiertas. Cómo podría hacer para que me gestione cada buy por separado?
Muchas gracias