Una pregunta para los conocedores de MQL - página 8

 

Gracias.

 

Buenas tardes a todos.

Por favor, avisa. El indicador muestra las líneas de precios de los instrumentos y

Hay un comentario de texto a la derecha: sus nombres y tamaños de posición.

Todo funciona bien. Siempre y cuando no ponga el indicador en el gráfico de los instrumentos con cotizaciones de 5 dígitos.

Las líneas de precios están dibujadas. Pero el comentario de la derecha desaparece por completo. O bien, se muestran ceros en lugar de tamaños de posición.

El registro muestra CERO DIVIDENCIA (ver el gráfico de Alpari)

- en el EURUSD y GBPUSD - en lugar del tamaño se muestran ceros...

Creo que esto tiene que ver con el cálculo de los tamaños de posición:

double vol1=1, vol2, vol3, k1;

  k1=MarketInfo(Symbol_1, MODE_TICKVALUE)*iOpen(Symbol_1,0,0)/
     MarketInfo(Symbol_1, MODE_TICKSIZE);

  vol2=k1/(MarketInfo(Symbol_2, MODE_TICKVALUE)*iOpen(Symbol_2,0,0)/
           MarketInfo(Symbol_2, MODE_TICKSIZE))*vol1;

  vol3=k1/(MarketInfo(Symbol_3, MODE_TICKVALUE)*iOpen(Symbol_3,0,0)/
           MarketInfo(Symbol_3, MODE_TICKSIZE))*vol1;

    // пишем комментарий в окне индикатора с правой стороны: 
 object("Symbol1", DoubleToStr(N1,0)+"*"+Symbol_1+" -"+DoubleToStr(vol1,2), 10, indicator_color1, 5);
 object("Symbol2", DoubleToStr(N2,0)+"*"+Symbol_2+" -"+DoubleToStr(vol2,2), 10, indicator_color2, 18);
 object("Symbol3", DoubleToStr(N3,0)+"*"+Symbol_3+" -"+DoubleToStr(vol3,2), 10, indicator_color3, 31);
 object("SymbolS", "AVERAGE", 10, indicator_color4, 44);   
           

Ratio k1=MarketInfo(Symbol_1, MODE_TICKVALUE)..../MarketInfo(Symbol_1, MODE_TICKSIZE)

da "división por cero" a 5 dígitos.

Por favor, aconséjeme cómo solucionarlo.

 

Por favor, díganme si existe un script o indicador que muestre las transacciones realizadas anteriormente en el historial, como por ejemplo desde tal fecha hasta tal otra. Ochen. cosa útil en mi opinión

Gracias,

Yuri

 
leonid553:

Buenas tardes a todos.

Por favor, dígame cómo arreglar esto.


En palabras sencillas, intente sustituir MODE_TICKSIZE por MODE_POINT. Pero, en realidad, hay que reescribir el código para tener en cuenta los nulos de MarketInfo()
 
tyn:

Por favor, díganme si existe un script o indicador que muestre las transacciones realizadas anteriormente en el historial, como por ejemplo desde tal fecha hasta tal otra. Muy. útil en mi opinión

Creo que sería muy útil,

Yuri

https://www.mql5.com/en/code - guión. Puede establecer el plazo en el historial de su terminal.

VisualOrders.mq4 - indicador

Archivos adjuntos:
 

Buenas tardes.

En mt4 EXNESS mis indicadores "multimoneda", por alguna razón, funcionan sólo cuando el Internet está conectado (a diferencia de mt4 de otras empresas de corretaje).

Me da un error cuando no lo uso y me da una respuesta negativa. El registro da un "zerodive".

Cuando me conecto a Internet, a menudo tengo que hacer clic primero en la TF para que aparezcan las líneas de los índices.

¿Podría decirme cuál es el problema y cómo solucionarlo?

Cuando se apaga Internet:

Cuando está conectado:

 
leonid553:

Buenas tardes.

En mt4 EXNESS mis indicadores "multimoneda", por alguna razón, funcionan sólo cuando el Internet está conectado (a diferencia de mt4 de otras empresas de corretaje).

Me da un error cuando no lo uso y me da una respuesta negativa. El registro da un "zerodividi".

Cuando me conecto a Internet, a menudo tengo que hacer clic primero en la TF para que aparezcan las líneas de los índices.

¿Podría decirme cuál es el problema y cómo solucionarlo?

Cuando se apaga Internet:

Cuando está conectado:


Es algo normal. Ocurre a menudo, y no siempre se puede afrontar. Aunque la división por cero se puede arreglar. El problema es la falta de un entorno de mercado la mayoría de las veces.
 

No lo entiendo, Víctor.

¿Es esto algo "normal"? ¡Es claramente un fallo!

No entiendo el término "sin entorno de mercado".

Si fijamos la división en cero, ¿aparecerán las líneas de precios? No lo creo.

El comentario en la esquina derecha de la ventana del indicador se muestra normalmente. Es decir, las funciones ObjectCreate, etc. funcionan normalmente.

Del mismo modo, los cálculos matemáticos cuyos números se establecen en el comentario funcionan normalmente.

Sólo quedan las líneas de precio del indicador. No hay nada más allí.

Las líneas de precios se fijan en topes. Cada línea de precio es sólo una diferencia entre dos MA:

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;      limit=Bars-counted_bars;
  //---- основной цикл
 for(int i=0; i<limit; i++)       {
 
   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
  .... ....

¡Así que esta es la parte que da la "división de cero"! Pero aquí no hay ninguna división, ¡y mucho menos división por cero!

Por lo tanto, el error en este caso es devuelto por el servidor (o plataforma) desde el fondo? O tal vez los desarrolladores de MT4 no han considerado tal fallo y han establecido "el retorno dividido en cero" que no corresponde exactamente a la esencia de tal error.

¿Y por qué el indicador funciona bien en MT4? ¿Por qué el indicador funciona normalmente?

¿Cómo pueden ser las plataformas similares para que este simple código funcione de forma diferente en ellas?

 

La división por cero puede manejarse, pero también es necesario que el indicador funcione correctamente. Esto es más difícil.

 

Lo que teóricamente podría estar mal con este simple código (para 4 líneas)):

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;
     limit=Bars-counted_bars;

  //---- основной цикл
 for(int i=0; i<limit; i++)       {
   //РИСУЕМ ЛИНИИ СИМВОЛОВ, ЕСЛИ ИМЕЮТСЯ БАРЫ

   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
   Symbol2[i]= N2*
     (iMA(Symbol_2,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false))-
     iMA(Symbol_2,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false)))  ;
   Symbol3[i]= N3*
     (iMA(Symbol_3,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false))-
     iMA(Symbol_3,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false)))  ; 
   Symbol4[i]= N4*
     (iMA(Symbol_4,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false))-
     iMA(Symbol_4,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false)))  ;
    
      
      
   }
   return (0);
} // конец функции СТАРТ