asesor experto - preguntas varias - página 33

 

MQL4:

MODE_LOTSTEP

24

Paso para el cambio de lotes


Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));

MQL5:

SYMBOL_VOLUME_STEP

Paso de cambio de volumenmínimo para la ejecución de la operación

doble


Print(" Step: ",SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

Así que le informa sobre el menor paso hacia arriba o hacia abajo en el tamaño de los lotes si es 0,01 entonces sus lotes tienen que coincidir con 0,01, 0,02, 0,03, 0,04 etc.

Si es 0.1 entonces su cambio en el tamaño de los lotes tendría que coincidir con 0.1, luego 0.2, luego 0.3, etc.

Así que no entiendo su:

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

¿Tal vez te refieres a un paso de lote diferente?

Normalmente no se cambiaría el valor porque es fijo para cada símbolo.

 
Max Enrik:
// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

Las cosas pueden ser confusas si se cambia el valor de una variable con nombre intuitivo. Yo sugeriría que lotstep sea siempre lotstep, nada más.

¿Qué tal algo así?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edición: lo siento, acabo de ver la respuesta de Marco. Estoy de acuerdo con la denominación de lotstep.
 

Marco vd Heijden:

Así que no entiendo su:

   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

¿Quizás te refieres a un paso de lote diferente?
Normalmente no se cambia el valor porque es fijo para cada símbolo.

Sí. Me refiero a un paso de lote diferente, así que cuando el tamaño del lote alcanzó el tamaño del lote 1.00 para EURUSD. Entonces necesito aumentar el tamaño del lote en 1.00. Antes de que el tamaño del lote llegue a 1.00 - el tamaño del lote aumenta 0.01, 0.02 etc. ( que quiero ) - pero después de que el tamaño del lote alcance 1.00 - entonces el tamaño del lote aumenta 1.00, 2.00, 3.00, etc.
Eso es lo que quiero hacer en este subtema.

Gracias mucho más.

 
honest_knave:

Las cosas pueden ser confusas si cambias el valor de una variable de nombre intuitivo. Yo sugeriría que lotstep sea siempre lotstep, nada más.
¿Qué tal algo así?

   double increment = (lotsize < lotstep*100) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? increment*10 : increment));
Edición: lo siento, acabo de ver la respuesta de Marco. Estoy de acuerdo con la denominación de lotstep.

( Yo sólo poco cambiado no - ... ? lotstep : lotstep*100 - ...? lotstep : lotstep*10 )

Sí. En mi código original las cosas se confunden.
Después de su gran ayuda, resuelvo mi problema. Muchas gracias.

También me gustaría que el tamaño del lote aumentara así.
Así que el tamaño del lote aumenta así 0.99, 1.00, 1. 01, 1.11.
Pero necesito así 0.99, 1.00, 1.10, 1.20 etc.

Gracias de antemano.

 

Creo que 0,99, 1,00, 1,01, 1,02. sería la mejor idea.

Se adhieren al paso más pequeño disponible, supongo.

¿Por qué quieres tomar estos pasos ULTRA GRANDES?

¿Lo has probado?

Por favor, inténtalo.
 
Marco vd Heijden:

Creo que 0,99, 1,00, 1,01, 1,02. sería la mejor idea.
Se adhieren al paso más pequeño disponible supongo.
¿Por qué quieres tomar estos pasos ULTRA GRANDES?
¿Lo has probado?

Por favor, inténtalo.

Ya lo he probado, creo que si necesito alcanzar el tamaño de lote 5.00 debería 40 veces hacer clic en el botón de lote más ( + ctrl ).

 

Vaya, ¿y por qué cinco?

Puedes usar + y - en lugar de *

lotsize=lotsize+0.1;
lotsize=lotsize-0.1;

Pero hay una línea en mi robot que lo salva de la destrucción total y es esta:

static input double lotsmax=1;// Max Lots (please respect the setting)
 
Marco vd Heijden:

Pero hay una línea en mi robot que lo salva de la destrucción total y es esta:

Eso es absolutamente cierto, también por supuesto que respeto esa configuración.

Pero esto es sólo una cuestión - Quiero decir que puedo ajustar en cualquier momento.
Tal vez necesito un poco de experiencia sobre ese tamaño de lote.

Creo que este subtema podría cerrarse por ahora.

Gracias @Marco vd Heijden y @honest_knave

#Paso de lote - Cerrado

 

#Lot Size Max - Open

@Marco vd Heijden- muchas gracias más por su último comentario, que es me inspiró a escribir esta parte del código para mi EA. ( Acabo de dejar de escribir otras funciones - que trato de escribir este antes que otros )

Así que, como por lo general trato de probar algo para el tamaño del lote máximo.
Cuando el tamaño del lote es mejor que el tamaño del lote máximo, la función de impresión no me deja sobre el modo de comercio.
Después de resolver este problema, necesito poner esta función de botón de venta y compra.

P:¿Cómo puedo hacer que la función de impresión me permita conocer el modo de operación? ( - tamaño del lote mejor que el tamaño del lote máximo o menos que él )
P:¿Es este método útil para el tamaño de lote máximo?

Gracias de antemano.

void example()
  {
   string trademode;
   ENUM_ACCOUNT_TRADE_MODE accounttype=(ENUM_ACCOUNT_TRADE_MODE) AccountInfoInteger(ACCOUNT_TRADE_MODE);

   if(accounttype==ACCOUNT_TRADE_MODE_DEMO)
     {
      switch(accounttype)
        {
         case ACCOUNT_TRADE_MODE_DEMO:
            if( lotsize > ( lotstep * lotsizemax ) ) return;
            trademode="demo";
            break;
         case ACCOUNT_TRADE_MODE_CONTEST:
            trademode="contest";
            break;
         default:
            trademode="live";
            break;
        }
     }
   Print("Trade Mode: ",trademode);
  }
 

No hay eso para verificar si es una cuenta demo o una cuenta real, el concurso se utiliza raramente.

Lote máximo puede ser muy fácil.

//---
// calculate lotsize here
//---

// check if lotsize is not too high

if(lotsize>lotsize_max)
{
  lotsize=losize_max;
}