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

 
Valeriy Yastremskiy #:
Con la ayuda del Windows. La configuración de los gráficos de la fuente pequeña grande también debe ajustarse.

¿Y si hay dos monitores? Diferentes...

 
Artyom Trishkin #:

¿Y si hay dos monitores? Diferente...

A continuación, hay que conocer la resolución de la pantalla en la que se muestra la imagen. El objeto también puede llegar a 2 monitores) pero es una tarea más complicada.
Sí, la vinculación con las fuentes estándar del sistema a través de los valores negativos deTextSetFont() es una buena solución.
 

Ayuda a optimizar el indicador. El indicador funciona pero de forma lenta, se necesita mucho tiempo para optimizar el EA con él. Por favor, indíqueme qué es lo que se ha hecho mal. ¿Cómo acelerar su trabajo?

//+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red

#property indicator_maximum 1
#property indicator_minimum 0

#property indicator_width1 2

//---- input parameters
extern int  MomPeriod    = 10;
extern int  WindowOfNorm = 45; // ширина окна нормирования в барах
extern int  MA_Length    = 10; // Average Period
extern int  MA_Mode      =  0; // Mode of Moving Average

//---- buffers
double NormBuffer[],MomBuffer[],AvgVolumes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,NormBuffer);

   SetIndexStyle(1,DRAW_NONE);
   SetIndexBuffer(1,MomBuffer);
   
    SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,AvgVolumes);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   for(int i = 1;i <= 130; i++)
     {
      MomBuffer[i]=iMA(NULL,0,MomPeriod,0,0,0,i)*100/iMA(NULL,0,MomPeriod,0,0,0,i+MomPeriod);

      // нормирование
      NormBuffer[i]=Norm(WindowOfNorm,i);
      //-----
      AvgVolumes[i] = iMAOnArray(NormBuffer,0,MA_Length,0,MA_Mode,i);
     }
   return(0);
  }
//+------------------------------------------------------------------+

// нормирование
double Norm(int norm, int i) {
   // экстремумы
   double max=MomBuffer[ArrayMaximum(MomBuffer,norm,i)];
   double min=MomBuffer[ArrayMinimum(MomBuffer,norm,i)];
   // вычисление осциллятора
   double delta=max-min; // размах
   if(delta==0) return(1);
   else return((MomBuffer[i]-min)/delta);
  }

Archivos adjuntos:
 
IrishDance #:

Ayuda a optimizar el indicador. El indicador funciona pero de forma lenta, se necesita mucho tiempo para optimizar el EA con él. Por favor, indíqueme qué es lo que se ha hecho mal. ¿Cómo hacer que funcione más rápido?

No es así como se hace. Preste atención a esta línea

//|                      Copyright © 2004, MetaQuotes Software Corp. |

El lenguaje de programación ha cambiado tanto en 18 años que no debería funcionar en absoluto. No entiendo por qué MQ todavía no ha desactivado del todo int init() e int start()

 

Qué pasa, con 2 parámetros VLine en el probador da error 2022.03.24 18:24:27.615 TestGenerator: unmatched data error (volume limit 263 at 2022.03.18 14:30 exceeded)

Si se elimina el primer parámetro time1, todo va bien.

bool FlagOpOr=false;
bool FlagClOr=false;
bool Work=true;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

//---
     static bool FlagNDay=true, FlagVLRed=false,FlagVLBlue=false;
  static datetime Data = 0, NData=0;
  Data = Day();
 if(NData!=Data){FlagVLRed=true; FlagVLBlue=true;NData=Data;} 
