Preguntas de un "tonto" - página 63

 
masharov:

El asesor experto utiliza el indicador en un marco temporal diferente. En las pruebas el EA muestra datos incorrectos del indicador.

El propio EA funciona en M5, y el indicador en H4. Los indicadores que se llaman en el mismo marco temporal (M5) devuelven los valores correctos.

Los valores devueltos son similares a los valores del indicador, pero son diferentes de los valores reales que son visibles cuando el indicador se aplica a la ventana del gráfico de precios.

¿Cuál es el problema?

Ejemplo de código de llamada al indicador:

Posibles causas:

- no se respeta la regla de los 14 primeros compases: https://www.mql5.com/ru/articles/15 en el indicador;

- la correlación entre el TF actual y el preestablecido no se cumple (por ejemplo, el número de serie de la barra con el valor requerido del extremo en otro TF probablemente será diferente, que en el preestablecido, y en consecuencia el alto, bajo, etc. será diferente) - todo esto depende de la realización específica del indicador; usted debe entender claramente lo que exactamente debe ser correlacionado y recalcular de acuerdo a la fórmula utilizando la correlación de diferentes períodos;

- tal vez, los antiguos valores de los indicadores del tick anterior queden en el buffer, y puede ser necesario reiniciar el buffer con valores vacíos: ArrayInitialize(array,EMPTY_VALUE).

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
x100intraday:

Posibles causas:

- la regla de las primeras 14 barras no se cumple: https://www.mql5.com/ru/articles/15 en el indicador;

- La correlación entre el TF actual y el preestablecido no se observa (por ejemplo el número de serie de la barra con el valor requerido de un extremo en otro TF debe ser diferente, que en el preestablecido, y en consecuencia el alto, bajo, etc. será diferente) - todo esto depende de la implementación particular del indicador;

- quizás, los valores antiguos del tick anterior quedan en el indicador, y puede ser necesario reiniciar el buffer con valores vacíos: ArrayInitialize(array,EMPTY_VALUE).

1. el indicador se dibuja en todas las barras del gráfico de precios.

2. Todo está bien aquí.

3. no ayudó

 

La referencia dice que la fecha/hora se puede representar así:

D'12:00:00'

Asigno un valor a una variable de tipo datetime:

 datetime start = D'12:00:00'

Aparece una advertencia en la compilación:

¿Por qué?

 
Urain:
Como no se especifica ninguna fecha, sólo se especifica la hora 12:00:00. La fecha se escribe con punto, no con dos puntos.

La referencia dice que:

Se puede omitir la fecha (año, mes, fecha) o la hora (horas, minutos, segundos) o todo junto. La gama de valores va del 1 de enero de 1970 al 31 de diciembre de 3000.

Ejemplos:

D'2004.01.01 00:00' // Año Nuevo
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //año nuevo d'1980.07.19 12:00:00'
D'01 .01.2004' //equivalente D'01.01.2004 00:00:00'
D'12:30:27' //equivalente a D'[fecha de compilación] 12:30:27'
D' '//equivalente a D'[fecha de compilación] 00:00:00''

...

¿O es que lo he entendido mal?

 
masharov:

El propio EA se ejecuta en M5 y el indicador en H4. Los indicadores que se llaman en el mismo marco temporal (M5) devuelven los valores correctos.

Sigo insistiendo en el segundo punto.

Usted mismo escribe que en la misma TF se devuelven los valores correctos. En las diferentes, por supuesto, se devolverán valores que no se esperan para la TF actual.

masharov:

Los valores devueltos son similares a los valores del indicador, pero son diferentes de los valores reales que son visibles cuando el indicador se adjunta a una ventana de gráfico de precios.

Es probable que los valores similares no provengan del techo, sino de uno de los TF que no es igual a M5. Si la TF actual es H4, entonces los valores probablemente provienen de ella, mientras que se esperan valores de M5. Si volvemos a afinar el código de M5 a H4, lo más probable es que al encontrar valores en H4 se puedan coger valores correctos exactamente para H4 (para otros TF se verán incorrectos).

