Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1948

 
Vitaly Muzichenko #:

Hay que tener en cuenta el coste del artículo

Te puedo dar el código, pero tardarás mucho en entenderlo, es grande, además tiene en cuenta el lote máximo posible en el margen

Si no puedo hacerlo, haré preguntas))) Por supuesto, hay que tener en cuenta el valor de los puntos y la fórmula no es de 2 pasos. Me cuesta no entender del todo los términos, y comprobar la corrección de los supuestos lleva tiempo)) El valor del contrato = el valor de un lote en dinero día calculado))))

 

Buenos días, por favor, aconsejen cómo devolver un valor de una lista de constantes en forma de texto.

Por ejemplo, la función HistoryDealGetInteger devuelve el valor int de la listaENUM_DEAL_TYPE al solicitar el evento. ¿Cómo podemos obtener información del número devuelto que es "DEAL_TYPE_CREDIT - credit accrual. Entonces, después de la depuración, este valor no será, por supuesto, necesario, int será suficiente para procesar el evento, pero durante la depuración no está nada claro qué significan los números 3 o 5 devueltos por la función.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Свойства сделок - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Кирилл Якимов #:

Buenos días, por favor, aconsejen cómo devolver un valor de una lista de constantes en forma de texto.

Por ejemplo, la función HistoryDealGetInteger devuelve el valor int de la listaENUM_DEAL_TYPE al solicitar el evento. ¿Cómo podemos obtener información del número devuelto que es "DEAL_TYPE_CREDIT - credit accrual. Entonces, después de la depuración, este valor no será por supuesto necesario, int será suficiente para procesar el evento, pero durante la depuración no está nada claro qué significan los números 3 o 5 devueltos por la función.

string s = EnumToString((ENUM_DEAL_TYPE) x)

 
Maxim Kuznetsov #:

string s = EnumToString((ENUM_DEAL_TYPE) x)

Muchas gracias, me ha servido de ayuda.
 

Me pueden decir cómo resolver:

1) No he cargado el historial, en la ventana del gráfico durante el proceso en línea tuve tiempo de cargar 70 000 barras de minutos. Estoy cargando mi Asesor Experto en el Probador de Estrategias y por si acaso he escrito el número mínimo de barras para un determinado patrón, me responde con "no hay suficientes barras para el análisis". Imprimo iBars y dice 1200 barras. He cargado la historia (8 000 000 barras). Reiniciado, la configuración muestra barras "9999999999" en la ventana y en el historial. Nova escribe "no hay suficiente historia". Imprimir iBars, de nuevo 1200. ¿Qué es esto y cómo solucionarlo?

2) En el análisis multidivisa, ¿cómo puedo forzar al indicador a no perder los nuevos ticks entrantes en otros pares de divisas, si las cotizaciones se congelan de repente en el gráfico actual y OnTick no llama a la comprobación? He probado OnTimer pero no funciona en el probador

 
En este script, estoy experimentando con el redimensionamiento de arrays dinámicos que tienen diferentes direcciones de indexación - con el fin de entender de qué lado aparecen las nuevas celdas después de aumentar el tamaño del array
void OnStart()
  {
   
   int a[], b[], size = 5, new_size = size + 5;
   
   if( ArraySize( a ) != size )
     ArrayResize( a, size, 0 );
   
   if( ArraySize( b ) != size )
     ArrayResize( b, size, 0 );
   
   if( ArrayGetAsSeries( a ) )
     ArraySetAsSeries( a, false );
   
   if( !ArrayGetAsSeries( b ) )
     ArraySetAsSeries( b, true );
   
   for( int i = 0; i < size; i++ )
     {
      a[i] = i;
      b[i] = i;
     };
   
   ArrayResize( a, new_size, 0 );
   ArrayResize( b, new_size, 0 );
   
   for( int i = 0; i < new_size; i++ )
     {
      Alert( "a", i, " ", a[i] );
      Alert( "b", i, " ", b[i] );
      Alert(" ");
     };
   
  }

Y aquí está el resultado


Resulta que el array b[] (que tiene indexación inversa) de alguna manera duplica sus valores después de aumentar el tamaño

. ¿Por qué? ¿Me he perdido algo o he cometido algún error?
 
Alexandr Sokolov direcciones de indexación - con el fin de entender de qué lado aparecen nuevas celdas después de aumentar el tamaño del array

Y este es el resultado


Resulta que el array b[] (que tiene indexación inversa) tiene de alguna manera valores duplicados después de aumentar el tamaño

¿Por qué? ¿Me he perdido algo o he cometido algún error?

En cualquier caso, no podemos confiar en los valores de las nuevas celdas de la matriz: son variables no inicializadas que pueden contener cualquier basura.

 
Alexandr Sokolov direcciones de indexación - con el fin de entender de qué lado aparecen nuevas celdas después de aumentar el tamaño del array

Y este es el resultado


Resulta que el array b[] (que tiene indexación inversa) tiene de alguna manera valores duplicados después de aumentar el tamaño

¿Por qué? ¿Me he perdido algo o he cometido algún error?

Hay que dar la vuelta a la matriz después de haberla llenado.

 
JRandomTrader #:

En cualquier caso, no podemos confiar en los valores de las nuevas celdas de la matriz: son variables no inicializadas que pueden contener cualquier basura.

Cierto, pero hay 2 peros
1) El reflejo se observa en cualquier otro tamaño y no sólo, como en mi ejemplo - 5
2) Si un array tiene indexación inversa, entonces las nuevas celdas deberían aparecer al principio del array - lo que no es el caso

 
Alexey Viktorov #:

Hay que voltear el array después de llenarlo.

Yo también pensé en eso, al menos no veo otra solución por el momento

Razón de la queja: