//+------------------------------------------------------+
//+ EL AUTOR NO SE HACE RESPONSABLE DE LAS CONSECUENCIAS +
//+ DEL USO DE ESTE EXPERT ADVISOR                       +
//+------------------------------------------------------+

//+------------------------------------------------------+
//|                          PROYECTO 1v2-06/08/2010.mq4 |
//|                            Pedro Montoro Salvatierra |
//|                               http://www.xtrader.net |
//+------------------------------------------------------+

//+------------------------------------------------------+
//| Mi agradecimiento a:                                 |
//|      x-trater.net, Spirit, TioTino                   |
//+------------------------------------------------------+

#property copyright "Pedro Montoro Salvatierra"
#property link      "http://www.x-trader.net"
extern string __="CONFIG. LABOUCHERE";
extern int inicioserie=1;
extern int finalserie=9;
extern double objetivo=300;
extern double operarpips=1000;
double seriec[50], seriev[50], lotesc, lotesv, precioopenc, precioopenv, precioclosec1;
double precioclosec2, precioclosev1, precioclosev2, beneficioc, beneficiov, factor=0.01;
double esquina1x1=10, esquina1x2=57;
int minseriec, maxseriec, minseriev, maxseriev, posminseriec, posmaxseriec, posminseriev;
int posmaxseriev, a1, b, laboucherec, laboucherev, perdidasconsecutivasc, perdidasconsecutivasv;
int ticketcompra, ticketventa, elementos; 
bool ordencompra, ordenventa;
int init() {ObjectsDeleteAll(); iniciarseries(inicioserie, finalserie); return(0);}
int deinit() {ObjectsDeleteAll(); return(0); }
int start()
{elementos=finalserie+inicioserie+1;
ObjectCreate("L4", OBJ_LABEL, 0, 0, 0);
ObjectSet("L4", OBJPROP_CORNER,1);
ObjectSet("L4", OBJPROP_XDISTANCE, esquina1x1);
ObjectSet("L4", OBJPROP_YDISTANCE, 20);
ObjectSetText("L4","LABOUCHERE", 8, "Arial", Gold);
minseriec=100; minseriev=100; maxseriec=0; maxseriev=0;   
for(a1=0;a1<20;a1++)
{if(seriec[a1]>maxseriec)                    {maxseriec=seriec[a1]; posmaxseriec=a1;}
 if(seriev[a1]>maxseriev)                    {maxseriev=seriev[a1]; posmaxseriev=a1;}
 if((seriec[a1]<minseriec)&&(seriec[a1]!=0)) {minseriec=seriec[a1]; posminseriec=a1;}
 if((seriev[a1]<minseriev)&&(seriev[a1]!=0)) {minseriev=seriev[a1]; posminseriev=a1;}}   
laboucherec=minseriec+maxseriec; laboucherev=minseriev+maxseriev;   
lotesc=laboucherec*factor; lotesv=laboucherev*factor;
if(OrdersTotal()<=2)
{ordencompra=false; ordenventa=false; ticketcompra=0; ticketventa=0;
 for(b=0;b<OrdersTotal();b++)
 {OrderSelect(b,SELECT_BY_POS,MODE_TRADES);
  if(OrderType()==OP_BUY)  {ordencompra=true; ticketcompra=OrderTicket(); precioopenc=OrderOpenPrice();}
  if(OrderType()==OP_SELL) {ordenventa=true;  ticketventa=OrderTicket();  precioopenv=OrderOpenPrice();}}
 if(ordencompra==false) {ordencompra=true;OrderSend(Symbol(),OP_BUY,lotesc,Ask,3,OrderStopLoss(),OrderTakeProfit(),"Proyecto 1v2",0,0,CLR_NONE);}
 if(ordenventa==false)  {ordenventa=true;OrderSend(Symbol(),OP_SELL,lotesv,Bid,3,OrderStopLoss(),OrderTakeProfit(),"Proyecto 1v2",0,0,CLR_NONE);}}
precioclosec1=precioopenc+(operarpips*Point); precioclosec2=precioopenc-(operarpips*Point);
precioclosev1=precioopenv+(operarpips*Point); precioclosev2=precioopenv-(operarpips*Point);
if((Bid>precioclosec1)||(Bid<precioclosec2)||(Ask>precioclosev1)||(Ask<precioclosev2))
{OrderSelect(ticketcompra,SELECT_BY_TICKET,MODE_TRADES);
 if(OrderProfit()>0) {seriec[cantidaddecifras(seriec,20)]=(minseriec+maxseriec); perdidasconsecutivasc=0; ArraySort(seriec,WHOLE_ARRAY,0,MODE_DESCEND); }
 if(OrderProfit()<0) {perdidasconsecutivasc++; seriec[posminseriec]=NULL; seriec[posmaxseriec]=NULL; ArraySort(seriec,WHOLE_ARRAY,0,MODE_DESCEND); } 
 beneficioc=beneficioc+OrderProfit();
 if(OrderType()==OP_BUY)  OrderClose(ticketcompra,OrderLots(),Bid,3,CLR_NONE);    
 if(OrderType()==OP_SELL) OrderClose(ticketcompra,OrderLots(),Ask,3,CLR_NONE);    
 OrderSelect(ticketventa,SELECT_BY_TICKET,MODE_TRADES);
 if(OrderProfit()>0) {seriev[cantidaddecifras(seriev,20)]=(minseriev+maxseriev); perdidasconsecutivasv=0; ArraySort(seriev,WHOLE_ARRAY,0,MODE_DESCEND); }
 if(OrderProfit()<0) {perdidasconsecutivasv++; seriev[posminseriev]=NULL; seriev[posmaxseriev]=NULL; ArraySort(seriev,WHOLE_ARRAY,0,MODE_DESCEND); } 
 beneficiov=beneficiov+OrderProfit();
 if(OrderType()==OP_BUY)  OrderClose(ticketventa,OrderLots(),Bid,3,CLR_NONE);    
 if(OrderType()==OP_SELL) OrderClose(ticketventa,OrderLots(),Ask,3,CLR_NONE);
 ArraySort(seriec,WHOLE_ARRAY,0,MODE_DESCEND);
 ArraySort(seriev,WHOLE_ARRAY,0,MODE_DESCEND);}
if((perdidasconsecutivasc==2)||(cantidaddecifras(seriec,20)<1)||(cantidaddecifras(seriec,20)>20)||(cantidaddecifras(seriev,20)<1)||(cantidaddecifras(seriev,20)>20)) iniciarseries(inicioserie, finalserie);
if(beneficioc>objetivo) iniciarseries(inicioserie, finalserie); 
if(beneficiov>objetivo) iniciarseries(inicioserie, finalserie);
return(0);
}

double iniciarseries(int i, int f)
{int y; for(y=0;y!=(f-i+1);y++) {seriec[y]=f-y; seriev[y]=f-y;}
perdidasconsecutivasc=0; perdidasconsecutivasv=0; beneficioc=0; beneficiov=0;}

int cantidaddecifras(double array[], int numero)
{int l=0; int cuenta=0; for(l=0;l<numero+1;l++)
 {if(array[l]!=NULL) cuenta++;} return(cuenta);}