Si el indicador es capaz de devolver los valores correctos de acuerdo con uno u otro TF, pero no es capaz, digamos, en M5, de mostrar lo que hace en H4, entonces ¿qué podemos esperar de los valores devueltos cuando se trabaja junto con el Asesor Experto que no está en el mismo TF?

 
tol64:

La referencia dice que:

Se puede omitir la fecha (año, mes, fecha) o la hora (horas, minutos, segundos) o todo junto. La gama de valores va del 1 de enero de 1970 al 31 de diciembre de 3000.

Ejemplos:

D'2004.01.01 00:00' // Nochevieja
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //año nuevo d'1980.07.19 12:00:00'
D'01 .01.2004' //equivalente D'01.01.2004 00:00:00'
D'12:30:27' //equivalente a D'[fecha de compilación] 12:30:27'
D' '//equivalente a D'[fecha de compilación] 00:00:00''

...

¿O es que lo he entendido mal?

Sí, sí, has acertado, no estaba prestando atención con las prisas.

Al parecer, era así originalmente y luego se anuló y no se corrigió el certificado.

De todas formas la pregunta sigue en pie, ¿es una inexactitud de la ayuda o un error?

 

Urain:

...

De todas formas la pregunta sigue en pie, ¿es una inexactitud de la ayuda o un error?

Un ejemplo de guión:

void Set_Start_And_End_TradeSession()
{
 datetime start = D'00:45:00';
 datetime array[];
 int s = 0, e = 0, i = 0;
 long chart_ID = ChartID();
 long count_bars = Bars(Symbol(),0);
 
 CopyTime(Symbol(),0,0,(int)count_bars,array);
 
 ArraySetAsSeries(array,true);
 
 for(s = 0; s < count_bars; s++)
   {
    ObjectCreate(chart_ID,"start_date",OBJ_VLINE,0,array[s],0); ChartRedraw();
    Sleep(50);
    if(array[s]==start) { Comment("Ok!!!"); break; }
    if(i==1441) { Comment("Error!!!"); break; }
    i++;
   }
}
Así es como funciona. Simplemente no me gustan las advertencias después de la compilación)). Quizá alguno de los desarrolladores pueda comentar algo.
 
Urain:

En cualquier caso, la pregunta sigue en pie, ¿es una inexactitud en la ayuda o un error?

Las advertencias del compilador todavía no significan que haya un error. Imprímelo: todo está reflejado según la Ayuda.
 
masharov:

El asesor experto utiliza el indicador en un marco temporal diferente. En las pruebas el EA muestra datos incorrectos del indicador.

El propio EA funciona en M5, y el indicador en H4. Los indicadores que se llaman en el mismo marco temporal (M5) devuelven los valores correctos.

Los valores devueltos son similares a los valores del indicador, pero son diferentes de los valores reales que son visibles cuando el indicador se aplica a la ventana del gráfico de precios.

¿Cuál es el problema?

Ejemplo de código de llamada al indicador:

El indicador AS_SERIES no puede establecerse en matrices multidimensionales ni en matrices estáticas.

Prueba con

void OnNewBar() // моя функция
{
 double wave[];
 ArraySetAsSeries(wave, true);
 CopyBuffer(W_handle,0,(int)0,2,wave);
 if (wave[1] > 0) Buy(); 
}

o como sigue

void OnNewBar() // моя функция
{
 double wave[1];
 if(CopyBuffer(W_handle,0,(int)1,1,wave)<1) return;
 if (wave[0] > 0) Buy(); 
}
 
  string Symb="EURUSD";
  for(i=0;i<OrdersTotal()+PositionsTotal();i++)
     {
      if(Symb==PositionGetSymbol(i)) Orders_Total++;
     }
     Alert(Orders_Total);
Podrían decirme por qué la alerta muestra Orders_Total=1, cuando en realidad hay una posición y un pedido, es decir, en teoría debería mostrar 2, no 1.