if(FlagVLRed==true && Hour()==0){ VLine(1,clrRed); FlagVLRed=false;}
if(FlagVLBlue==true &&  Hour()==1){ VLine(1,clrBlue); FlagVLBlue=false;  }
      
    
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)//int deinit(void)void
  {
   int i;
   int obj_total=ObjectsTotal();
   for(i=obj_total-1;i>=0;i--)
     {
 string     sn=ObjectName(i);
      string Head=StringSubstr(sn,0,4);// Извлекаем первые 4 сим
      if(Head == "VLin")
        {
          ObjectDelete(sn);       

       }
     }
   
    Comment("");
   return;
  }
 
  //+------------------------------------------------------------------+
  bool VLine( int time1=0, color clr = clrRed ){
  string  var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
     string NameLine="VLine_" +  "_"+var1;
            bool   created=ObjectCreate(0,NameLine,OBJ_VLINE,0,TimeCurrent(),0);
            if(created)// если создался - сделаем ему тюнинг
              {              
               //--- точка привязки сверху, чтобы не наезжать на бар
               ObjectSetInteger(0,NameLine,OBJPROP_STYLE,STYLE_SOLID);
               //--- последний штрих - покрасим
               ObjectSetInteger(0,NameLine,OBJPROP_COLOR,clr);
               //--- установим толщину линии 
               ObjectSetInteger(0,NameLine,OBJPROP_WIDTH,2); 
                
              }
              else return(false );time1=0;
              return(true);
              }
 

Buenas tardes a todos. Tengo 20-40 gráficos abiertos durante la negociación. Tengo que pasar mucho tiempo para encontrar el correcto en la parte inferior de todos los instrumentos o en el elemento de menú superior "ventana". Si pudiera usar un script para acelerarlo, pongo un script en los parámetros de entrada, escribo el símbolo necesario y se abrirá como si lo encontrara con los ojos y lo pulsara. ¿Cómo se implementa algo así?

 
DanilaMactep #:

Buenas tardes a todos. Tengo 20-40 gráficos abiertos durante la negociación. Tengo que pasar mucho tiempo para encontrar el correcto en la parte inferior de todos los instrumentos o en el elemento de menú superior "ventana". Si pudiera usar un script para acelerarlo, pongo un script en los parámetros de entrada, escribo el símbolo necesario y se abrirá como si lo encontrara con los ojos y lo pulsara. ¿Cómo se puede hacer esto?

Como lógica, el script debería averiguar cuántos gráficos/ventanas están abiertos y para qué instrumentos, recordarlos (símbolos y chart_idies) y luego, según el número de instrumentos, dibujar un panel con botones con el nombre del instrumento escrito en ellos. Al pulsar el botón, el gráfico con el instrumento requerido cambia su propiedad a expandido (puede ser colapsado) y sobre todo, y el script se cierra.

 
Valeriy Yastremskiy #:

Lógicamente, el script debería averiguar cuántos gráficos/ventanas están abiertos y para qué instrumentos, recordarlos (símbolos y chart_idies), y luego, según el número de instrumentos, dibujar un panel con botones con el nombre del instrumento escrito en ellos. Al pulsar el botón, el gráfico con el instrumento deseado cambia su propiedad a expandido (puede ser colapsado) y sobre todo, y el script se cierra.

Mala lógica - ¿qué diferencia hay - en qué botones mirar - en la parte inferior, en la ventana del menú o en los botones dibujados por el script? Debe hacerse de alguna manera para que usted introduzca el símbolo deseado en los parámetros de entrada, y el script ha abierto esta ventana para usted - por lo que sería más fácil y más rápido. ¿Alguien tiene un milagro de este tipo, por favor, compártalo?
 

¡Hola!

Estoy buscando un EA, un operador de red.

Abre las órdenes de mercado en una parrilla.

Cierra las órdenes cuando la parrilla alcanza un determinado (%) de beneficio.

He visto tal Asesor Experto, y ahora no puedo encontrarlo.

He visto un Asesor Experto de este tipo, y ahora no lo encuentro.

 
DanilaMactep #:
Mala lógica: ¿qué diferencia hay en los botones que hay que buscar, en la parte inferior, en la ventana del menú o en los botones dibujados por el script? De alguna manera se debe hacer así, que entró en el símbolo deseado en los parámetros de entrada, y la secuencia de comandos ha abierto esta ventana para usted - por lo que más fácil y más rápido sería. ¿Alguien tiene un milagro de este tipo, por favor, compártalo?
Abrir una nueva ventana (se abre sin EA y con la plantilla por defecto) o levantar o ampliar una ventana ya abierta.
Mira el código adjunto, hay una enumeración del gráfico y el dibujo en el gráfico por condición. Tal vez sea de ayuda.
Razón de la queja: