[¡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 543

 

Hola a todos.

He finalizado mi primer experto. La tarea original consistía en plasmar mi idea en forma de código.

Te pido que eches un vistazo a mi EA y des tu opinión.

¡Muchas gracias por su ayuda en la redacción del EA!

La lógica del Asesor Experto es la siguiente:

-El precio rompe el nivel del RSI (condición 1),

-Entonces usando una bandera cumple la segunda condición (romper el máximo o el mínimo en n barras)

-También introduje una función para evitar la apertura de una segunda orden mientras la primera está abierta.

Una vez más, el objetivo era escribir un EA correctamente. Por favor, señale mis errores y deficiencias.

Se lo agradezco de antemano.

Archivos adjuntos:
proboitrsi.mq4  12 kb
 
Gracias.
 
Pacman:

Hola a todos.

He finalizado mi primer experto. La tarea original consistía en plasmar mi idea en forma de código.

...

He decidido hurgar un poco en su código.

1) Lo que falta es init() y deinit(),

2) Esto:
for(int i=1; i<=OrdersTotal(); i++)
      {
       if(OrderSelect(i-1,SELECT_BY_POS)==true)
         {
          if(OrderSymbol() == Symb)
            {
             if(OrderMagicNumber()==777)
                return;
            }    
         }   
      }

puedes hacerlo así:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {   if(OrderSymbol() != Symb) continue;
          if(OrderMagicNumber() != 777) continue;
          return;
      }
   }
}

3) Esto.

Symb=  Symbol();
...
Min_Lot= MarketInfo(Symbol(),MODE_MINLOT);
...
Steep=   MarketInfo(Symbol(),MODE_LOTSTEP);

escribir en init(), basta con definirlas una vez en la inicialización, no en cada tic, porque"la llamada a la función lleva más tiempo que la referencia a la variable".

4) La lógica de este post no me queda clara

while(true)
...

¿Cuándo puede ser falso?

Esto es sólo un poco de lo que directamente me llamó la atención.

 
paladin80:

Decidí hurgar un poco en tu código.


3) Estos.

poner en init(), basta con definirlas una vez en la inicialización, no en cada tic, porque "la llamada a la función lleva más tiempo que la referencia a la variable".


No olvides que en init() el entorno de mercado no siempre está disponible
 
Vinin:
No olvide que el entorno del mercado no siempre está disponible en la función init()
Ya sabes que siempre hay una solución para la "mierda complicada": el valor correcto se obtiene a través de un bucle.
 
TarasBY:
Ya sabes que siempre hay una solución a la "mierda complicada": obtienes el valor correcto a través de un bucle.

Hay limitaciones de tiempo para la función init()
 

Por la noche.

El EA controla varios pares en varios marcos. Cómo hacer que reaccione no sólo a los ticks del par/ventana al que está unido, sino a los ticks de todos los pares. Gracias.

int inicio()

{

doble MA50 [4][9];

doble OBarHigh [4][9];

doble OBarLow [4][9];

for (int t=0; t<=3; t++) // marco temporal

{

for (int p=0; p<=8; p++) // par

{

MA50[t][p]=iMA(par[p],tframe[t],50,0,MODE_EMA,PRICE_CLOSE,0);

OBarHigh [t][p]=iHigh(par[p],tframe[t],0);

OBarLow [t][p]=iLow(par[p],tframe[t],0);

 
imux:

Por la noche.

El EA controla varios pares en varios marcos. Cómo hacer que reaccione no sólo a los ticks del par/ventana al que está unido, sino a los ticks de todos los pares. Gracias.



Tal vez un EA en bucle ayudaría
 
Vinin:

Hay limitaciones de tiempo para que la función init() funcione
En mi EA saco al menos una docena de valores del entorno de mercado en init(). En la etapa inicial a veces había problemas - ahora todo funciona. Esta es mi experiencia personal, no pretendo que sea una norma. ;)
 
silhouette:

Por favor, ayúdenme a entender el problema de encontrar la divergencia en los osciladores correctamente. En este caso, que sea el MACD. He esbozado el siguiente algoritmo:

1) Cuente las barras desde el principio y busque los picos en el oscilador:

2) Crear matrices que contengan las horas punta:

e introducir en ellos el valor del MACD[i] si se cumple la condición. El último pico nuevo debe tener el índice [n] y el penúltimo [n+1];

3) Consideremos otra solución en la situación (1):

En realidad, el problema con el punto 2: ¿cómo organizar una matriz de este tipo como en una serie temporal para que los valores se desplazaran en cada nuevo pico?


¡Por favor, ayuda!