[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 680

 
boris.45:
¿Cómo puedo ponerme en contacto con ustedes? Tengo muchas preguntas y me gustaría recibir algún consejo.
Cuando hagas una pregunta a alguien, haz clic en "responder" en la esquina inferior derecha del mensaje de la persona a la que te diriges. De lo contrario, la gente se preguntará a quién va dirigida su pregunta... :)
 
¿Puedes decirme si es posible enviar un comando de desconexión al EA desde el script?
 
granit77:
Yo sustituiría un conmutador por una matriz ya preparada, ¿por qué asignar valores predefinidos cada vez?

Gracias, pero ¿podría ser más específico? Porque los valores predefinidos aquí son los plazos, pero el código que sigue los casos para diferentes indicadores será diferente... Probablemente, es más fácil poner un poco más de código... :) En general estoy muy lento hoy - no pude dormir anoche y sigo en el limbo...

int AnaliseFunc (string sy, int tf)
{
   
   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
         
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB_1  =iCustom(sy,tf,"BB_MA",13,1,1,1),
   BB_2  =iCustom(sy,tf,"BB_MA",13,1,1,2),
   BB_3  =iCustom(sy,tf,"BB_MA",13,1,1,3),
   AO1   =iAO(sy,tf,1),
   AO2   =iAO(sy,tf,2),
   AO3   =iAO(sy,tf,3),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8)*1000,
   AC2   =NormalizeDouble(iAC(sy,tf,2),8)*1000,
   AC3   =NormalizeDouble(iAC(sy,tf,3),8)*1000,
   AC4   =NormalizeDouble(iAC(sy,tf,4),8)*1000,
   AC5   =NormalizeDouble(iAC(sy,tf,5),8)*1000,
   SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
   SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
   DeM_1 =iDeMarker(sy,tf,14,1),
   DeM_2 =iDeMarker(sy,tf,14,2),
   Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
   Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
   Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
   
//---------------- Проверка на разворот BB_MA -------------------------------------------------------   
   
   if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0)                               // Найден разворот BB вверх
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =true;  TrBBTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrBBTurnUP_M5 =true;  TrBBTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrBBTurnUP_M15=true;  TrBBTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrBBTurnUP_M30=true;  TrBBTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrBBTurnUP_H1 =true;  TrBBTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrBBTurnUP_H4 =true;  TrBBTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrBBTurnUP_D1 =true;  TrBBTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrBBTurnUP_W1 =true;  TrBBTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrBBTurnUP_MN =true;  TrBBTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
   if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0)                               // Найден разворот BB вниз
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =false;  TrBBTurnDN_M1=true;      // Флаг разворота вниз на М1
            case 5:     TrBBTurnUP_M5 =false;  TrBBTurnDN_M5=true;      // Флаг разворота вниз на М5
            case 15:    TrBBTurnUP_M15=false;  TrBBTurnDN_M15=true;     // Флаг разворота вниз на М15 
            case 30:    TrBBTurnUP_M30=false;  TrBBTurnDN_M30=true;     // Флаг разворота вниз на М30 
            case 60:    TrBBTurnUP_H1 =false;  TrBBTurnDN_H1=true;      // Флаг разворота вниз на H1
            case 240:   TrBBTurnUP_H4 =false;  TrBBTurnDN_H4=true;      // Флаг разворота вниз на H4
            case 1440:  TrBBTurnUP_D1 =false;  TrBBTurnDN_D1=true;      // Флаг разворота вниз на D1
            case 10080: TrBBTurnUP_W1 =false;  TrBBTurnDN_W1=true;      // Флаг разворота вниз на W1
            case 43200: TrBBTurnUP_MN =false;  TrBBTurnDN_MN=true;      // Флаг разворота вниз на MN
         }
      }
//---------------------- Проверка на разворот Momentum -----------------------------------------------
   
   if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =true;  TrMomTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =true;  TrMomTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=true;  TrMomTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=true;  TrMomTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =true;  TrMomTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =true;  TrMomTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =true;  TrMomTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =true;  TrMomTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =true;  TrMomTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
      
   if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =false;  TrMomTurnDN_M1=true;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =false;  TrMomTurnDN_M5=true;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=false;  TrMomTurnDN_M15=true;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=false;  TrMomTurnDN_M30=true;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =false;  TrMomTurnDN_H1=true;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =false;  TrMomTurnDN_H4=true;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =false;  TrMomTurnDN_D1=true;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =false;  TrMomTurnDN_W1=true;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =false;  TrMomTurnDN_MN=true;      // Флаг разворота вверх на MN
         }
      }
//---------------------- Проверка DeMarker на перепроданность/перекупленность ---------
Verás - hay un código absolutamente idéntico, pero ya está comprobando los criterios de negociación de otros indicadores... Sólo quiero meter todas las comprobaciones de todos los índices utilizados en el EA en un bloque analítico, de manera que calcule sus valores una vez por cada tick, los ponga en variables y utilice los valores de las variables para las decisiones de trading. No sé cómo organizarlo utilizando un array de valores predefinidos...
 
artmedia70:

Gracias, pero ¿podría ser más específico? Porque los valores predefinidos aquí son los plazos, pero el código que sigue los casos para los diferentes indicadores será diferente... Probablemente, es más fácil poner un poco más de código... :) Hoy no pienso con claridad, anoche no pude dormir y sigo en el limbo...

Verá, hay un código absolutamente idéntico, pero ya comprueba los criterios comerciales de otros indicadores... Sólo quiero meter todas las comprobaciones de todos los índices utilizados en el EA en un bloque analítico y entonces calculará sus valores una vez por cada tick, los pondrá en variables y utilizará los valores de las variables para las decisiones de trading. No sé cómo organizarlo utilizando un array de valores predefinidos...




Tal vez sólo necesite seleccionar una prioridad de cálculo, es decir, parece que tiene

Si (BB_1<0 ) es la primera condición obligatoria después de la cual no es necesario calcular otras BB_, pues bien, haga un if compuesto y haga los cálculos de BB_ necesarios en el segundo if, siempre que el primer if se haya hecho, y si ... else es bastante eficaz, mientras que usted sólo tiene if

Estoy de acuerdo, el código puede ser más grande y menos legible, pero el rendimiento subirá

 
IgorM:


tal vez sólo hay que recoger la prioridad de cómputo, es decir

Si (BB_1<0 ) es la primera condición obligatoria, después de la cual no es necesario calcular otras BB_, por lo que hay que hacer un if compuesto y realizar los cálculos de BB_ necesarios en el segundo if, siempre que se haya cumplido el primer if, y si . else es bastante eficaz, mientras que usted sólo tiene if

Estoy de acuerdo en que el código puede aumentar en número de líneas y ser menos legible, pero el rendimiento aumentará.

Gracias, Igor, voy a ver qué pasa. Eso no es lo que tenía en mente... Recuerdo que en los primeros tiempos de la informatización, en 1991-94, no recuerdo exactamente... Hacía programación en lenguaje ensamblador para ZX Spectrum... que era terriblemente lento y estaba limitado a 64Kb de memoria... Así que había una orden para que el procesador trabajara con el área de memoria de la pantalla para que salieran rápidamente 16386Kb a esa área. El comando CPU documentado fue el más rápido de todos, trabajando con un gran conjunto de datos. No hay mucho que podamos hacer al respecto, pero... encontraron una manera de cuadruplicar la velocidad de salida. Había comandos para trabajar con la pila y se ejecutaban mucho más rápido. Así es como lo hicieron: movieron la pila a una zona no utilizada de la memoria que va justo después de la pantalla, llenaron esa zona con datos gráficos y luego, habiendo movido la pila a la pantalla, saltaron rápidamente la pantalla preparada en la memoria a la zona de la pantalla con un comando que llenó la pila... Sólo un milagro para aquellos tiempos, pero para Spectrum fue mágico...

Aquí también me interesan las formas de trabajo no convencionales... Ya sabes, como ver qué comandos se ejecutan en cuántos ciclos de reloj y construir algo similar... ¿Qué podría sustituir a los comandos de comparación lógica, tal vez la resta o algo más en la misma vena....

 
artmedia70:

Y aquí me interesan las formas de trabajo no estándar... Como buscar qué comandos se ejecutan en cuántos ciclos de reloj y construir algo similar... ¿Qué podría sustituir a los comandos de comparación lógica, tal vez la resta o algo así....


creo que no lo encontrarás en mql - los principios de mql son muy similares a los de java con sintaxis C, prueba a ver qué es más rápido ejecutar case o if, recuerdo cuando vi en turbopascal que if es más rápido
 
artmedia70:
Bienvenido aquí.
 
Oper:
¿Sabes si se puede enviar un comando para desactivar el EA desde el script?

Puedes hacerlo. Yo, por ejemplo, controlo mi EA con scripts que establecen variables globales a un determinado estado. Los estados de estas variables

se analizan en el Asesor Experto y se ejecutan los comandos necesarios.

 
Buenas tardes.
 
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,241); 
¿Puedes decirme cómo configurar el tamaño de la flecha correctamente, y por qué aumenta su tamaño cuando restableces los ajustes de color pero disminuye cuando vuelves a compilar?
Razón de la queja: