DIVIDIR LOS LOTES

Discusión sobre sistemas de trading ya existentes y nuevas ideas.

DIVIDIR LOS LOTES

Notapor chemita » Sab Abr 10, 2010 2:36 am

Hola a todos ... compañeros de fatigas
Cuantas y cuantas horas mirando la pantalla jejeje
Tengo una duda sencilla, por que es de matematicas, pero no me sale, no me sale, a ver si dais con la madre del cordero.
Yo siempre opero con esta formula ....

double capital;
capital = AccountFreeMargin();
string aux;
Lots = (capital / 1000) * 0.1;
aux = DoubleToStr(Lots,1);
Lots = StrToDouble(aux);

Con esto lo que ocurre es que siempre siempre opero con el 10 % de mi capital ( ya se que es mucho riesgo ... yo soy asi ... no lo puedo evitar y que hay mejores metodos de gestion del dinero ) pero la cuestion no es eso ... lo que quiero es que cuando el ea realice una entrada, divida los lotes entre 5 ... me explico mejor .. supongamos que mi capital es de 175890 con mi sistema entraria con 17.5 lotes ... ok eso es lo que ocurre ... pero supongamos que mi capital es de 789540 los lotes serian 78.9 y no me gusta nada nada ... lo que querria es que dividiera entre 5 y realizara 15 compras ( o ventas ) de 5 lotes cada una y 1 compra ( o venta ) de 3.5 lotes ... creo que se me entiende
Muchas gracias compañeros por este foro y por la ayuda que dais ( estamos tan solos jejeje )
chemita
 
Mensajes: 6
Registrado: Sab Mar 13, 2010 8:06 am

Re: DIVIDIR LOS LOTES

Notapor raul » Lun Abr 12, 2010 7:18 am

Podrías hacerte una función que te vaya devolviendo los lotes a introducir. Sería algo así:

double getLotes(double lotesInicio = -1) {
static double lotesRestantes = 0;

if (lotesInicio!=-1) lotesRestantes = lotesInicio;

if (lotesRestantes>5) {
lotesRestantes=lotesRestantes-5;
return(5);
}
else {
double ret = lotesRestantes;
lotesRestantes = 0;
return (ret);
}
}

Al declarar la variable lotesRestantes como static, no pierde su valor, sino que lo mantiene cada vez que se entra en la función, y por eso lo podemos modificar después. Básicamente, devolvemos 5 si lotesRestantes es mayor que 5, y lotesRestantes si no, hasta que lotesRestantes sea igual a 0. Fíjate que el parámetro lotesInicio está puesto por defecto a -1.

Con esta función, ya sólo desde el start haríamos lo siguiente para abrir todas las posiciones:

double lotesCalculados = 78.5;

double lotesOrden = getLotes(lotesCalculados);
while (lotesOrden!=0) {
abrirPosicion(......, lotesOrden);
lotesOrden = getLotes();
}

La primera vez que llamamos a getLotes lo hacemos con los lotesCalculados, para inicializar la función. El resto de veces no, la llamamos sin parámetros.

Espero que te sirva, un saludo
raul
 
Mensajes: 14
Registrado: Sab Mar 13, 2010 7:53 am

Re: DIVIDIR LOS LOTES

Notapor raul » Lun Abr 12, 2010 7:21 am

También se puede hacer más corto sin función por medio, sería algo así:

double lotesCalculados = 78.5;

while (lotesCalculados>0) {
double lotes = 5;
if (lotesCalculados<lotes) lotes=lotesCalculados;

lotesCalculados = lotesCalculados-lotes;

abrirPosicion(........., lotes);
}
raul
 
Mensajes: 14
Registrado: Sab Mar 13, 2010 7:53 am

Re: DIVIDIR LOS LOTES

Notapor chemita » Lun Abr 12, 2010 12:34 pm

