[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 310

 

Una pregunta así. ¿Cómo se optimiza ahora? El esqueleto del Asesor Experto es ahora el siguiente:

init(){
        //если файл истории не существовал, формируем заголовок
}

start(){
        //ловим тики
        //смотрим, сколько прошло секунд с последнего вызова start():
                //если 1 или больше, то---(блок свеч)---
                        //запоминаем, сколько прошло секунд
                        //---(блок выбора режима)---
                        //формируем RateInfo - столько раз, сколько прошло секунд
                //если 0, то---(блок теней)---
                        //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
        //если текущий бид меньше предыдущего, то медвежья
        //в любом другом случае бычья

He puesto open-close en variables y he eliminado el segundo bloque FileSeek, que se ha vuelto innecesario, he añadido la selección del estilo de las velas (todas alcistas, todas bajistas, cualquiera), he añadido sombras si el siguiente asc o bid es mayor o menor que el anterior máximo y mínimo, he añadido el rastreo con la impresión, que se activa mediante una bandera en la cabecera, he comentado todo con enlaces a los números de línea, he intentado hacer el código legible para el foro. También he añadido números de línea para imprimir.

Ahora mira:

Arriba hay un marco temporal de ticks, abajo hay un segundo marco temporal. Las sombras (colas) son cuando se han capturado dos ticks en un segundo y la oferta o la demanda difiere de la anterior. La garrapata funciona como un reloj. El segundo tic se retrasa, lo que significa que pasa más tiempo para procesar el tic que el intervalo de tiempo mínimo entre los tics. Por eso pregunto cómo optimizar el código. Adjunto el código y repito que he sobrecomentado todo. Si quieres comprobar como funciona - lo pones como EA en minutos, luego en búsqueda autónoma y abres 'sec'+nombre del instrumento.

Archivos adjuntos:
hhi.jt.mq4  29 kb
 
david2:
¿Cómo implementar esta función en su EA? Cuando se activa un TP o un SL en cualquiera de las órdenes Bay, todas las órdenes Bay deben cerrarse.

Si tienes experiencia en programación, una pista:

1. después de abrir una orden de compra, contar el número de órdenes de compra

2. Guardar su número en una variable global

En el siguiente tick, comprueba las condiciones de que la cantidad de órdenes de compra es menor que la anterior, entonces cierra todas las órdenes de compra.

Existen funciones que calculan la cantidad de órdenes por tipo de posición abierta y por cierre de posiciones de un tipo seleccionado (compra o venta) en la Kodobase.

Muchas características útiles en las funciones de Kim

 

Sobre la conversión de tipos de variables.
Se ha escrito el valor del coeficiente doble K en la descripción de la línea como texto (K=0,573).
Durante la ejecución del código, el valor del coeficiente K ha cambiado varias veces.
Ahora quiero multiplicar la variable doble Z por el valor K=0.573 después de extraer la cadena de descripción de la línea ObjectDescription(string name).
¿Es posible convertir una variable de tipo string a una variable de tipo double en MQL para volver a obtener 0,573? Si es posible, por favor, dame el enlace.
Saludos. Shurkin.

 
Shurkin:

¿Es posible convertir una variable de tipo cadena en MQL a una variable de tipo doble para obtener de nuevo 0,573? Si es posible, por favor, dame un enlace.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sec.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 GMT AUDUSD,M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 GMT AUDUSD,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 GMT AUDUSD,M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 GMT AUDUSD,M1: 15

Parte del registro con el temporizador de milisegundos en ambos códigos (ticks y segundos). Lo único que se me ocurre hasta ahora es eliminar los ciclos por completo, es decir, uno o más ticks por segundo sin importar cuántos segundos hayan pasado desde el último tick, siempre es una vela. Si había un segundo y así en las garrapatas por segundo - un candelabro con sombras. Pero entonces habrá una segunda TF con "agujeros" y por Alta[15] supongamos que no tomaré el valor de asc hace 15 segundos...

 
hoz:

Me preguntaba cómo escribir una función. La idea es que cuando N velas retroceden en una determinada dirección, debe calcular el número de velas. PERO. Para ello hay varias condiciones, o más exactamente, habrá una lista de ellas a lo largo del tiempo.

Digamos que la tendencia, por ejemplo, se dirige hacia abajo,... ...un pullback sube. Quiero, si 5 velas subieron, y cada vela fue alcista, y, por ejemplo, el tamaño de cada vela fue mayor quei_sizeOfCurrBar, y algunas otras condiciones, entonces la salida del número de barras continuamente alcista, y devolver algún resultado de la función.

¿Cuál es la mejor manera de escribirlo? De momento me he puesto a escribir, y entiendo que debería pasarlo por un bucle por barras, y de alguna manera limitar la vista en la profundidad del histórico no por un número fijo de barras, sino por barras, con esos parámetros, que nos interesan por condiciones.

Esto es lo que tengo, conseguido:

En este momento sólo vamos desde la penúltima barra hasta la barra con índice 6, es decir, 5 barras seguidas. Pero quiero que mi Asesor Experto busque sólo las barras que son alcistas y no todas seguidas. ¿Cómo aplicarlo adecuadamente?

He filtrado correctamente por tamaño.

Bien, cuando todo está ya escrito, el contador de la parte inferior ya calculará el número de barras continuas con los parámetros nht,etvsvb y si hay suficientes de tales barras, entonces se devolverá algún valor de la función.

Como siempre original: contando barras "desde abajo"...

for (int i=Bars-1; i>=Bars-6; i--)
 
Zhunko:

Hay muchas formas diferentes:

1. A través de una variable global.

2. A través de un archivo.

3. A través de iCustom().

4. A través de las variables gráficas globales.

5. La cartografía. Puede transferir datos de un terminal a otro. O en un terminal para transferir datos de una ventana a otra sin las limitaciones de las variables globales de MT4.


¿Cuál de estos trabajos es el más rápido?
 
gyfto:

¿Cuál de estos trabajos es el más rápido?
5. La cartografía.
 
hoz:
En la impresión tiene un valor de 1 y 2... ¿Qué coño está pasando aquí?
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);

Sólo falta de atención. En general, el bool aquí es de 4 bytes, lo que no le obliga a tomar sólo valores 0 y 1. El boolearn de C++ es de 1 byte. Personalmente uso bool en aritmética binaria en switch(), si necesito hacer múltiples elecciones, confiando en que siempre sea 0 o 1)) Así:

