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

 

http://www.soft-sib.ru/articles/programs/10/

Otra de las ventajas de utilizar un SGBD y una arquitectura cliente-servidor frente al enfoque de archivo-servidor es la posibilidad de utilizar un mecanismo de manipulación de datos transaccional. Este servicio, proporcionado por el servidor de datos, permite combinar varias acciones de modificación de datos en una operación indivisible (transacción). El uso de transacciones garantiza una protección fiable de la información frente a fallos de hardware y software tanto en el lado del cliente como del servidor de la SI.

 
Sí, o soy invisible o nadie quiere o puede ayudar((
 
PerlOF:


El manual y el tutorial señalan la necesidad de conectarse a un servidor (para el EA, los scripts, los indicadores).

¿Es posible llamar a funciones especiales sin conectarse al servidor (en principio)?


Sí, lo es. El servidor, de hecho, es necesario para recibir un tick que lance la función start().

start() - función principal. Se llama a los expertos tras la recepción del siguiente tick. En el caso de los indicadores personalizados, se llama durante el recálculo después de adjuntar el indicador al gráfico, en la apertura del terminal del cliente (si el indicador se adjunta al gráfico), así como después de la llegada del siguiente tick. En los scripts se ejecuta inmediatamente después de adjuntar al gráfico y de la inicialización. Sino hay una función start() en el módulo, este módulo (Asesor Experto, script o indicador personalizado) no puede ser lanzado.

El script puede ejecutarse en un bucle infinito, y por lo tanto no necesita ticks, los ticks son necesarios para los indicadores y los Asesores Expertos (en la configuración estándar (porque los Asesores Expertos también pueden ejecutarse en un bucle infinito)).

Pero las garrapatas pueden ser provocadas artificialmente - con VINAPI. Además, existe una función estándar como el comprobador de estrategias (que también es capaz de generar ticks).

Sólo tienes que usar tu cerebro y BUSCAR EN EL SITIO (FORO).

Y no aportar las ventajas o desventajas de la tecnología de servidores de archivos.

 
MXDEEM:

Hola, tengo este código, comprueba la presencia de órdenes, si tengo una orden abierta, entonces comprueba de nuevo y así sucesivamente, hasta que la orden llega a 0. Pero el experto claramente ignora este código y abre un número infinito de órdenes, por favor, aconsejar cuál es el error?

int FunciónSiguiente()
{
int b=Total de pedidos();
si (b>0)
{FunciónBUYnext();}
si no {FunciónVenta();}
}



Navegador del Foro de la Comunidad MQL4
ReglasBusque enCómo publicarAdministración del foroDenunciar el abusoClub de telépatas
Preguntas que no debe hacer
Cómo hacer las preguntas correctas
Literatura útilSoftware útilBuscando un indicador (Asesor Experto o script)
 

Es necesario dibujar una línea en un Asesor Experto en Comercio utilizando la función iCustom.
He utilizado ZigZag como prueba:

for(int cnt=0; cnt<10000; cnt++) {
   double zigzag1=iCustom(NULL,0,"ZigZag",15,0,3,  0,cnt+1);
   if( zigzag1!=0 ) 
      break;
}


Como el propósito de iCustom en mi caso es sólo dibujar una línea
(los datos del indicador no se utilizan en el Asesor Experto ), decidí poner el código en deinit(). Pero allí no funciona y no dibuja nada.
En start(), todo está bien.
1. ¿Por qué no funciona en deinit()?
2. Hay que evitar ejecutar el código anterior sin sentido cuando se pruebe y optimice
(para evitar perder tiempo de CPU) y hacer que se ejecute sólo en la última barra del historial que se está probando.
- ¿Cómo se puede lograr esto?
Gracias.
 
Roll:

código es absurdo.

¿POR QUÉ? TODO COMO SE ENSEÑA
 
MXDEEM:

¿POR QUÉ? TODO COMO PROFESOR.

Es extraño cómo te enseñaron...

¿Dónde están las funciones llamadas desde el cuerpo de su "código"?

El "código" en sí mismo es bastante divertido también...

int FunctionBUYnext()
{
int b=OrdersTotal();
if (b>0)
{FunctionBUYnext();}
else {FunctionSELL();}
} 

Usando una llamada a sí mismo... ¿Por qué no salir de FunctionBUYnext() cuando no hay órdenes?

Además - no se comprueba el tipo de orden, no se comprueba el símbolo y el magik...

Yo enviaría a tu "profesor" al potro de tortura...

 

Ante un problema...

El script funciona con la función MessageBox() de esta forma

//+------------------------------------------------------------------+

#include <WinUser32.mqh>
#import "user32.dll"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int result = MessageBox("Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION);
   if(result != IDYES) Alert("Кнопка да не нажата");
//----
   return(0);
  }
//+------------------------------------------------------------------+

Pero falla completamente cuando se utiliza la función indocumentada MessageBoxTimeoutA():

//+------------------------------------------------------------------+

#include <WinUser32.mqh>
#import "user32.dll"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int result = MessageBoxTimeoutA(0, "Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION, 0, 10000);
   if(result != IDYES) Alert("Кнопка да не нажата");
//----
   return(0);
  }
