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

 
Iosebi Tavadze:
Je suis peut-être dans le mauvais fil. Que les dieux me pardonnent. J'ai besoin d'écrire un indicateur, qui donnerait un signal à partir d'une combinaison de quatre ou cinq indicateurs installés dans le sous-sol. Ou un conseiller prêt à l'emploi. Un conseil éventuel s'il vous plaît !!!!!!!!!!

Si vous avez besoin que quelqu'un l'écrive pour vous, allez ici.

Si vous voulez le faire vous-même, dites-nous ce que vous ne pouvez pas faire et postez votre code.

 
simeon068 :
Comment puis-je ajouter un conseiller expert à un dossier mql5 et le faire apparaître dans la section des conseillers ?

Dans le terminal, dans le menu "Fichier", sélectionnez "Ouvrir le répertoire de données" - l'explorateur s'ouvre. Dans celui-ci, allez dans le dossier MQL5 \ Experts - placez votre conseiller dans ce dossier ou dans n'importe quel sous-dossier. Ensuite, dans le navigateur du terminal, dans le menu du bouton droit, sélectionnez "Update".

 

Quelqu'un peut-il me conseiller ? Quel est l'avertissement et comment le réparer ?

Instantané3

en ce lieu

// если активны входящие параметры, использующие значение текущей цены по инструменту,
// тогда пытаемся получить текущие значения
   if(hide_PRICE_HIGH>0 || hide_PRICE_LOW>0 || hide_SPREAD>0)
     {
      SymbolInfoTick(name, lastme);
      if(lastme.bid==0)
        {
         Alert("("+name+") Получить значение BID не удалось. Некоторые функции фильтрации могут не работать.");
        }
     }
// Скрыть символы, у которых спред:
   if(hide_SPREAD>0 && lastme.bid>0)
     {
      switch(hide_SPREAD)
        {
         // если текущий спред больше 0.05% от цены - пропускаем символ
         case spread_b05:
            if(((SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT))/lastme.bid)*100 > 0.05)
              {
               isskip=true;
              }
            break;
         // если текущий спред больше 0.1% от цены - пропускаем символ
         case spread_b1:
            if(((SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT))/lastme.bid)*100 > 0.1)
              {
               isskip=true;
              }
            break;
         // если текущий спред больше 0.15% от цены - пропускаем символ
         case spread_b15:
            if(((SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT))/lastme.bid)*100 > 0.15)
              {
               isskip=true;
              }
            break;
         // если текущий спред меньше 0.15% от цены - пропускаем символ
         case spread_l15:
            if(((SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT))/lastme.bid)*100 < 0.15)
              {
               isskip=true;
              }
            break;
         // если текущий спред меньше 0.1% от цены - пропускаем символ
         case spread_l1:
            if(((SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT))/lastme.bid)*100 < 0.1)
              {
               isskip=true;
              }
            break;
         // если текущий спред != 0.01 - пропускаем символ
         case spread_c1:
            if(SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT) > 0.01)
              {
               isskip=true;
              }
            break;
         // если текущий спред > 0.03 - пропускаем символ
         case spread_c3:
            if(SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT) > 0.03)
              {
               isskip=true;
              }
            break;
         // если текущий спред > 0.07 - пропускаем символ
         case spread_c7:
            if(SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT) > 0.07)
              {
               isskip=true;
              }
            break;
         // если текущий спред > 0.1 - пропускаем символ
         case spread_c10:
            if(SymbolInfoInteger(name, SYMBOL_SPREAD)*SymbolInfoDouble(name, SYMBOL_POINT) > 0.1)
              {
               isskip=true;
              }
            break;
        }
     }
 
Alexsandr San:

Quelqu'un peut-il me conseiller ? Quel est l'avertissement et comment le réparer ?

en ce lieu


Je pense que je l'ai réparé - sauf que je ne sais pas si c'est correct ? Mettez-le dehors.

Instantanés corrigés

 
Alexsandr San:

Quelqu'un peut-il me conseiller ? Quel est l'avertissement et comment le réparer ?

en ce lieu


Vous utilisez peut-être une variable lastme non initialisée. Vous l'avez déclaré sans initialisation. Il n'est pas garanti qu'il soit rempli par SymbolInfoTick().

Déclarer une variable avec initialisation tout de suite : MqlTick lastme={0} ;

 
Artyom Trishkin:

Il est possible d'utiliser une variable lastme non initialisée. Vous l'avez déclaré sans initialisation. Il n'est pas garanti qu'il soit rempli par SymbolInfoTick().

Déclarer une variable avec initialisation tout de suite : MqlTick lastme={0} ;

Merci beaucoup, l'avertissement a disparu. Bonne santé et bonne continuation ! !!

--------------------------

Je l'ai remis à l'intérieur - comme vous l'avez montré.


bon utilitaire, je l'ai téléchargé d'icihttps://www.mql5.com/ru/articles/5614

Dossiers :
finder.mq5  296 kb
finder.mq4  296 kb
 

Pouvez-vous me dire comment demander des données à une bibliothèque ?

J'essaie de créer une chouette avec une interface de saisie de données.

Ça ressemble à ça

entrer le code du champ

//+------------------------------------------------------------------+
//| Создаёт поле ввода 1                                             |
//+------------------------------------------------------------------+
bool CProgram::CreateSpinEdit1(const int x_gap,const int y_gap,string text)
  {
//--- Сохраним указатель на окно
   m_spin_edit1.WindowPointer(m_window);
//--- Координаты
   int x=m_window.X()+x_gap;
   int y=m_window.Y()+y_gap;
//--- Значение
   double v=(m_spin_edit1.GetValue()==WRONG_VALUE) ? 0 : m_spin_edit1.GetValue();
//--- Установим свойства перед созданием
   m_spin_edit1.XSize(204);
   m_spin_edit1.YSize(24);
   m_spin_edit1.EditXSize(80);
   m_spin_edit1.MaxValue(10000);
   m_spin_edit1.MinValue(0);
   m_spin_edit1.StepValue(10*Point);
   m_spin_edit1.SetDigits(Digits);
   m_spin_edit1.SetValue(v);
   m_spin_edit1.ResetMode(true);
   m_spin_edit1.AreaColor(clrWhite);
//--- Создадим элемент управления
   if(!m_spin_edit1.CreateSpinEdit(m_chart_id,m_subwin,text,x,y))
      return(false);
//--- Добавим объект в общий массив групп объектов
   CWndContainer::AddToElementsArray(0,m_spin_edit1);
   return(true);
  }

Comment puis-je l'interroger ?

m_spin_edit1.GetValue()
 
MakarFX:

comment le demander ?

probablement comme ça :

имя_объекта. m_spin_edit1.GetValue()

 
Igor Makanu:

Je suppose que oui :

que signifie le nom de l'objet ?

Je dois le faire.

   double OrderBuy = m_spin_edit1.GetValue();

mais dans ce cas, l'erreur

m_spin_edit1' - identifiant non déclaré TestLibrary.mq4 56 20

 
MakarFX:

que signifie le nom de l'objet ?

Je doute pouvoir expliquer, si c'est ce que vous demandez.

un objet est ... Disons qu'une variable de type classe

dans votre section de code est la classe CProgram

cela doit être écrit quelque part dans le code

CProgram MyProgram;

et vous devrez appeler

 double OrderBuy = MyProgram.m_spin_edit1.GetValue();