bool f1, f2, f3, f4//флаги

switch(8*f4+4*f3+2*f2+f1){
   case 0:
   ...
   case 15:
}//без default
 
gyfto:

Una pregunta así. ¿Cómo se optimiza ahora? El esqueleto del Asesor Experto es ahora el siguiente:

He puesto open-close en variables y he eliminado el segundo bloque FileSeek, que se ha vuelto innecesario, he añadido la selección del estilo de las velas (todas alcistas, todas bajistas, cualquiera), he añadido sombras si el siguiente asc o bid es mayor o menor que el anterior máximo y mínimo, he añadido el rastreo con la impresión, que se activa mediante una bandera en la cabecera, he comentado todo con enlaces a los números de línea, he intentado hacer el código legible para el foro. También he añadido números de línea para imprimir.

Ahora mira:

En la parte superior hay un marco de tiempo de ticks, en la parte inferior - segundos. Las sombras (colas) son cuando se han capturado dos ticks en un segundo y la oferta o la demanda difiere de la anterior. La garrapata funciona como un reloj. El segundo tick se retrasa, es decir, emplea más tiempo en procesar el tick que el intervalo de tiempo mínimo entre los ticks. Por eso pregunto cómo optimizar el código. Adjunto el código y repito que he sobrecomentado todo. Si quieres comprobar como funciona - lo pones como EA en minutos, luego en búsqueda autónoma y abres 'sec'+nombre del instrumento.

No he entrado en la lógica, pero algo me dice que hay algunos cálculos extra. Hace año y medio resolvía el mismo problema con la recopilación de cotizaciones y la formación de velas M1 con corte claro al inicio del minuto astronómico.
Si le interesa, puede echar un vistazo a algunos momentos de pura optimización de su código (archivo). Realmente, si hablamos seriamente de optimización, hay que medir el tiempo de ejecución del código. ;)
Archivos adjuntos:
hhi.jt_c_.mq4  23 kb