[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 385

 
granit77:
Víctor, te equivocas. Gracias a esta discusión un poco larga, dos programadores estaban respondiendo a las preguntas de los recién llegados al mismo tiempo, lo que sólo benefició al hilo :))

Bueno, me ha gustado leerlo. Y fue muy reveladora la actitud de los avanzados (no sé cómo llamarlos ahora programadores o no - ahora estoy confundido : )) ) - Digámoslo así: los especialistas, resolviendo problemas avanzados : ))) y sus opiniones sobre tareas aparentemente sencillas. Espero sinceramente que esta sea una discusión sin emociones y amistosa, a pesar de todos los desacuerdos. Yo, desgraciadamente, sigo teniendo desacuerdos (no resueltos) también. Pero yo sólo estoy aquí profesando un enfoque filosófico. Si la solución a un problema de esa manera no es obvia, hay que encontrar otra forma. Pero es muy útil para conocer el problema.

Muchas gracias por el debate. Es una pena que no hayamos llegado a un consenso. (Pero, aún no ha surgido ningún consenso... (me viene a la mente la canción "Allí, lejos, junto al metro"))

Y es una pena, por supuesto, que no haya habido respuestas obvias a mis preguntas y a las de Arles. Creo que estas preguntas no son sólo para él y para mí, sino para muchos profesionales menos experimentados a los que les resulta difícil construir sus propios hilos e I.T., y por eso recurren a programas y shells escritos por profesionales avanzados.

Bueno, está bien. Con el tiempo también resolveremos estos problemas. : )) Muchas gracias por sus esfuerzos. Todas las partes tienen una actitud positiva al final (aunque tienen diferentes formas de resolverlas). Y eso gusta.

Por cierto, en mis investigaciones pedagógicas suelo decir: no todas las preguntas pueden resolverse, a menudo no conocemos todas las respuestas; por lo tanto, aún pueden... permanecen abiertas. (Estoy tratando de encontrar un final delicado a la discusión) ¡Gracias de nuevo!
 
Necesito ayuda 1 cómo saber el precio de la orden de venta abierta o pendiente 2 cómo comprobar si hay una orden de venta abierta o pendiente al precio que he especificado
 

Sergei, ¿qué cuestiones han quedado sin resolver? Si esto:

Chiripaha:

Es decir, respondiendo a la pregunta de Arles, si un EA ha realizado la contabilidad de las órdenes y "se ha echado una siesta" durante un tiempo, en ese momento otro EA que no ha superado el límite de los fondos asignados (supongamos el 80% del depósito - ambos EAs tendrán este tamaño) colocará una orden (entrará en una operación en el mercado). ¿Y cuando el primero reanude el trabajo (y el terminal de gestión monetaria ya haya sido calculado el día anterior), también abrirá una operación que supere los límites establecidos por el Asesor Experto?

Si este sistema (hipotéticamente) se multiplica por varios EAs, entonces ¿puede haber uno, donde la Gestión de Riesgos será en sistema crítico?

¿He entendido bien lo del multihilo? - Si es así, desde el punto de vista financiero, por supuesto, es un desastre. Pero como la probabilidad es pequeña en las cuentas pequeñas, es sólo hipotética. Y en las cuentas más grandes, probablemente escribirán algo ellos mismos. Pero aún así, ¿resulta ser el caso?

Y tengo una pregunta: ¿es ésta la posición oficial o son sólo especulaciones y experiencias como las mías?

Hay un código en la página 378. Aquí está de nuevo:

#property show_inputs

extern int Pause = 1000;

int    hwndChart = NULL; // Уникальный идентификатор скрипта.
string sName = "Condition";

void init()
 {
  hwndChart = WindowHandle(Symbol(), 0);
  // Создаём глобальную переменную синхронизации скриптов.
  if (!GlobalVariableCheck(sName)) GlobalVariableSet(sName, 0);
 }
 
void deinit()
 {
  GlobalVariableDel(sName);
 }

void start()
 {
  while (!IsStopped())
   {// Начало блока синхронизации.
    GlobalVariableSetOnCondition(sName, hwndChart, 0);
    if (GlobalVariableGet(sName) == hwndChart)
     {
      Print("Start");
      Sleep(Pause); // Имитация работы.
      Print("End");
     }
    GlobalVariableSetOnCondition(sName, 0, hwndChart);
    // Завершение блока синхронизации.
    Sleep(200);
   }
 }
Cuando la demora sea una "obra de imitación", inserte una referencia al yacimiento o a otro recurso.

Puedes convertir este bloque de sincronización en una función y ponerlo en la biblioteca. Tendrá una función sincrónica de acceso al depósito desde cualquier EA.

 
Sustituir el índice por el asa de la ventana del gráfico
 