//+------------------------------------------------------------------+

Ni siquiera aparece una ventana de mensajes con botones de Sí/No.

¿Quién lo encontró? ¿Dime dónde está enterrado el perro?

 
artmedia70:

Es extraño cómo te enseñaron...

¿Dónde están las funciones llamadas desde el cuerpo de su "código"?

El "código" en sí mismo es bastante divertido también...

Usando una llamada a sí mismo... ¿Por qué no salir de FunctionBUYnext() cuando no hay órdenes?

Además - no se comprueba el tipo de orden, no se comprueba el símbolo y el magik...

Yo enviaría a tu "profesor" al potro de tortura...

EXPLICO EL SIGNIFICADO, SE LLAMA PORQUE SE NECESITA UN CONTROL EN ESTA PARTE, SI SE HACE UNA RETIRADA SE VOLVERÁ DE NUEVO AL INICIO DE LA EJECUCIÓN, NO LO NECESITO, EL SÍMBOLO Y EL MAGO NO SE CONSIDERAN, MI MAESTRO INTERNET)))) SI NO ES DIFÍCIL POR FAVOR ENVÍENME ALGO SIMILAR PERO QUE FUNCIONE, LA IDEA PRINCIPAL - NO DEJAR PASAR SI HAY UNA ORDEN, SI NO ENTONCES SALTAR A UNA FUNCIÓN ESPECÍFICA.

 
MXDEEM:

EXPLICO EL SIGNIFICADO, SE LLAMA PORQUE NECESITAMOS UNA COMPROBACIÓN EN ESTA PARTE, SI SALE VOLVERÁ DE NUEVO AL INICIO DE LA EJECUCIÓN, NO LO NECESITO, EL SÍMBOLO Y EL MAGO NO SE TIENEN EN CUENTA, MI MAESTRO INTERNET))) SI NO LE IMPORTA ENVIAR ALGO SIMILAR, PERO EL TRABAJO, LA IDEA PRINCIPAL - NO DEJAR QUE EN SI LA ORDEN, SI NO, A CONTINUACIÓN, PASAR A UNA FUNCIÓN ESPECÍFICA.

Oh, no grites tanto... Creo que tienes el CapsLock atascado... El tamaño de la letra debería ser el doble, y estaría en negrita...

Es sólo un... un aparte.

Ahora déjame que te lo explique:

Voy a explicar el punto. Al hacer una llamada recursiva, estás consiguiendo que tu EA haga un bucle exactamente hasta esta parte... Es decir, si hay órdenes o posiciones de mercado, el EA debería colgarse y no hacer nada (sólo colgarse) hasta que elimine manualmente todas las órdenes y cierre las posiciones? Entonces, ¿para qué sirve este tipo de comercio automatizado, si el EA se queda colgado sin que usted intervenga?

Reconsidere su enfoque de la lógica de la EA

Razón de la queja: