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

 

Por favor, aconséjeme la mejor manera de proceder para optimizar un EA:

Hay muchos parámetros que son responsables de la configuración del indicador y hay un parámetro que activa/desactiva este mismo indicador.


No tiene ningún sentido optimizar la configuración del indicador si está desactivado.

Pregunta: ¿Cómo puedo cortar esos excesos sin sentido?

 
ANDREY:

Gracias por la ayuda y la nueva información para mí . Pero me di cuenta y se me ocurrió una forma mucho más sencilla: ....
1 .Al abrir la primera orden en una vela de un minuto, almaceno en la variable X el LOW de esa vela en el momento de abrir esta primera orden.
2. Cuando se abre una vela cero (la siguiente vela después de aquella en la que se abrió la orden), obtengo LoY[1]
. Entonces giro la lógica y concluyo
1. Si X = LoY[1], entonces la orden se abrió después del LoY de la vela en la que se abrió
2.Si LoY[1]< X, significa que el precio bajó una vez más después de la apertura de la orden y fue inferior a X. Significa que la orden se abrió antes de que se formara LoY[] en la vela dada
Time LOW Sólo necesitaba saber cuándo se abrió la orden . antes o después de la formación de LoY[].
Y todas las órdenes en una vela de un minuto abren una por encima de la otra con una diferencia de 2 pips. Es decir, cuando el primero se abrió también lo hicieron los demás en este candelabro.
Gracias por la ayuda.

Pero tengo una pregunta más.
Abrí una orden en una vela de un minuto al precio X. Después de unos segundos en la misma vela, se abrió otra orden a un precio de X+2 pips. Entre los dos puntos X y X+2, hay un precio mínimo.
Tengo que averiguar la baja. Si tratamos con diferentes velas, utilizaría las funciones iLow y iLowest
pero estas funciones deben especificar las barras como límites del intervalo. Pero mis límites de intervalo no son barras, sino los precios X y X+2 porque sólo hay una barra.
Sé cómo encontrar el mínimo que necesito. Pero para hacerlo, necesito seguir el valor del precio en cada tick. También sé cómo hacerlo con un ciclo en el momento de X+2. Y cómo hacerlo de una vez en el momento de X+2 como en el caso de iLow yiLowest.
Te agradecería mucho que me enseñaras a hacerlo.
Gracias

Escribir los ticks en un archivo
 
MakarFX:
Escribir los ticks en un archivo

Gracias por la información que es nueva para mí. Nunca he escrito garrapatas en un archivo. ¿Dónde puedo leer más sobre esto para entender cómo hacerlo?

? Otra pregunta ..... ¿puedo escribir los ticks con los precios en un array, para ordenar el array con los ticks y obtener el tick con el valor mínimo del precio? O con la ayuda de

ArrayMinimum


Gracias por la ayuda.

 
ANDREY:

Gracias por la información que es nueva para mí. Nunca he escrito garrapatas en un archivo. ¿Dónde puedo leer más sobre esto para entender cómo hacerlo?

? Otra pregunta ..... ¿puedo escribir los ticks con los precios en un array, para ordenar el array con los ticks y obtener el tick con el valor mínimo del precio? O con la ayuda de

ArrayMinimum


Gracias por la ayuda.

Escribir en el archivo FileWriteString

En general, es difícil entender lo que necesita.

 
MakarFX:

FileWriteString

Es difícil saber lo que se busca.

Se abrió una orden en una vela de un minuto al precio X. Unos segundos después, en la misma vela, se abrió otra orden a X+2. Entre X y X+2 hay un precio bajo.
Tengo que averiguar la baja. Si tratamos con diferentes velas, utilizaría las funciones iLow y iLowest
pero estas funciones deben especificar las barras como límites del intervalo. Pero mis límites de intervalo no son barras, sino los precios X y X+2 porque sólo hay una barra.
Sé cómo encontrar el mínimo que necesito. Pero para hacerlo, necesito seguir el valor del precio en cada tick. También sé cómo hacerlo con un ciclo en el momento de X+2. Y cómo hacerlo de una vez en el momento de X+2 como en el caso de iLow yiLowest.
Te agradecería mucho que me enseñaras a hacerlo.
Gracias
 
ANDREY:

Gracias por la información que es nueva para mí. Nunca he escrito garrapatas en un archivo. ¿Dónde puedo leer más sobre esto para entender cómo hacerlo?