FAQ:
En lugar del índice, sustituya el asa de la ventana del gráfico

¡Correcto! Es difícil saber qué es lo que pasa con los índices.

Lo he rehecho.

===================

Aunque, la indexación permitirá eliminar correctamente una variable global.

Debemos decrementar el índice en el deinit. Y eliminar la variable global cuando el índice es igual a cero.

Pero este decremento no permitirá recargar el script después de la eliminación. Los índices estarán mezclados.

Debemos crear un array global de índices de todos los módulos que acceden al recurso. Bueno, y trabajar con él.

También es posible hacer dos variables globales. Uno con el último índice, el otro con el número actual de módulos. Los índices sólo aumentan. Probablemente, será más fácil.

O no te molestes en usar la variable global. Elimínelo manualmente antes de la primera ejecución.

 
esto funcionará bien hasta el primer fallo deinitial, cuando el experimentador no disminuya el contador total
 
¡Ya lo tengo! También tenemos que salir sincronizados. En deinit esperar su turno y salir con el reset de la variable global. Si se accede al recurso por poco tiempo, estará bien en el deinit.
 

1) Problema: cada script (EA) debe conocer la presencia de todos los demás.

2) Problema : si hay un fallo, los globales del que ha fallado quedarán colgados sin ocupar y la cola se atascará.

3) Solución :

Cada exp organiza 1 globalka con nombre - prefijo común + asa de la ventana + símbolo. el valor del globalka es la hora del último tick en ese instrumento. 2 global común con su propio mango (después de trabajar escribe su propio mango en él o lo borra si es el más antiguo)

La cola está dispuesta en orden ascendente (asas), el más antiguo pone el segundo globale a cero

en cada exp, creamos tres matrices (a falta de estructuras) - símbolo/manija/tiempo de último acceso/tiempo de último tick.

todas las EXPs llevan la cuenta de (última hora de acceso/última hora de tick) para todas ellas y en cuanto son diferentes (una de las EXPs falla) se borran los dos globales de la EXP fallida y se considera inactiva. sus celdas en los arrays se borran (el array se reconstruye).

la cola se restablece

esto lo hará en realidad el EA que se encuentra en el gráfico más activo (ticks frecuentes).

cuando se desinicialice normalmente, cada expo se limpiará a sí misma.

max skip - una marca.

ZS. y en general es mejor hacer una multidivisa

 
Zhunko:

Sergei, ¿qué cuestiones han quedado sin resolver? Si eso:

Hay un código en la página 378. Aquí está de nuevo:

Donde hay un retraso "imitación de obra" se inserta una referencia al depósito o a otro recurso.

Puedes convertir este bloque de sincronización en una función y ponerlo en la biblioteca. Obtendrá una función sincrónica de acceso al depósito desde cualquier Asesor Experto.

Este es un bloque de acceso atómico y no hay sincronización. No tiene sentido que se aplique sólo al depósito. La llamada a cualquiera de las funciones de los parámetros de depósito será atómica por sí misma, sin ningún tipo de empuje. Si lo haces de forma atómica, todo el trabajo del Asesor Experto. Así es como se resuelven los problemas: crees que has hecho algo, pero en realidad es una ilusión.

 
FAQ:

1) Problema: cada script (EA) debe conocer la presencia de todos los demás.

2) Problema : si hay un fallo, los globales del que ha fallado quedarán colgados sin ocupar y la cola se atascará.

3) Solución :

Cada exp organiza 1 globalka con nombre - prefijo común + asa de la ventana + símbolo. el valor del globalka es la hora del último tick en ese instrumento. 2 global común con su propio mango (después de trabajar escribe su propio mango en él o lo borra si es el más antiguo)

La cola está dispuesta en orden ascendente (asas), el más antiguo pone el segundo globale a cero

en cada exp, creamos tres matrices (a falta de estructuras) - símbolo/manija/tiempo de último acceso/tiempo de último tick.

todas las EXPs llevan la cuenta de (última hora de acceso/última hora de tic) para todas ellas y en cuanto son diferentes (una de las EXPs falla) se borran los dos globales de la EXP fallida y se considera inactiva. sus celdas en los arrays se borran (el array se reconstruye).

la cola se restablece

esto lo hará en realidad el EA que se encuentra en el gráfico más activo (ticks frecuentes).

cuando se desinicialice normalmente, cada expo se limpiará a sí misma.

max skip - una marca.

ZS. y en general es mejor hacer una multidivisa


No lo entenderá, demasiado mal visto desde arriba)))) Tengo esta tarea resuelta más o menos en este estilo. Es bueno tener a alguien que entienda la esencia del problema. Sólo que todavía tengo una cola, en cuyo orden las tareas comenzaron a realizarse, y se realizan más en un círculo.
Razón de la queja: