Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1935

 
Valeriy Yastremskiy #:
Avec l'aide de Windows. Le paramétrage des graphiques en grande et petite police doit également être ajusté.

Et s'il y a deux moniteurs ? Différents...

 
Artyom Trishkin #:

Et s'il y a deux moniteurs ? Différents...

Ensuite, vous devez comprendre la résolution de l'écran où l'image est affichée. L'objet peut également se rendre sur 2 moniteurs) mais c'est une tâche plus compliquée.
Oui, la liaison aux polices standard du système via des valeurs négatives deTextSetFont() est une bonne solution.
 

Contribuer à l'optimisation de l'indicateur. L'indicateur fonctionne mais lentement, il faut beaucoup de temps pour optimiser l'EA avec lui. Veuillez me dire ce qui a été mal fait. Comment accélérer son travail ?

//+------------------------------------------------------------------+
//|                                                     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);
  }

Dossiers :
 
IrishDance #:

Contribuer à l'optimisation de l'indicateur. L'indicateur fonctionne mais lentement, il faut beaucoup de temps pour optimiser l'EA avec lui. Veuillez me dire ce qui a été mal fait. Comment le faire fonctionner plus rapidement ?

Ce n'est pas comme ça que ça se passe. Faites attention à cette ligne

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

Le langage de programmation a tellement changé en 18 ans que cela ne devrait pas fonctionner du tout. Je ne comprends pas pourquoi MQ n'a toujours pas désactivé int init() et int start().

 

Quel est le problème, avec 2 paramètres VLine dans le testeur donne l'erreur 2022.03.24 18:24:27.615 TestGenerator : unmatched data error (volume limit 263 at 2022.03.18 14:30 exceeded)

Si le premier paramètre time1 est supprimé, tout 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);
              }
 

Bon après-midi à tous. J'ai 20 à 40 graphiques ouverts pendant le trading. Je dois passer beaucoup de temps à trouver le bon en bas de tous les instruments ou dans l'élément de menu supérieur "fenêtre". Si je pouvais utiliser un script pour l'accélérer, je mets un script dans les paramètres d'entrée, je tape le symbole nécessaire et il s'ouvre comme si je l'avais trouvé des yeux et cliqué. Comment mettre en œuvre une telle chose ?

 
DanilaMactep #:

Bon après-midi à tous. J'ai 20 à 40 graphiques ouverts pendant le trading. Je dois passer beaucoup de temps à trouver le bon en bas de tous les instruments ou dans l'élément de menu supérieur "fenêtre". Si je pouvais utiliser un script pour l'accélérer, je mets un script dans les paramètres d'entrée, je tape le symbole nécessaire et il s'ouvre comme si je l'avais trouvé des yeux et cliqué. Comment cela peut-il être fait ?

Comme logique, le script devrait trouver combien de graphiques/fenêtres sont ouverts et pour quels instruments, les mémoriser (symboles et chart_idies) et ensuite, selon le nombre d'instruments, dessiner un panneau avec des boutons avec le nom de l'instrument écrit dessus. En appuyant sur le bouton, le graphique avec l'instrument souhaité change de propriété et devient étendu (il peut être réduit) et global, et le script se ferme.

 
Valeriy Yastremskiy #:

Logiquement, le script devrait trouver combien de graphiques/fenêtres sont ouverts et pour quels instruments, les mémoriser (symboles et chart_idies), puis, en fonction du nombre d'instruments, dessiner un panneau avec des boutons avec le nom de l'instrument écrit dessus. En appuyant sur le bouton, le graphique avec l'instrument souhaité change de propriété et devient étendu (il peut être réduit) et global, et le script se ferme.

Mauvaise logique - quelle différence cela fait-il - dans quels boutons regarder - en bas, dans la fenêtre de menu ou dans les boutons dessinés par le script ? Il faut faire en sorte que lorsque vous entrez le symbole souhaité dans les paramètres d'entrée, le script ouvre cette fenêtre pour vous - ce qui serait plus facile et plus rapide. Si quelqu'un connaît un tel miracle, merci de le partager.
 

Bonjour !

Je cherche un EA, un gestionnaire de réseau.

Ouvre les ordres de marché dans une grille.

Ferme les ordres lorsque la grille atteint un certain (%) de profit.

J'ai vu un tel conseiller expert, et maintenant je ne peux pas le trouver.

J'ai vu un tel conseiller expert, et maintenant je ne peux pas le trouver.

 
DanilaMactep #:
Mauvaise logique - quelle différence cela fait-il de savoir quels boutons regarder - en bas, dans la fenêtre du menu ou dans les boutons dessinés par le script ? Cela doit être fait d'une manière ou d'une autre, que vous avez entré le symbole désiré dans les paramètres d'entrée, et le script a ouvert cette fenêtre pour vous - donc plus facile et plus rapide serait. Si quelqu'un connaît un tel miracle, merci de le partager.
Ouvrir une nouvelle fenêtre (s'ouvre sans EA et avec le modèle par défaut) ou augmenter ou élargir une fenêtre déjà ouverte.
Regardez le code joint, il y a une énumération de graphiques et un dessin sur le graphique par condition. Peut-être que ça aidera.