Que tal Raul .... un abrazo compañero .... Supongo que te acuerdas de mi ... jejeje como sabes yo soy novato novato novato gracias a vosotros ahora empiezo a enterarme. Ahora no paro de toquetear los eas a todas horas y estoy haciendo todo tipo de cositas ( unas con exito otras ... no tanto) bueno para ser justo estoy muy contento ... pero hasta que alcance algun nivel, pues comprendeme, me cuesta, me cuesta, ... gracias por la respuesta, pero me he puesto con ello y ocurre, pues lo que le ocurre a los que empezamos y es que en realidad, no tenemos ni idea y te dejas la piel, en cosas que parecen sencillas y no consigues que te salgan y otras mas complicadas pues va y suena la flauta es curioso ... entiendo bien lo que me pones en tu respuesta, pero llevarlo al ea me esta suponiendo un suplicio y se que es por que no tengo ni idea .. no estoy seguro de donde ponerlo y el 78.5 ¿de donde lo sacas? ( quizas es por el ejemplo que yo puse ... si es asi ese 78.5 varia despues de cada operacion ... en lugar del 78.5 ¿tendria que poner en vez de la cifra lo que yo uso ?) o quizas no, por que en el ejemplo era 78.9 ...
Si lo coloco despues de el int start ... me da un error de "abrirposicion" funcion no definida y bueno hay mas problemas .. me harias el favor de ponermelo un poco ... o mejor, mas mascado ... supongo que no lo tendre que añadir a lo que yo suelo poner y si lo tengo que añadir ¿donde? muchas gracias raul sobre todo por eso de la paciencia
chemita
 
Mensajes: 6
Registrado: Sab Mar 13, 2010 8:06 am

Re: DIVIDIR LOS LOTES

Notapor raul » Lun Abr 12, 2010 2:19 pm

Hola Chema, no te preocupes, que para ayudaros estamos...

Te lo he puesto un poco esquemático para que vieras cómo hacerlo. El 78.5 es un ejemplo, tú habías puesto 78.9, pero es sólo para darle un valor de ejemplo.

Supongo que tu cálculo lo haces con una función. En el start tendrás el resultado de esa función en una variable, que yo he llamado lotesCalculados. Si lotesCalculados=78.9 (el resultado del cálculo) sólo tendrías que poner a continuación lo siguiente para abrir las posiciones

while (lotesCalculados>0) {
double lotes = 5;
if (lotesCalculados<lotes) lotes=lotesCalculados;

lotesCalculados = lotesCalculados-lotes;

abrirPosicion(........., lotes);
}

Lo de abrirPosicion(.....) es la función de abrirPosicion de la librería que os pasamos en el curso, si no la estás usando, sería OrdenSend. Los puntos suspensivos son sólo para no poner todos los parámetros, ahí irían los parámetros de tipo de orden, precio, stop loss, etcétera.

Por cierto, en la librería hay una función para redondear los lotes, que es NormalizeLots, que redondea mejor que el DoubleToStr que estás usando, así que tu función, en lugar de:

double capital;
capital = AccountFreeMargin();
string aux;
Lots = (capital / 1000) * 0.1;
aux = DoubleToStr(Lots,1);
Lots = StrToDouble(aux);

Podrías escribirla simplificando un poco como:

Lots = NormalizeLots(AccountFreeMargin()/10000);

Que además te calculará también microlotes si tu broker los admite.

Un abrazo!
raul
 
Mensajes: 14
Registrado: Sab Mar 13, 2010 7:53 am

Re: DIVIDIR LOS LOTES

Notapor chemita » Mar Abr 13, 2010 6:44 pm

muchas gracias raul ... me pongo en esto y te cuento compañero
chemita
 
Mensajes: 6
Registrado: Sab Mar 13, 2010 8:06 am

Re: DIVIDIR LOS LOTES

Notapor chemita » Jue Abr 15, 2010 6:27 am

Muy buenas Raul que tal ... espero que bien .. estoy en esto y aun no lo consigo ... no te creas, que esto es dificilillo .. pero es parte de aprender .. mientras estoy en ello se me esta ocurriendo un añadido ... a ver que opinas ...
Vale ya esta claro que se utiliza el 10 % de el capital y que si ese 10 % es superior a 5 lotes pues divide ok pero dando un paso mas ..... a partir de tener mas de 10 merdados a la vez ... no podria entrar en las señales que se den ... ¿ se podria dividir el capital entre las ventanas ( se entiende que cada ventana es un mercado) y acontinuacion que ocurra lo del 10 % y claro lo de la division ?
chemita
 
Mensajes: 6
Registrado: Sab Mar 13, 2010 8:06 am

Re: DIVIDIR LOS LOTES

Notapor raul » Lun Abr 19, 2010 8:36 am

Creo que la única forma de automatizarlo es mediante variables globales, échale un vistazo a la ayuda de las funciones que empiezan por GlobalVariable.
raul
 
Mensajes: 14
Registrado: Sab Mar 13, 2010 7:53 am


Volver a Sistemas de Trading

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron