¡Salud! ¡Salud! - página 4

 
RaptorUK:
Para hacer lo que . . . no has explicado realmente lo que quieres hacer . . a pesar de que se te han hecho preguntas específicas . . si ignoras las preguntas que se hacen para que te ayuden entonces serás ignorado muy rápidamente.

turbo o no turbo
 
jameslarry:

turbo o no turbo
Bien, disfruta... no quieres ayuda.
 
Tengo un sistema que lo hace como yo quería lo voy a publicar a ustedes pronto
 

Bueno como parece que lo quieres lo más sencillo posible ya que eres un novato he buscado lo más fácil de entender.

extern double LotPerThousand=0.1;  // If you had 1000 balance what lot size would you use

int start()
{

double lots;

lots=NormalizeDouble((LotPerThousand/1000)*AccountBalance(),2);
if(lots<MarketInfo(Symbol(),MODE_MINLOT)){ lots=MarketInfo(Symbol(),MODE_MINLOT); }
if(lots>MarketInfo(Symbol(),MODE_MAXLOT)){ lots=MarketInfo(Symbol(),MODE_MAXLOT); }

...
OrderSend(Symbol(),OP_BUY,lots,...)
...

return 0;
}
 
tonny:
Bueno como parece que lo quieres lo más simple posible ya que eres un novato busqué lo más fácil de entender.
Lo siento tonny el tamaño del lote debe estar entre minlot y maxlot Y un múltiplo de lotStep.
double NormalizeLots(double lots, string pair=""){
    if (pair == "") pair = Symbol();
    double  lotStep     = MarketInfo(pair, MODE_LOTSTEP),
            minLot      = MarketInfo(pair, MODE_MINLOT);
    lots            = MathRound(lots/ls) * ls;
    if (lots < minLot) lots = 0;    // or minLot
    return(lots);
}
 
tonny:

Bueno como parece que lo quieres lo más sencillo posible ya que eres un novato he buscado lo más fácil de entender.


¡Bingo! Tonny esto es exactamente lo que quería que funciona en el probador de la estrategia y auto incrementa el tamaño del lote de mantener el porcentaje. Es mejor que mi anterior con innumerables sentencias if, ¡muchas gracias a todos! :-)
 
Bueno, acabo de recordar las matemáticas donde si a es a b entonces c es a... la fórmula sería (b/a)*c en este caso c es el saldo de tu cuenta. Y el resultado respeta la proporción de a:d, es decir, digamos que el resultado es d, entonces a:b es lo mismo que c:d y b:a es la misma proporción que d:a. Luego solo hay que poner la fórmula en normalize double para obtener un valor de lote redondeado con dos decimales en caso de que los cálculos devuelvan más decimales que dos de los cuales ordersend rechazaría como un tamaño de lote inválido. A partir de ahí comprueba si este valor es menor que el lote mínimo requerido, si es así utiliza el mínimo requerido y si es mayor que el lote máximo requerido entonces utiliza el máximo como valor del lote.
/* new value of lot would be (old lot/old balance)*new balance in this case we fix old balance at 1000 and new balance is the current balance i.e. (LotPerThousand/1000)*AccountBalance() */

lots=NormalizeDouble((LotPerThousand/1000)*AccountBalance(),2);                            // round two 2 decimal places incase more than 2 decimal places is returned
if(lots<MarketInfo(Symbol(),MODE_MINLOT)){ lots=MarketInfo(Symbol(),MODE_MINLOT); }        // if lower than minimum required use the minimum
if(lots>MarketInfo(Symbol(),MODE_MAXLOT)){ lots=MarketInfo(Symbol(),MODE_MAXLOT); }        // if higher than maximum required use the maximum
 
¡Muchas gracias!
 
WHRoeder:
Lo siento tonny el tamaño del lote debe estar entre minlot y maxlot Y un múltiplo de lotStep.

Estimado WHRoeder, por favor, no desorientar a la gente dando códigos que sólo tienen un montón de errores en ella, no se ha definido ls objeto en el código y le está dando a alguien a usarlo, por favor, deje su comportamiento travieso

 
tonny:

Bueno como parece que lo quieres lo más sencillo posible ya que eres un novato busqué lo más fácil de entender.


tonny muchas gracias por el código que diste, realmente funcionó muy bien



lo he encontrado desde hace 2 días e incluso he discutido con mi mujer sobre ello.


gracias