[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 11

 
Fox_RM:

Intenté abrir órdenes en una nueva barra allí usando la función NewBar(). ¿Si se utiliza para este fin?

Por ejemplo if (NewBar())i++; Algo así.

No me había fijado en NewBar, lo siento.

Entonces cambia lo siguiente: No es necesario calcular todo el indicador cada tick, si sólo abre operaciones en una nueva barra.

Por lo tanto, mueva todo el cálculo del indicador antes de comprobar las condiciones de apertura de una operación y cuente tantas barras como necesite (20 si no me equivoco)


Así que la estrategia es la siguiente:

1) ¿nuevo bar? no - paseo

2) sí - calcular todo lo que necesitamos (MA, indicador, todo lo demás para las condiciones)

3) Comprobar las condiciones - no - caminar

4) Sí - abrir al precio actual (Ask o Bid, respectivamente)

 
ilunga:

NewBar no se dio cuenta, me disculpo.

Entonces cambia lo siguiente: No es necesario que cuente todo el indicador cada tick si sólo abre operaciones en una nueva barra.

Por lo tanto, mueva todo el cálculo del indicador antes de comprobar las condiciones de apertura de la operación y cuente no tantas barras, sino tantas como necesite (20 si no me equivoco).

Eso es, 20. Entiendo más o menos cómo hacerlo. Por favor, explíqueme la diferencia entre mi cálculo y el cálculo de 20 barras para los Asesores Expertos.

Sólo quiero entender la esencia del error.

 
Fox_RM:
¡Buenos días a todos!
Decidí reescribir el código de mi indicador para un Asesor Experto para seguir
He decidido cambiar el código de mi indicador para seguir el funcionamiento de sus señales.
No tengo errores al compilarlo y funciona en el Probador de Estrategias sin errores.

No sé cómo usarlo.

Z.U. Estoy seguro de que hay muchos errores tontos, por favor, dispara balas de fogueo.

Es más fácil reescribir el código tal y como lo ves que resolver "qué estás bailando" aquí, por ejemplo:

  ArrayResize(MA1,Bars);ArrayResize(MA2,Bars);

No he encontrado cómo la función utilizada en los indicadores en el EA funcionará:

  int counted_bars=IndicatorCounted();  

Pero, si "lo que sea", el bucle que organizas:

   for(i=0; i<=limit; i++) 

Donde limit = Bars - counted_bars, en el 2º tick tomará un valor igual a 0, luego por código se le asignará un valor... OPA - y esto es un NUEVO MUNDO en la programación:

  if(limit>0) limit=0;

...intenta escribir esta condición así, si no rompe toda la estrategia:

  if(limit<=0) limit=1;
 
Fox_RM:

Es decir, ¿utilizar esta condición para recalcular las barras?

Pero en mi indicador, en cada tick se calculan las matrices TP_UP y TP_DN. Por lo tanto, hay que calcularlos primero.


De nuevo, el precio de apertura de OP_BUY==Pregunta, OP_SELL==Oferta.

Y tú tienes a Close[i].

 
Fox_RM:

Eso es, 20. Entiendo más o menos cómo hacer esto. Por favor, explique la diferencia entre mi cálculo y el cálculo de 20 barras para Expert Advisor SOLO.

Sólo quiero entender la esencia del error.

No hay ningún error como tal en el cálculo de todo el indicador. Piensa qué es más rápido:

1) contar barras (aproximadamente 10000) barras cada tick

2) contar 20 compases 1 vez por minuto (o incluso más)

 
Fox_RM:
¡Buenos días a todos!
Decidí reescribir el código de mi indicador para un Asesor Experto para seguir
He decidido cambiar el código de mi indicador para seguir el funcionamiento de sus señales.
No tengo errores al compilarlo y funciona en el Probador de Estrategias sin errores.

No sé cómo usarlo.

Z.I. Estoy seguro de que hay un montón de errores y estúpidos, por favor, disparar balas de fogueo.

NO ES PRINCIPAL, pero para simplificar el código, esta construcción:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Debería haber sido sustituido por una simple declaración de array con dimensionalidad:

double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM:

Eso es, 20. Entiendo más o menos cómo hacer esto. Por favor, explique la diferencia entre mi cálculo y el cálculo de 20 barras para Expert Advisor SOLO.

Sólo quiero entender la esencia del error.

Estos son PRINCIPALES {principios de programación FUNDAMENTAL - ¡no hagas cosas que no tienen sentido! :)))
 
Fox_RM:
Y otra pregunta relacionada con el funcionamiento de la biblioteca.
He creado el archivo de la biblioteca, lo he compilado y todo ha ido sin errores.
He importado la función en el código del indicador, lo he compilado y todo está bien también.
Cuando inicio el indicador, la función a importar no se ejecuta, cuando uso

código indicador, todo funciona. Aquí está el código de la biblioteca.

Se trata de una llamada en el código del indicador:

//+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link      "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn(double & ArrSr[])
{
double a=1,c,step=1/20;
for (int i=0;i<=20;i++)
{if (ArrSr[i]==0){a*=1;}else{a*=MathAbs(ArrSr[i]);}}
c=MathPow(a, step);
  return(c);
}
//+------------------------------------------------------------------+
 
Zhunko:

Vadim, has puesto un (&) tan pequeño que no se ve enseguida!..! :)))

¡Me pregunto cómo el autor (en la versión del autor) esta función se realizó en un lugar y no en otro! ;)

 
Fox_RM:

Eso es, 20. Entiendo más o menos cómo hacer esto. Por favor, explique la diferencia entre mi cálculo y el cálculo de 20 barras para Expert Advisor SOLO.

Sólo quiero entender la esencia del error.

Por cierto, me he dado cuenta de que declaras arrays de trabajo de tamaño 20:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Y su biblioteca calcula 21 elementos:

for (int i=0;i<=20;i++)

Puedo suponer que el bucle debe comenzar desde el 1:

for (int i=1;i<=20;i++)