? Otra pregunta ..... ¿puedo escribir los ticks con los precios en un array, para ordenar el array con los ticks y obtener el tick con el valor mínimo del precio? O con la ayuda de

ArrayMinimum


Gracias por la ayuda.

Es posible. Sólo es necesario escribir en el archivo .bin mediante la función

uint  FileWriteArray( 
   int          file_handle,         // handle файла 
   const void&  array[],             // массив 
   int          start=0,             // начальный индекс в массиве 
   int          count=WHOLE_ARRAY    // количество элементов 
   );

y leer

uint  FileReadArray( 
   int    file_handle,               // handle файла 
   void&  array[],                   // массив для записи 
   int    start=0,                   // стартовая позиция для записи в массив 
   int    count=WHOLE_ARRAY          // сколько читать 
   );
 
Alexey Viktorov:

Puedes hacerlo. Sólo tienes que escribir en el archivo .bin con la función

y leer

Gracias por la información nueva para mí .... y no sólo el nuevo .... oooooooooo nuevo ?:=) Intentaré aprenderlo yo mismo....

 
ANDREY:

Gracias por la nueva información para mí .... y no sólo el nuevo .... Muy nuevo ?:=) Intentaré digerirlo yo mismo....

¿Qué hay de nuevo aquí? Abres la documentación, lees los títulos y encuentras la sección "Operaciones de archivo" donde se describen las diferentes funciones, incluyendo FileWriteArray()

No es la primera vez que le recuerdo que debería leer la documentación más a menudo. Aunque no lo necesite en este momento. Si lee los títulos de las secciones, entenderá lo que se describe en la documentación. Tú eres el que más lo necesita.

 
Alexey Viktorov:

¿Qué hay de nuevo aquí? Abra la documentación, lea las cabeceras, busque la sección "File operations" donde se describen varias funciones, entre ellas FileWriteArray()

No es la primera vez que le recuerdo que debería leer la documentación más a menudo. Aunque no lo necesite en este momento. Si lee los títulos de las secciones, comprenderá lo que se describe en la documentación. Eres tú quien lo necesita.

Gracias por los valiosos consejos. De momento, sólo leo la documentación cuando estoy escribiendo código y me encuentro con una pregunta de la que no sé la respuesta. Nunca me he encontrado con la necesidad de escribir datos en archivos mientras escribía mis códigos anteriores, así que es un tema totalmente nuevo para mí.
Dime, ¿no se puede realizar mi idea de una manera más sencilla, sin escribirla en un archivo? Como en mi código. Este no es un código de trabajo, sino para ilustrar mi idea de cómo encontrar el mínimo entre dos órdenes adyacentes abiertas en una vela minuto
Gracias por la ayuda.

double P[60],Z;
int Tick,x,x1,G,G1,G2,T;

void OnTick()
{
Tick++;

if (OrdersTotal()==1&&Tick<2189)
{
P[x]=Bid;
Print("------------------------P[x]=Bid------------------------=", DoubleToString(P[x],5), "  x ",  x);
x++;
}
if (OrdersTotal()==2&&Tick==2189)
{
x1=x;
x=0;
ArraySort(P,WHOLE_ARRAY,0,MODE_ASCEND);
T=(60-x1);
Print("------------------------МИНИМУМ=------------------------=",DoubleToString(P[T],5), "  Tick ",  Tick, "  x1 ",  x);
}

if (Tick==2176||Tick==2188)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+300*Point,Ask-100*Point,"300",0);
G2=G;
G=Tick;
}
}

Es decir, escribí el precio de cada tick directamente en el array, no en un archivo.

 
ANDREY:

Gracias por la ayuda y la nueva información para mí . Pero me di cuenta y se me ocurrió una forma mucho más sencilla....
1 .Al abrir la primera orden en una vela de un minuto, almaceno en la variable X el LOW de esa vela en el momento de abrir esta primera orden.
2. Cuando se abre una vela cero (la siguiente vela después de aquella en la que se abrió la orden), obtengo LoY[1]
. Entonces giro la lógica y concluyo
1. Si X = LoY[1], entonces la orden se abrió después del LoY de la vela en la que se abrió
2.Si LoY[1]< X, significa que el precio bajó una vez más después de la apertura de la orden y fue inferior a X. Significa que la orden se abrió antes de la formación de LoY[] en la vela dada


Puede comprobar la hora pero está esperando una nueva orden y luego pedir el tick máximo o mínimo.

Razón de la queja: