Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 969

 
Sprut112:
El EA opera en una cobertura. ¿Tal vez habría que añadir algunas comprobaciones de serie?

¿Por casualidad lo estás probando en una cuenta de céntimos? En algunas cuentas de céntimos, el lote mínimo es de 0,1

 
Konstantin Nikitin:

Estoy operando normalmente en el probador, construcción 1960. Qué lote pongo, eso es lo que se lleva en 12 pares al mismo tiempo

¿Por qué el número 16 es un lote de 0,01?
 
Konstantin Nikitin:

¿Por casualidad estás probando en una cuenta de centavos? En algunas cuentas de céntimos, el lote mínimo es de 0,1

No, hay comprobaciones en los incrementos de mínimos y máximos de los lotes
 
Sprut112:
¿Y por qué el lote #16 0,01?

Si te refieres a mi foto, lo que funcionó fue el cierre parcial en el experto. Dice cerca.

Sprut112:
No, comprueba los incrementos mínimos y máximos de los lotes.
Así que tal vez esta comprobación busque un mínimo mayor que el actual y lo sustituya.
 
Konstantin Nikitin:

Si te refieres a mi foto, lo que funcionó fue el cierre parcial en el experto. Dice que está cerca

Así que tal vez esta comprobación busque un mínimo mayor que el actual y lo sustituya.
Podemos pensarlo así. No ocurre inmediatamente en el probador, alrededor de un mes después
 
Artyom Trishkin:

¿Por qué tu código no funciona como quieres en mql4 con #property strict?

¿Qué diferencia fundamental hay con el código que te ha mostrado Vladimir:

Y no hay ninguna diferencia en estas implementaciones. Y sólo hay una razón por la que su código no emite descripciones de texto - es la ausencia de #property strict en el código mql4.


No me di cuenta enseguida y pensé que no me funcionaba por la ausencia de =0, =1, etc...

enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };

pero resultó ser lo mismo...

string xx=EnumToString(Symboll_(1)); // resultado symbol_1

Debería haber conseguido NZDUSD

  в таком варианте всё Ок но не получается добавить символ с решёткой #CL
enum  Symboll_
  {
   AUDUSD,
   NZDUSD,
   USDCAD
   //#CL
  };
string xx=EnumToString(Symboll_(1)); // результат NZDUSD

Pero la variante de la matriz es justo lo que necesitaba...

 
xxz:

No lo conseguí enseguida y pensé que estaba fallando porque no tenía =0, =1, etc...

pero resultó ser lo mismo...

string xx=EnumToString(Symboll_(1)); // resultado symbol_1

Debería haber conseguido NZDUSD

Pero esta variante de matriz es justo lo que necesitaba...

Naturalmente, al emitir una enumeración a través de EnumToString(), no obtendrá una descripción de la variable detrás del "//", sino la propia variable tal cual.

Para imprimir la enumeración de la forma que desee, necesita hacer una función análoga a EnumToString(), que la imprimirá.

Para una enumeración como ésta:

enum ENUM_SYMBOL_NAMES
  {
   SYMBOL_NAME_AUDUSD,     // AUDUSD
   SYMBOL_NAME_NZDUSD,     // NZDUSD
   SYMBOL_NAME_USDCAD,     // USDCAD
   SYMBOL_NAME_USDCHF,     // USDCHF
   SYMBOL_NAME_USDJPY,     // USDJPY
   SYMBOL_NAME_EURJPY,     // EURJPY
   SYMBOL_NAME_EURUSD,     // EURUSD
   SYMBOL_NAME_GBPUSD,     // GBPUSD
   SYMBOL_NAME_SHARP_CL,   // #CL
  };
input ENUM_SYMBOL_NAMES InpNames; // Instrument

Así:

//+------------------------------------------------------------------+
string InstrumentToString(void)
  {
   string enm=EnumToString(InpNames);
   int index=StringFind(enm,"SHARP_");
   int shift=(index>WRONG_VALUE ? index+6 : 12);
   string name=StringSubstr(enm,shift);
   return(index>0 ? "#"+name : name);
  }
//+------------------------------------------------------------------+

Y llama:

Print(InstrumentToString());
 
double get_lot(int pair, double input_lots) {
   if(input_lots<min_lot[pair]) return(min_lot[ir]);
   return(input_lots);
 
Konstantin Nikitin


:

Si te refieres a mi foto, lo que funcionó fue el cierre parcial en el experto. Dice cerca.

Así que esta comprobación busca si el mínimo es mayor que el actual y lo sustituye.
 if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<0.1) dg=2; else
      if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<1.0) dg=1;

No creo que eso sea correcto.

 
Vladimir Karputov:

Mejor aún, exponga claramente lo que quiere conseguir. Probablemente le daré un ejemplo completo.

Una vez, en 2010, en invierno. También pedí para filtrar en un indicador, la esencia de los cuales: para dibujar el Mach & Min HLine con PERIOD_MN1 para iBars....))))

Lo descubrí por mi cuenta. Dominio de MT4.

Poco a poco, no inmediatamente, estoy dominando MT5.

...."Expresa claramente lo que quieres conseguir" FÓRMULA: Estoy convirtiendo (yo mismo) lo que programé (yo mismo) y al mismo tiempo estoy dominando (yo mismo) MT5 ))))


PERO lo que me has mostrado con ejemplos (visualmente) NO ha desaparecido.


SI ES ASÍ, volveré )))

Si SHO, volveré






 
Artyom Trishkin:

Naturalmente, al imprimir una enumeración utilizando EnumToString(), no se obtendrá una descripción de la variable, que está detrás de "//", sino la propia variable tal cual.

Para imprimirlo de la manera que quieres, necesitas hacer una función análoga a EnumToString(), que lo imprimirá.


Este es el problema, porque para resolver la tarea más sencilla hay que crear una función y esto es un montón de código que nadie necesita,

en lugar de una línea de diez...

Intento ser lo más conciso posible...

Originalmente, pude evitar este problema añadiendo una sola línea al código

            xx=iClose(Symbol_(i),0,50);
xx=iClose("#CL",0,50);

pero no me gustó sólo por la línea extra en el código...

No me gusta el código "sucio"...

Razón de la queja: