domingo, 19 de agosto de 2012

35. Lo que fue, fue

Así es, queridos lectores.

Lo que fue, fue.

Por ahora no le voy a botar más corriente al Sabueso. Ya tienen el código. Ya les conté cómo lo hice y qué hice con él.

Terminaré este blog (¡que esta sí sea de verdad la última entrada!), terminaré diciendo que la época de mi vida en que me entusiasmé con el mercado de divisas fue muy entretenida. A veces estresante pero muy entretenida.

Me ocupan ahora otras cosas tanto o más interesantes que el Forex.

Tengo que agradecer su paciencia y mi última recomendación es la de siempre: Prueben el Sabueso. No crean nada de lo que aquí se escribió. Tomen el código, abran una cuanta demo y denle palo. Si les funciona, abran una cuanta en centavos. Si les funciona, abran una cuenta en dolares. Y si les funciona, mándanle a Christine alguna cosa. Ella todavía necesita esa plata más que usted...

Sí. Lo que fue, fue.




miércoles, 8 de agosto de 2012

34. El código del Sabueso (Ascendente y Descendente)

Observaciones:

1. Aquí abajo no hay un experto, sino dos. El Sabueso Ascendente es uno, y el segundo es El Sabueso Descendente.

2. Como lo que hice para traer el código fue "copiar y pegar", entonces algunas líneas se ven cortadas, pero no estoy seguro pues veo el código desde mi teléfono. Tal vez desde un computador se vean normales.... O sea que tal vez hay que ajustar esos cortes, creando de nuevo líneas de código más largas. Si no lo hiciera, al momento de compilar el programa saldrían 1000 errores de sintaxis. ¡¡Mejor!! Así sabría donde alargar las líneas de código.

3. Cómo de dijo arriba, este código debe ser compilado. Al compilarlo se creará un archivo ejecutable (punto exe), y ese sí que lo podrá usar si problemas.

4. ¡Buen provecho.

