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

 
Valeriy Yastremskiy:

Je ne comprends pas, peut-être que je parle de la mauvaise fenêtre. Je veux dire la fenêtre du graphique où se trouvent les barres. Ils bougent. Il y a aussi des fenêtres de dialogue lors du chargement des indicateurs EA, des fenêtres d'alerte, des fenêtres de message, mais elles sont toutes mobiles. De quelle fenêtre s'agit-il ? La boîte de dialogue n'a rien à voir avec cela. Je n'ai pas non plus de bibliothèques dans 4

Voici la fenêtre du hibou.


Je veux pouvoir le déplacer sur la carte quand j'en ai besoin.

 
MakarFX:

Voici la fenêtre de la chouette


C'est ce que je veux déplacer sur le planning quand j'en ai besoin.

Ce n'est pas une fenêtre, c'est un panneau. Tu peux le déplacer, je ne peux même pas te dire le code. J'ai besoin du code et de le redessiner en général. Je dois trouver l'endroit où le panneau est dessiné et les coordonnées sont spécifiées - ensuite, en utilisant les événements, je clique pour le déplacer, le supprimer et en dessiner un nouveau. Comme ça. Mais je ne suis pas du tout un dessinateur.

 
Valeriy Yastremskiy:

Lorsque vous supprimez dans l'EA, vous n'avez pas besoin de nettoyer le commentaire, mais dans l'indicateur vous devez le faire. Est-ce que c'est conçu comme ça ?

Un bon programmeur devrait au moins écrire

void OnDeinit(const int reason)
{
     Comment( "" );
}
Si des commentaires ont été utilisés, il les nettoiera après son passage. Et beaucoup de débutants n'y prêtent pas attention. C'est ça le secret.
 
Bonjour.
Pouvez-vous me dire (formule) comment calculer le prix pour un certain niveau (en tenant compte des positions ouvertes) ? Pour calculer à quel prix il y aura un appel de marge et un stop out.
 
Konstantin Nikitin:

Un bon programmeur devrait au moins écrire

Si des commentaires ont été utilisés, il les nettoiera après son passage. Et beaucoup de débutants n'y prêtent pas attention. C'est ça le secret.

C'est ce que j'ai écrit, et j'en ai parlé plus haut). La question était de savoir pourquoi ce comportement différent dans les EE et les indicateurs. Y a-t-il un sens caché ou s'est-il développé historiquement à partir de différentes équipes de rédaction ?)

 
Konstantin Nikitin:

Un bon programmeur écrira au moins

Si des commentaires ont été utilisés, il les nettoiera après son passage. Et beaucoup de débutants n'y prêtent pas attention. C'est tout le secret.
En fait, il n'y a pas d'exigences générales évidentes à ce sujet.
 
Andrey Sokolov:
En fait, il n'existe pas d'exigences générales explicites à ce sujet.

Ai-je parlé de l'exigence ? J'ai seulement dit que certains tiennent compte de ce point et d'autres non.

 
Konstantin Nikitin:

Ai-je parlé de l'exigence ? J'ai seulement dit que certains tiennent compte de ce point et d'autres non.

Pas comme ça.

 

La bibliothèqueEASY AND FAST https://www.mql5.com/ru/articles/3527 implémente la possibilité de démarrer une fenêtre de programme dans une sous-fenêtre d'indicateur en chargeant le fichier "SubWindow.mq5", dans mql5 tout fonctionne, dans mql4 aussi le contenu est compilé sans erreurs, mais la sous-fenêtre ne s'ouvre pas, que faire ?


//+------------------------------------------------------------------+
//|                                                    SubWindow.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property indicator_separate_window
#property indicator_plots   0
#property indicator_buffers 0
#property indicator_minimum 0.0
#property indicator_maximum 0.0
//--- Имя программы
#define  PROGRAM_NAME ::MQLInfoString(MQL_PROGRAM_NAME)
//--- Идентификатор события для изменения высоты подокна эксперта
#define  ON_SUBWINDOW_CHANGE_HEIGHT (38)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- Короткое имя индикатора
   ::IndicatorSetString(INDICATOR_SHORTNAME,PROGRAM_NAME);
//--- Инициализация прошла успешно
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Деинициализация                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total,
                const int    prev_calculated,
                const int    begin,
                const double &price[])
  {
//--- Если инициализация прошла успешно
   if(prev_calculated<1)
      //--- Отправим сообщение эксперту, чтобы получить от него размер для подокна
      ::EventChartCustom(0,ON_SUBWINDOW_CHANGE_HEIGHT,0,0.0,PROGRAM_NAME);
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int    id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Обработка события изменения высоты подокна эксперта
   if(id==CHARTEVENT_CUSTOM+ON_SUBWINDOW_CHANGE_HEIGHT)
     {
      //--- Принимать сообщения только от имени эксперта
      if(sparam==PROGRAM_NAME)
         return;
      //--- Изменить высоту подокна
      ::IndicatorSetInteger(INDICATOR_HEIGHT,(int)lparam);
      //--- Обновить график
      ::ChartRedraw();
     }
  }
//+------------------------------------------------------------------+
 

Bonjour à tous !

J'essaie d'attacher une vérification de compte à (n'importe quel) indicateur !

bool VerifityToSchet()
  {
   if(AccountNumber() != account)
     {
      Print("На данном счете индикатор работать не будет, вы его приобрели незаконным путем!!!");   
     }else
     {
     Print("На данном счете индикатор авторизован");
     }
   return(false);
  } 

Je l'ai activé dans init() et start() bien sûr, mais quand je redémarre le terminal, il dit que le compte est invalide !

Qu'est-ce que je fais de mal ?