Dividir la posici�n del lote de manera uniforme

 

Publi

Resultados 1 al 7 de 7

Tema: Dividir la posici�n del lote de manera uniforme

  1. #1
    Otra solicitud antes de dejar de piratear el c�digo: confiar en que alguien haya hecho algo similar.

    Estoy dando la opci�n de una posici�n dividida en X cantidad de lotes solicitados.

    Es decir, el consumidor puede haber solicitado 1 lote normal, o un c�lculo de riesgo que equivale a 1 lote normal, y tambi�n dividir esa posici�n en 3 transacciones m�ltiples.

    Entonces, solo necesito el c�digo para dividir ese lote en 3 tama�os y, obviamente, cuidar el redondeo adecuado de los n�meros y la posibilidad de que no sean n�meros pares.

    Entonces, supongo que en esta circunstancia regresar�a con 3 lugares diferentes de algo como:

    Posici�n 1: 0,35
    Posici�n 2: 0,35
    Clasificaci�n 3: 0,3

    Ah, y si tiene en cuenta la posici�n m�nima de los corredores, etc., estar�a bien.

    Mucho aprecio su tiempo.

  2. #2

    Cita Iniciado por ;
    He tenido la intenci�n de agradecerles por esto, pero solo lo estoy probando y obtuve un resultado divertido al dividir 0.3 en 3 lugares: regresa con 1st pos= 0.09000000 2nd pos= 0.10500000 3rd pos= 0.10500000 impar? Obviamente esperar�a que los 3 lugares fueran 0.1
    Hey chico, esto es RARO. Una vez que uso la f�rmula id�ntica en Excel (es decir, reemplazo MathFloor() con INT()), funciona tal como se esperaba, es decir, lotes1 = 0.1 lotes2 = 0.1 lotes3 = 0.1 Sin embargo, cuando lo intento en Go Markets MT4, obtengo lotes1 = 0,09 lotes2 = 0,10 lotes3 = 0,11 Por lo tanto, creo que hay un error de redondeo en la funci�n MathFloor() de MT4. He compuesto una funci�n MathInt() que se ocupa de ese error. El n�mero 'n' ABAJO se redondea a 'hab�a' lugares decimales. Si omite el segundo par�metro, se supone que es 0: p. MathInt(5.33,0) devolver� 5 MathInt(5.99) devolver� 5 (se supone que el siguiente par�metro es 0) MathInt(5.66,1) devolver� 5.6 (redondeado HACIA ABAJO a 1 decimal) Intente lo siguiente (incluya MathInt() funci�n por la conclusi�n de su EA): Inserted Code dual minlot = MarketInfo(Symbol(),MODE_MINLOT); lotes dobles = #91;lotes a dividir #93;; dual lotes1 = minlot*#91;b#93;#91;color=red#93;MathInt#91;/color#93;#

  3. #3
    He tenido la intenci�n de agradecerle por esto, pero solo lo estoy probando y tengo un resultado humor�stico al dividir 0.3 en 3 posiciones. �Vuelve junto con 1st pos= 0.09000000 2nd pos= 0.10500000 3rd pos= 0.10500000 impar? Espero que las 3 posiciones sean 0.1

  4. #4

    Cita Iniciado por ;
    Otra solicitud antes de ir a piratear el c�digo: confiar en que alguien haya hecho algo similar. ....
    Pipmyride, suponiendo que lo entiendo correctamente, el siguiente c�digo debe dividir el valor en lotes en lotes 1, lotes 2, lotes 3, de la manera m�s uniforme posible, de la manera que usted describi�, dado que el tama�o de lote/tama�o de paso m�nimo permitido del corredor es minlot : C�digo insertado double minlot = MarketInfo(Symbol(),MODE_MINLOT); lotes dobles = #91;lotes a dividir #93;; double lotes1 = minlot*MathFloor(lots/3/minlot); double lotes2 = minlot*MathFloor((lots-lots1)/2/minlot); lotes dobles3 = lotes-lotes1-lotes2; Pru�balo y ver�s. Por favor publique si no funciona y lo investigar� m�s a fondo. Saludos, David [EDIT] Aviso: el tama�o de lote m�nimo permitido viene dado por: double minlot = MarketInfo(Symbol(),MODE_MINLOT); El tama�o del paso viene dado por: double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);

  5. #5
    Golpeando en caso de que se haya pasado por alto

  6. #6
    Algo parecido a... C�digo insertado lotes dobles = 9.7 int NumTrades = 3; double MinLot = MarketInfo(Symbol(), MODE_MINLOT); double MinTotal = NumTrades * MinLot;/Averiguar el multiplicador double MinlotTest = MinLot; int TenPotencia = 0; while(MinlotTest lt; 1.0) MinLotTest *= 10.0; TenPower ; if(Lots gt;= MinTotal) Resto = MathMod(MathPow(10.0, TenPower * 1.0), NumTrades)MathPow(10.0, TenPower * 1.0); PerTrade = NormalizeDouble(MathPow(10.0, TenPower * 1.0)NumTrades, 0)MathPow(10.0, TenPower * 1.0); Primera Operaci�n = Por Operaci�n Resto; else FirstTrade = Lotes; PedidoEnviar(PrimerTrade); if(FirstTrade! = Lots) for(int Trades = NumTrade; Trades gt; 1; Trades--) OrderSend(PerTrade); Algo como esto.

  7. #7
    Eres el JEFE. Muy apreciado, como de costumbre, lo probar� pronto.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Cookies
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información y política de cookies aquí.