(Después de la línea siguiente de asteriscos viene el código de los expertos.

*****************************************





//+------------------------------------------------------------------+
//| Sabueso 050 Ascendente.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| Julio 23 de 2011 |
//+------------------------------------------------------------------+
#property copyright " - Para cuenta Real LiteForex."

//************************************************************************************
//
// P A R A A R R I B A
//
// Ajustado en progresiones hasta la 7a
// Siempre cortando los pips por la mitad
//
//
// Alarmas hasta la 4a - Envía correos de alerta
//
//************************************************************************************


extern int Senal_de_Cambio = 128; // Variación del precio para abrir posición de respaldo
extern int Cierre_Primera = 15; // Claro, el cierre de la primera posición
extern int Profit_de_corte = 100; // Cierra todo si va ganando X dólares
extern double Pro1 = 0.1 ; // Lotes de la primera posición
extern double Fraccion = 0.1 ;
extern double Expon = 4 ;
extern bool Alarmas = true ;
extern int Alarma_1a = 150 ; // Cuando la cuenta está en XXX pesos y sólo hay una posoción abierta
extern int Alarma_2a = 2000 ;
extern int Alarma_3a = 8000 ;
extern int Alarma_4a = 22000 ;

extern int Espera_entre_alarmas = 1 ; // Minutos entre correos cuando se envían una alarma se correo electrónico


double Pro2 ;
double Pro3 ;
double Pro4 ;
double Pro5 ;
double Pro6 ;
double Pro7 ;
double Pro8 ;
double Pro9 ;
double Pro10 ;
double Pro11 ;


int Pos_1 = 0 ; // Pos. 1
int Pos_2 = 0 ; // Pos. 2
int Pos_3 = 0 ; // Pos. 3
int Pos_4 = 0 ; // Etc.
int Pos_5 = 0 ;
int Pos_6 = 0 ;
int Pos_7 = 0 ;
int Pos_8 = 0 ;
int Pos_9 = 0 ;
int Pos_10 = 0 ;
int Pos_11 = 0 ;

int Posiciones_Abiertas ;

double Borde_Superior ; // Punto superior de la oscilación
double Borde_Inferior ; // Punto menor de la oscilación

double Spread ;

int Activador_de_cierre ;
string Par ; // Nombre del par
double Este_par ; // Cantidad de ransacciones abiertas en este par
double Ganancia ;
double Acumulado ;
int Intentos ;

double Medio ;
double Cuarto ;
double Octavo ;
double Dieciseisavo ;
double Treintaidosavo ;

int Contador_de_alarma = 0 ;
int Tiempo_inside_1a ;
int Futuro ;



//+------------------------------------------------------------------+
//| expert initializaion function |
//+------------------------------------------------------------------+
int init() // El init() se necesita para qe el experto funcione
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() // El deinit() se necesita para que el experto funcione
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

Contar_este_par();

if(Alarmas == True)
{
Enviar_alarma();
}

Calcular_ganancia();


if (Acumulado > Profit_de_corte)
{
Cierra_Par();
}

if(Este_par!=0)
{
Recuperar_variables();
}

RefreshRates();


if(Este_par==0)
{
Cero_Posiciones();
}
if(Este_par==1)
{
Analiza_1_Abre_2();
}
if(Este_par==2)
{
Analiza_2_Abre_3();
}
if(Este_par==3)
{
Analiza_3_Abre_4();
}
if(Este_par==4)
{
Analiza_4_Abre_5();
}
if(Este_par==5)
{
Analiza_5_Abre_6();
}
if(Este_par==6)
{
Analiza_6_Abre_7();
}
if(Este_par==7)
{
Analiza_7_Abre_8();
}
if(Este_par==8)
{
Analiza_8_Abre_9();
}
if(Este_par==9)
{
Analiza_9_Abre_10();
}
if(Este_par==10)
{
Analiza_10_Abre_11();
}

Pro2= (MathCeil((MathPow(2,Expon) * Fraccion)*10))/10;
Pro3= (MathCeil((MathPow(3,Expon) * Fraccion)*10))/10;
Pro4= (MathCeil((MathPow(4,Expon) * Fraccion)*10))/10;
Pro5= (MathCeil((MathPow(5,Expon) * Fraccion)*10))/10;
Pro6= (MathCeil((MathPow(6,Expon) * Fraccion)*10))/10;
Pro7= (MathCeil((MathPow(7,Expon) * Fraccion)*10))/10;


Comment("Posiciones : ", Este_par, " ; Par : ", Par, " ; Apalancamiento: 1/", AccountLeverage(), " "+" \n"+"Progresión ", Pro2, " ", Pro3, " ", Pro4, " ", Pro5, " ", Pro6, " ", Pro7, " " +" \n"+ "BI: ", Borde_Inferior, " ; BS: ", Borde_Superior, " ; Balance : $", AccountBalance(), " ; Fecha y hora : ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "; 2a : ", Borde_Inferior, "; 3a : ", Borde_Superior - Medio, "; 4a : ", Borde_Inferior + Cuarto, "; 5a : ", Borde_Inferior + Cuarto + Dieciseisavo, " "+" \n"+ "Equity Tebille : $",AccountEquity(), " ; Margen : $", AccountMargin(), " ; Free Margin : $", AccountFreeMargin()," ; Par Profit : $",Acumulado);
Sleep(50);
Comment(" ");
Sleep(50);
Comment("Posiciones : ", Este_par, " ; Par : ", Par, " ; Apalancamiento: 1/", AccountLeverage(), " "+" \n"+"Progresión ", Pro2, " ", Pro3, " ", Pro4, " ", Pro5, " ", Pro6, " ", Pro7, " " +" \n"+ "BI: ", Borde_Inferior, " ; BS: ", Borde_Superior, " ; Balance : $", AccountBalance(), " ; Fecha y hora : ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "; 2a : ", Borde_Inferior, "; 3a : ", Borde_Superior - Medio, "; 4a : ", Borde_Inferior + Cuarto, "; 5a : ", Borde_Inferior + Cuarto + Dieciseisavo, " "+" \n"+ "Equity Tebille : $",AccountEquity(), " ; Margen : $", AccountMargin(), " ; Free Margin : $", AccountFreeMargin()," ; Par Profit : $",Acumulado);
//Comment("Posiciones : ", Este_par, " ; Par : ", Par, " ; Apalancamiento: 1/", AccountLeverage(), " "+" \n"+"Progresión ", Pro2, " ", Pro3, " ", Pro4, " ", Pro5, " ", Pro6, " ", Pro7, " " +" \n"+ "BI: ", Borde_Inferior, " ; BS: ", Borde_Superior, " ; Balance : $", AccountBalance(), " ; Fecha y hora : ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "; 2a : ", Borde_Inferior, "; 3a : ", Borde_Superior - Medio, "; 4a : ", Borde_Inferior + Cuarto, " " +" \n"+ "Equity Tebille : $",AccountEquity(), " ; Margen : $", AccountMargin(), " ; Free Margin : $", AccountFreeMargin()," ; Par Profit : $",Acumulado);


return(0);
}
//+--------------------------------------------------------------------------------------------------------+
int Contar_este_par()
{
RefreshRates();

Par=Symbol();

Este_par = 0;

for(int i=0;i<OrdersTotal();i++) // Cuenta el número de posiciones de este par en específico
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Par)
{
Este_par++;
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Enviar_alarma()
{

RefreshRates(); // > <

//------------------------
if(Este_par==1)
{
if(AccountFreeMargin() < Alarma_1a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
//------------------------
if(Este_par==2)
{
if(AccountFreeMargin() < Alarma_2a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
//------------------------
if(Este_par==3)
{
if(AccountFreeMargin() < Alarma_3a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
//------------------------
if(Este_par==4)
{
if(AccountFreeMargin() < Alarma_4a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Calcular_ganancia()
{
RefreshRates();

double Ganancia;
string Par ;
double Este_par ;

Ganancia = 0 ;
Acumulado = 0 ;

Par = Symbol();

Este_par = 0;

for(int i=0;i<OrdersTotal();i++) // Cuenta el número de posiciones de este par en específico
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol() == Par)
{
Ganancia = OrderProfit() + OrderSwap() ;
Acumulado = Ganancia + Acumulado;
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Recuperar_variables()
{
RefreshRates();

Par = Symbol();

for(int i=0;i<OrdersTotal();i++) // Cuenta el número de posiciones de este par en específico
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol() == Par)
{
Borde_Superior = OrderOpenPrice();
Borde_Inferior = Borde_Superior - Senal_de_Cambio * Point ;


Medio = (Borde_Superior - Borde_Inferior)/2;
Cuarto = Medio/2;
Octavo = Cuarto/2;
Dieciseisavo = Octavo/2 ;
Treintaidosavo = Dieciseisavo/2 ;

return ;
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Cierra_Par() // Cierra todas las posiciones


{

while (Este_par>0)
{

if(OrderSymbol() == Par)
{
if (OrderType()==OP_BUY )
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
/*
if (GetLastError() != 0)
{
_GetLastError = GetLastError();
//Alert("Error #", _GetLastError, " en ", Par );
break ;
}
*/
if (OrderType()==OP_SELL )
OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);


Contar_este_par();
}
}
}

//+--------------------------------------------------------------------------------------------------------+

int Cero_Posiciones() // Abre la primera posición (UNA COMPRA DE 0.01 LOTES)
{
MathSrand(TimeLocal());
MathRand();

int Magic_1 = MathRand()+1;

RefreshRates();

Spread = Ask - Bid ;


Borde_Inferior = Ask - (Senal_de_Cambio * Point);
Borde_Superior = Ask ; //+ Spread ;

Medio = (Borde_Superior - Borde_Inferior)/2;
Cuarto = Medio/2;
Octavo = Cuarto/2;
Dieciseisavo = Octavo/2 ;
Treintaidosavo = Dieciseisavo/2 ;

Pos_1=OrderSend(Symbol(),OP_BUY,Pro1,Ask,3,0,1000,"1a",Magic_1,0,Yellow);

if (GetLastError() == 0) // Si la transacción se hizo sin novedad
{
//Alert ("Abierta la 1a posición, Una COMPRA con ", Lots, " Lotes");
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_1_Abre_2() // ANALIZA 1A POSICIÓN
{

MathSrand(TimeLocal());
MathRand();
int Magic_2 = MathRand()+1;

RefreshRates(); // Renew data

if (Acumulado > Cierre_Primera)
{
Cierra_Par();
}

Pro2= (MathCeil((MathPow(2,Expon) * Fraccion)*10))/10;

if (Borde_Inferior >= Bid) // Si la señal para la 2a posición, una venta, se activa
{
Pos_2=OrderSend(Symbol(),OP_SELL,Pro2,Bid,3,1000,0,"2a",Magic_2,0,Blue);
if (GetLastError() == 0)
{
//Alert ("Abierta la 2a posición. Una VENTA con ", Lots*Pro2, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_2_Abre_3() // ANALIZA 2A POSICIÓN
{
MathSrand(TimeLocal());
MathRand();

int Magic_3 = MathRand()+1;

RefreshRates(); // Renew data

Pro3= (MathCeil((MathPow(3,Expon) * Fraccion)*10))/10;

if ((Borde_Superior - Medio) <= Ask) // Si la señal para la 3a posición, una compra, se activa...
{
Pos_3=OrderSend(Symbol(),OP_BUY,Pro3,Ask,3,0,1000,"3a",Magic_3,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_3_Abre_4() // ANALIZA 3A POSICIÓN
{
MathSrand(TimeLocal());
MathRand();

int Magic_4 = MathRand()+1;

RefreshRates(); // Renew data

Pro4= (MathCeil((MathPow(4,Expon) * Fraccion)*10))/10;

if ((Borde_Inferior + Cuarto) >= Bid) // Si la senal para la venta No. 2 se activa
{
Pos_4=OrderSend(Symbol(),OP_SELL,Pro4,Bid,3,1000,0,"4a",Magic_4,0,Black);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_4_Abre_5()
{
MathSrand(TimeLocal());
MathRand();

int Magic_5 = MathRand()+1;

RefreshRates(); // Renew data

Pro5= (MathCeil((MathPow(5,Expon) * Fraccion)*10))/10;

if ((Borde_Inferior + Cuarto + Octavo) <= Ask) // Si la señal para la 3a posición, una compra, se activa...
{
Pos_5=OrderSend(Symbol(),OP_BUY,Pro5,Ask,3,0,1000,"5a",Magic_5,0,White);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_5_Abre_6()
{
RefreshRates(); // Renew data

Pro6= (MathCeil((MathPow(6,Expon) * Fraccion)*10))/10;

if (Borde_Inferior + Cuarto + Dieciseisavo >= Bid) // Si la senal para la venta No. 2 se activa
{
Pos_6=OrderSend(Symbol(),OP_SELL,Pro6,Bid,3,1000,0,"6a",66523,0,Red);
//OrderSelect(Pos_4, SELECT_BY_TICKET, MODE_TRADES); // segunda venta...
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_6_Abre_7()
{
MathSrand(TimeLocal());
MathRand();

int Magic_6 = MathRand()+1;

RefreshRates(); // Renew data

Pro7= (MathCeil((MathPow(7,Expon) * Fraccion)*10))/10;

if (Borde_Inferior + Cuarto + Dieciseisavo + Treintaidosavo <= Ask) // Si la señal para la 3a posición, una compra, se activa...
{
Pos_7=OrderSend(Symbol(),OP_BUY,Pro7,Ask,3,0,1000,"7a",Magic_6,0,Green);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_7_Abre_8()
{
RefreshRates(); // Renew data

Pro8= (MathCeil((MathPow(8,Expon) * Fraccion)*10))/10;

if (Borde_Inferior >= Bid) // Si la senal para la venta No. 2 se activa
{
Pos_8=OrderSend(Symbol(),OP_SELL,Pro8,Bid,3,1000,0,"8a",887867,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_8_Abre_9()
{
MathSrand(TimeLocal());
MathRand();

int Magic_7 = MathRand()+1;

RefreshRates(); // Renew data

Pro9= (MathCeil((MathPow(9,Expon) * Fraccion)*10))/10;

if (Borde_Superior <= Ask) // Si la señal para la 3a posición, una compra, se activa...
{
Pos_3=OrderSend(Symbol(),OP_BUY,Pro9,Ask,3,0,1000,"9a",Magic_7,0,Green);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_9_Abre_10()
{
MathSrand(TimeLocal());
MathRand();

int Magic_8 = MathRand()+1;

RefreshRates(); // Renew data

Pro10= (MathCeil((MathPow(10,Expon) * Fraccion)*10))/10;

if (Borde_Inferior >= Bid) // Si la senal para la venta No. 2 se activa
{
Pos_10=OrderSend(Symbol(),OP_SELL,Pro10,Bid,3,1000,0,"10a",Magic_8,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}
}
//--------------------------------------------------------------------------------------------------------+
int Analiza_10_Abre_11()
{
MathSrand(TimeLocal());
MathRand();

int Magic_9 = MathRand()+1;

RefreshRates(); // Renew data

Pro11= (MathCeil((MathPow(11,Expon) * Fraccion)*10))/10;

if (Borde_Superior <= Ask) // Si la señal para la 3a posición, una compra, se activa...
{
Pos_11=OrderSend(Symbol(),OP_BUY,Pro11,Ask,3,0,1000,"11a",Magic_9,0,Green);
if (GetLastError() == 0)
{
//Alert ("Abierta la 5a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}

//+--------------------------------------------------------------------------------------------------------+





***************************************
ESTE ES EL LÍMITE ENTRE LOS DOS EXPERTOS.
***************************************




//+------------------------------------------------------------------+
//| Sabueso 049 Descendente.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| Julio 20 de 2011 |
//+------------------------------------------------------------------+
#property copyright " - Para cuenta Real LiteForex."

//************************************************************************************
//
// P A R A A B A J O
//
// Ajustado en progresiones hasta la 7a
// Siempre cortando pos pips por la mitad
//
//
// Alarmas hasta la 4a - Envía correos de alerta
//
//************************************************************************************


extern int Senal_de_Cambio = 128; // Variación del precio para abrir posición de respaldo
extern int Cierre_Primera = 15; // Claro, el cierre de la primera posición
extern int Profit_de_corte = 100; // Cierra todo si va ganando X dólares
extern double Pro1 = 0.1 ; // Lotes de la primera posición
extern double Fraccion = 0.1 ;
extern double Expon = 4 ;
extern bool Alarmas = true ;
extern int Alarma_1a = 150 ; // Cuando la cuenta está en XXX pesos y sólo hay una posoción abierta
extern int Alarma_2a = 2000 ;
extern int Alarma_3a = 8000 ;
extern int Alarma_4a = 22000 ;

extern int Espera_entre_alarmas = 1 ; // Minutos entre correos cuando se envían una alarma se correo electrónico


double Pro2 ;
double Pro3 ;
double Pro4 ;
double Pro5 ;
double Pro6 ;
double Pro7 ;
double Pro8 ;
double Pro9 ;
double Pro10 ;
double Pro11 ;


int Pos_1 = 0 ; // Pos. 1
int Pos_2 = 0 ; // Pos. 2
int Pos_3 = 0 ; // Pos. 3
int Pos_4 = 0 ; // Etc.
int Pos_5 = 0 ;
int Pos_6 = 0 ;
int Pos_7 = 0 ;
int Pos_8 = 0 ;
int Pos_9 = 0 ;
int Pos_10 = 0 ;
int Pos_11 = 0 ;

int Posiciones_Abiertas ;

double Borde_Superior ; // Punto superior de la oscilación
double Borde_Inferior ; // Punto menor de la oscilación

double Spread ;

int Activador_de_cierre ;
string Par ; // Nombre del par
double Este_par ; // Cantidad de ransacciones abiertas en este par
double Ganancia ;
double Acumulado ;
int Intentos ;

double Medio ;
double Cuarto ;
double Octavo ;
double Dieciseisavo ;
double Treintaidosavo ;

int Contador_de_alarma = 0 ;
int Tiempo_inside_1a ;
int Futuro ;

//+------------------------------------------------------------------+
//| expert initializaion function |
//+------------------------------------------------------------------+
int init() // El init() se necesita para qe el experto funcione
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() // El deinit() se necesita para que el experto funcione
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{


Contar_este_par();

if(Alarmas == True)
{
Enviar_alarma();
}
Calcular_ganancia();

if (Acumulado > Profit_de_corte)
{
Cierra_Par();
}
if(Este_par!=0)
{
Recuperar_variables();
}
RefreshRates();

if(Este_par==0)
{
Cero_Posiciones();
}
if(Este_par==1)
{
Analiza_1_Abre_2();
}
if(Este_par==2)
{
Analiza_2_Abre_3();
}
if(Este_par==3)
{
Analiza_3_Abre_4();
}
if(Este_par==4)
{
Analiza_4_Abre_5();
}
if(Este_par==5)
{
Analiza_5_Abre_6();
}
if(Este_par==6)
{
Analiza_6_Abre_7();
}
if(Este_par==7)
{
Analiza_7_Abre_8();
}
if(Este_par==8)
{
Analiza_8_Abre_9();
}
if(Este_par==9)
{
Analiza_9_Abre_10();
}
if(Este_par==10)
{
Analiza_10_Abre_11();
}

Pro2= (MathCeil((MathPow(2,Expon) * Fraccion)*10))/10;
Pro3= (MathCeil((MathPow(3,Expon) * Fraccion)*10))/10;
Pro4= (MathCeil((MathPow(4,Expon) * Fraccion)*10))/10;
Pro5= (MathCeil((MathPow(5,Expon) * Fraccion)*10))/10;
Pro6= (MathCeil((MathPow(6,Expon) * Fraccion)*10))/10;
Pro7= (MathCeil((MathPow(7,Expon) * Fraccion)*10))/10;


Comment("Posiciones : ", Este_par, " ; Par : ", Par, " ; Apalancamiento: 1/", AccountLeverage(), " "+" \n"+"Progresión ", Pro2, " ", Pro3, " ", Pro4, " ", Pro5, " ", Pro6, " ", Pro7, " " +" \n"+ "BI: ", Borde_Inferior, " ; BS: ", Borde_Superior, " ; Balance : $", AccountBalance(), " ; Fecha y hora : ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "; 2a : ", Borde_Superior, "; 3a : ", Borde_Superior - Medio, "; 4a : ", Borde_Inferior + Cuarto, "; 5a : ", Borde_Inferior + Cuarto + Dieciseisavo, " "+" \n"+ "Equity Tebille : $",AccountEquity(), " ; Margen : $", AccountMargin(), " ; Free Margin : $", AccountFreeMargin()," ; Par Profit : $",Acumulado);
Sleep(50);
Comment(" ");
Sleep(50);
Comment("Posiciones : ", Este_par, " ; Par : ", Par, " ; Apalancamiento: 1/", AccountLeverage(), " "+" \n"+"Progresión ", Pro2, " ", Pro3, " ", Pro4, " ", Pro5, " ", Pro6, " ", Pro7, " " +" \n"+ "BI: ", Borde_Inferior, " ; BS: ", Borde_Superior, " ; Balance : $", AccountBalance(), " ; Fecha y hora : ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "; 2a : ", Borde_Superior, "; 3a : ", Borde_Superior - Medio, "; 4a : ", Borde_Inferior + Cuarto, "; 5a : ", Borde_Inferior + Cuarto + Dieciseisavo, " "+" \n"+ "Equity Tebille : $",AccountEquity(), " ; Margen : $", AccountMargin(), " ; Free Margin : $", AccountFreeMargin()," ; Par Profit : $",Acumulado);
//Comment("Posiciones : ", Este_par, " ; Par : ", Par, " ; Apalancamiento: 1/", AccountLeverage(), " "+" \n"+"Progresión ", Pro2, " ", Pro3, " ", Pro4, " ", Pro5, " ", Pro6, " ", Pro7, " " +" \n"+ "BI: ", Borde_Inferior, " ; BS: ", Borde_Superior, " ; Balance : $", AccountBalance(), " ; Fecha y hora : ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS), "; 2a : ", Borde_Inferior, "; 3a : ", Borde_Superior - Medio, "; 4a : ", Borde_Inferior + Cuarto, " " +" \n"+ "Equity Tebille : $",AccountEquity(), " ; Margen : $", AccountMargin(), " ; Free Margin : $", AccountFreeMargin()," ; Par Profit : $",Acumulado);


return(0);
}
//+--------------------------------------------------------------------------------------------------------+
int Contar_este_par()
{
RefreshRates();

Par=Symbol();

Este_par = 0;

for(int i=0;i<OrdersTotal();i++) // Cuenta el número de posiciones de este par en específico
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Par)
{
Este_par++;
}
}
}
//+--------------------------------------------------------------------------------------------------------+
//+--------------------------------------------------------------------------------------------------------+
int Enviar_alarma()
{

RefreshRates(); // > <

//------------------------
if(Este_par==1)
{
if(AccountFreeMargin() < Alarma_1a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
//------------------------
if(Este_par==2)
{
if(AccountFreeMargin() < Alarma_2a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
//------------------------
if(Este_par==3)
{
if(AccountFreeMargin() < Alarma_3a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
//------------------------
if(Este_par==4)
{
if(AccountFreeMargin() < Alarma_4a)
{
if(Contador_de_alarma == 0)
{
Tiempo_inside_1a = TimeCurrent();
Futuro = Tiempo_inside_1a + Espera_entre_alarmas*60 ;
Contador_de_alarma = Contador_de_alarma + 1 ;
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La sigueinte cuenta necesita fondos "+AccountNumber()) ;
}
else
{
if(Futuro < TimeCurrent())
{
Alert("¡PILAS CON EL MARGEN EN: ", AccountNumber());
SendMail("Mensaje del Sabueso", "La siguiente cuenta necesita fondos "+AccountNumber()) ;
Contador_de_alarma = 0;
}
}

}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Calcular_ganancia()
{
RefreshRates();

double Ganancia;
string Par ;
double Este_par ;

Ganancia = 0 ;
Acumulado = 0 ;

Par = Symbol();

Este_par = 0;

for(int i=0;i<OrdersTotal();i++) // Cuenta el número de posiciones de este par en específico
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol() == Par)
{
Ganancia = OrderProfit() + OrderSwap() ;
Acumulado = Ganancia + Acumulado;
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Recuperar_variables()
{
RefreshRates();

Par = Symbol();

for(int i=0;i<OrdersTotal();i++) // Cuenta el número de posiciones de este par en específico
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol() == Par)
{

Spread = Bid - Ask ;

Borde_Inferior = OrderOpenPrice();
Borde_Superior = Borde_Inferior + Senal_de_Cambio * Point;

Medio = (Borde_Superior - Borde_Inferior)/2;
Cuarto = Medio/2;
Octavo = Cuarto/2;
Dieciseisavo = Octavo/2 ;
Treintaidosavo = Dieciseisavo/2 ;

return ;
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Cierra_Par() // Cierra todas las posiciones

{
while (Este_par>0)
{

if(OrderSymbol() == Par)
{
if (OrderType()==OP_BUY )
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);

if (OrderType()==OP_SELL )
OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);

Contar_este_par();
}
}
}

//+--------------------------------------------------------------------------------------------------------+

int Cero_Posiciones()
{
MathSrand(TimeLocal());
MathRand();

int Magic_1 = MathRand()+1;

RefreshRates();

Spread = Bid - Ask ;

Borde_Inferior = Bid ; //+ Spread ;
Borde_Superior = Borde_Inferior + (Senal_de_Cambio * Point);


Medio = (Borde_Superior - Borde_Inferior)/2;
Cuarto = Medio/2;
Octavo = Cuarto/2;
Dieciseisavo = Octavo/2 ;
Treintaidosavo = Dieciseisavo/2 ;

Pos_1=OrderSend(Symbol(),OP_SELL,Pro1,Bid,3,1000,0,"1a",Magic_1,0,Yellow);

if (GetLastError() == 0) // Si la transacción se hizo sin novedad
{
//Alert ("Abierta la 1a posición, Una COMPRA con ", Lots, " Lotes");
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_1_Abre_2()
{

MathSrand(TimeLocal());
MathRand();
int Magic_2 = MathRand()+1;

RefreshRates(); // Renew data

if (Acumulado > Cierre_Primera)
{
Cierra_Par();
}

Pro2= (MathCeil((MathPow(2,Expon) * Fraccion)*10))/10;

if (Borde_Superior <= Ask)
{
Pos_2=OrderSend(Symbol(),OP_BUY,Pro2,Ask,3,0,10000,"2a",Magic_2,0,Blue);
if (GetLastError() == 0)
{
//Alert ("Abierta la 2a posición. Una VENTA con ", Lots*Pro2, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_2_Abre_3()
{
MathSrand(TimeLocal());
MathRand();

int Magic_3 = MathRand()+1;

RefreshRates(); // Renew data

Pro3= (MathCeil((MathPow(3,Expon) * Fraccion)*10))/10;

if ((Borde_Superior - Medio) >= Bid)
{
Pos_3=OrderSend(Symbol(),OP_SELL,Pro3,Bid,3,10000,0,"3a",Magic_3,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_3_Abre_4()
{
MathSrand(TimeLocal());
MathRand();

int Magic_4 = MathRand()+1;

RefreshRates(); // Renew data

Pro4= (MathCeil((MathPow(4,Expon) * Fraccion)*10))/10;

if ((Borde_Superior - Cuarto) <= Ask)
{
Pos_4=OrderSend(Symbol(),OP_BUY,Pro4,Ask,3,0,10000,"4a",Magic_4,0,Black);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_4_Abre_5()
{
MathSrand(TimeLocal());
MathRand();

int Magic_5 = MathRand()+1;

RefreshRates(); // Renew data

Pro5= (MathCeil((MathPow(5,Expon) * Fraccion)*10))/10;

if ((Borde_Superior - Cuarto - Octavo) >= Ask)
{
Pos_5=OrderSend(Symbol(),OP_SELL,Pro5,Ask,3,1000,0,"5a",Magic_5,0,White);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_5_Abre_6()
{
RefreshRates(); // Renew data

Pro6= (MathCeil((MathPow(6,Expon) * Fraccion)*10))/10;

if (Borde_Superior - Cuarto - Dieciseisavo <= Ask)
{
Pos_6=OrderSend(Symbol(),OP_BUY,Pro6,Ask,3,0,1000,"6a",66523,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}

}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_6_Abre_7()
{
MathSrand(TimeLocal());
MathRand();

int Magic_6 = MathRand()+1;

RefreshRates(); // Renew data

Pro7= (MathCeil((MathPow(7,Expon) * Fraccion)*10))/10;

if (Borde_Superior - Cuarto - Dieciseisavo - Treintaidosavo >= Bid)
{
Pos_7=OrderSend(Symbol(),OP_SELL,Pro7,Bid,3,1000,0,"7a",Magic_6,0,Green);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}

}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_7_Abre_8()
{
RefreshRates(); // Renew data

Pro8= (MathCeil((MathPow(8,Expon) * Fraccion)*10))/10;

if (Borde_Inferior >= Bid)
{
Pos_8=OrderSend(Symbol(),OP_BUY,Pro8,Ask,3,0,1000,"8a",887867,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}

}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_8_Abre_9()
{
MathSrand(TimeLocal());
MathRand();

int Magic_7 = MathRand()+1;

RefreshRates(); // Renew data

Pro9= (MathCeil((MathPow(9,Expon) * Fraccion)*10))/10;

if (Borde_Superior <= Ask)
{
Pos_3=OrderSend(Symbol(),OP_SELL,Pro9,Bid,3,1000,0,"9a",Magic_7,0,Green);
if (GetLastError() == 0)
{
//Alert ("Abierta la 3a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}

}
//+--------------------------------------------------------------------------------------------------------+
int Analiza_9_Abre_10()
{
MathSrand(TimeLocal());
MathRand();

int Magic_8 = MathRand()+1;

RefreshRates(); // Renew data

Pro10= (MathCeil((MathPow(10,Expon) * Fraccion)*10))/10;

if (Borde_Inferior >= Bid)
{
Pos_10=OrderSend(Symbol(),OP_BUY,Pro10,Ask,3,0,1000,"10a",Magic_8,0,Red);
if (GetLastError() == 0)
{
//Alert ("Abierta la 4a posición. Una VENTA con ", Lots*Pro4, " Lotes");
}
}

}
//--------------------------------------------------------------------------------------------------------+
int Analiza_10_Abre_11()
{
MathSrand(TimeLocal());
MathRand();

int Magic_9 = MathRand()+1;

RefreshRates(); // Renew data

Pro11= (MathCeil((MathPow(11,Expon) * Fraccion)*10))/10;

if (Borde_Superior <= Ask)
{
Pos_11=OrderSend(Symbol(),OP_SELL,Pro11,Bid,3,1000,0,"11a",Magic_9,0,Green);
if (GetLastError() == 0)
{
//Alert ("Abierta la 5a posición, Una COMPRA con ", Lots*Pro3, " Lotes");
}
}
}

//+--------------------------------------------------------------------------------------------------------+

33. Esta falta de juicio mía...

Ni para qué les cuento lo que pasó.

Me fui a acampar y me entusiasmé en el monte.

No llegué a la casa cuando abrieron los mercados el domingo y cuando llegué el lunes me sorprendí pues había ganado como 200 dólares.

Y eso fue lo pero que me pudo haber pasado. Creí haber descubierto un sistema mejor que el del Sabueso.

Creí que jugar al "Cara y Sello" me enriquecería en dos segundos.

¿El resultado?

Abandoné el Sabueso. Lo cambié por el Cara y Sello y perdí todo.

Todo todito todo.

Me desanimé completamente y sólo hasta hoy, muchos meses después,  he decidido contar lo que pasó.

Pero para quien quiera experimentar con el Sabueso, que funciona de maravilla, copiaré el código en la siguiente entrada.

¿Por qué no lo sigo si lo he comprobado y de verdad funciona?

Tal vez porque no tengo la estructura de personalidad para seguir con la disciplina que exige el Sabueso...

Que tontería, ¿No?

:(