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

 
Artyom Trishkin:

La meilleure recommandation ici est de lire l'aide plus souvent.

Il spécifie les propriétés qui peuvent être récupérées/réglées pour le graphe.

En particulier - faire défiler le graphique avec le bouton gauche de la souris.

C'est l'endroit de la documentation que j'ai lu.

Lorsque CHART_EVENT_MOUSE_MOVE = 1, le graphique reçoit les messages de mouvement de la souris, mais lorsque CHART_EVENT_MOUSE_MOVE = 0, il ne les reçoit pas. C'est compréhensible.
Mais ce n'est pas pertinent pour ma question... Quelle que soit la valeur définie pour CHART_EVENT_MOUSE_MOVE, j'ai toujours la possibilité de "déplacer" le graphique lorsque AUTOSCROLL est désactivé.
"déplacer" le graphique dans la fenêtre vers le passé (en termes de temps) en appuyant simplement sur le bouton gauche de la souris et sans relâcher le bouton, déplacez la souris vers la droite.
Cela déplace le graphique dans la fenêtre TOUJOURS.
Cependant, si j'appuie sur Ctrl+F (pour appeler Crosshair) - puis lorsque j'appuie sur le bouton gauche de la souris, que je le maintiens enfoncé et que je déplace le graphique, je verrai le faisceau
l'infobulle affichera des données sur le mouvement de la souris et le prix du niveau où se trouve le pointeur de la souris.
Et surtout, le graphique lui-même, à ce moment-là, ne bougera pas dans la fenêtre.

C'est comment obtenir cet effet sans activer Crosshair, c'est ce que je demande...

P.S. Je peux prendre une vidéo de l'écran et vous montrer à quoi il ressemble.

 
Maksims Ignatovs:

J'ai lu cet endroit dans la documentation.

Lorsque CHART_EVENT_MOUSE_MOVE = 1, le graphique reçoit des messages sur le déplacement de la souris, mais si CHART_EVENT_MOUSE_MOVE = 0, il n'en reçoit pas. C'est compréhensible.
Mais ce n'est pas pertinent pour ma question... Quelle que soit la valeur définie pour CHART_EVENT_MOUSE_MOVE, j'ai toujours la possibilité de "déplacer" le graphique lorsque AUTOSCROLL est désactivé.
"déplacer" le graphique dans la fenêtre vers le passé (en termes de temps) en appuyant simplement sur le bouton gauche de la souris et sans relâcher le bouton, déplacez la souris vers la droite.
Cela déplace le graphique dans la fenêtre TOUJOURS.
Cependant, si j'appuie sur Ctrl+F (pour appeler Crosshair) - puis lorsque j'appuie sur le bouton gauche de la souris, que je le maintiens enfoncé et que je déplace le graphique, je verrai le faisceau
l'infobulle affichera des données sur le mouvement de la souris et le prix du niveau où se trouve le pointeur de la souris.
Et surtout, le graphique lui-même, à ce moment-là, ne bougera pas dans la fenêtre.

C'est comment obtenir cet effet sans activer Crosshair, c'est ce que je demande...

P.S. Je peux prendre une vidéo de l'écran et vous montrer à quoi il ressemble.

N'ai-je pas répondu à cette question ?
Si vous déplacez quelque chose sur le graphique avec la souris, vous interdisez le déplacement du graphique à ce moment-là. Dès que vous relâchez le bouton de la souris, vous permettez au graphique de se déplacer.

 

Peut-on accéder aux champs d'une structure en utilisant l'indexation, c'est-à-dire comme un tableau unidimensionnel ? Est-il possible de créer un tableau de champs de structure ?

L'idée est donc la suivante . Il existe une structure

struct MyStruct {int qw;double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{int qw[5];double qe[5];}; MyStruct1 qr1;

Ensuite, lorsqu'on transmet une structure quelconque à une fonction, on doit s'adresser à chaque élément par son nom séparément.

qr.qw qr.q51e, etc. Bien sûr, vous ne pourrez pas le mettre dans une boucle et le traiter avec un seul thread. Je veux créer un tableau de champs qui stockera ces éléments comme suit

Massiv[2];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

Par conséquent, nous pouvons traiter ces éléments par le biais de l'indexation et, bien sûr, la deuxième structure peut être placée dans une boucle et traiter qw qe à travers la boucle.

Est-il possible de le faire ? J'ai vu de telles entrées sur Internet il y a quelque temps, mais peut-être ai-je mal compris quelque chose parce que j'ai perdu le site ? Peut-être que les macros d'union typedef enum peuvent aider dans ce domaine ?

 
Artyom Trishkin:
N'ai-je pas répondu à cette question ?
Si vous déplacez quelque chose sur le graphique avec la souris, vous désactivez le déplacement du graphique à ce moment-là. Dès que vous relâchez le bouton de la souris, vous permettez au graphique de se déplacer.

Je ne déplace rien sur la carte. Si je définisCHART_EVENT_MOUSE_MOVE = 0, cela n'aide pas - le graphique peut toujours être déplacé.
Je ne sais pascomment désactiver le traitement ChartNavigate pour le graphique. Je ne l'ai pas trouvé non plus dans la documentation.
En même temps, "crosshair" s'adapte en quelque sorte à ce cas. C'est pourquoi je demande : comment ?
Vous me répondez - il suffit de définir la valeur correcte pourCHART_EVENT_MOUSE_MOVE. J'ai essayé - cela ne sert à rien.
Avec n'importe quelle valeur de
CHART_EVENT_MOUSE_MOVE, vous pouvez toujours déplacer le graphique avec la souris en avant et en arrière dans le temps en maintenant simplement le bouton gauche de la souris sur le graphique et en déplaçant la souris.
En même temps, selon la direction du déplacement horizontal de la souris, le graphique se déplace dans la fenêtre Si je déplace la souris vers la droite, le graphique se déplace vers la gauche (vers l'historique passé),
et si je déplace la souris vers la gauche, le graphique se déplace vers le futur jusqu'à ce que la barre actuelle apparaisse. Après cela, une tentative de le déplacer vers la gauche avec la souris ne fonctionnera pas. Mais c'est compréhensible.
Si je
déplace le graphique dans la fenêtre à une certaine date dans le passé en utilisant ChartNavigate, que dois-je faire pour m'assurer qu'en aucun cas (aucune manipulation avec des clics et des mouvements de souris sur le graphique), la partie du graphique que je vois ne sera déplacée ? Que dois-je faire ?


 
Maksims Ignatovs:

Je ne déplace rien sur la carte. Si je définis CHART_EVENT_MOUSE_MOVE = 0, cela n'aide pas - le graphique peut toujours être déplacé.
Je ne sais pas comment désactiver le traitement ChartNavigate pour le graphique. Je ne l'ai pas non plus trouvé dans la documentation.


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
Bon après-midi, s'il vous plaît fixer l'indicateur, vous avez besoin d'afficher l'heure du serveur par le biais du bouton, à condition que le bouton dans sa position originale devrait montrer
Voici ce que je n'ai PAS obtenu :
#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

string s1="";

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

   PutButton("B",50,50,"KNOPKA");
   
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";

   ObjectCreate("WeekDay1",OBJ_LABEL,0,0,0);          
   ObjectSet("WeekDay1",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);
   ObjectSet("WeekDay1",OBJPROP_YDISTANCE,2);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_HIDDEN,true);
   ObjectSet("WeekDay1",OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_COLOR,Black);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_SELECTED,false);
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);
   
   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[])
 {
 
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";
 
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);

  return(rates_total);
 }/*******************************************************************/

/********************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_CLICK)
   {
   
         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);    // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
 

vebster005:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

qu'est-ce qui n'a pas marché exactement ? c'est-à-dire, dans vos propres mots, ce que vous vouliez faire...

un bouton est créé, quand on appuie dessus, il disparaît de l'écran (s'il n'est pas large)

pourquoi n'êtes-vous pas satisfait du résultat ?

 
Maxim Kuznetsov:

qu'est-ce qui n'a pas marché exactement ? c'est-à-dire, dans vos propres mots, ce que vous vouliez faire...

le bouton est fait, quand on appuie dessus, il sort de l'écran (s'il n'est pas large)

Qu'est-ce qui ne va pas dans ce résultat ?

le résultat est que lorsque vous avez cliqué sur le bouton l'heure était cachée puis réapparaissait car elle est mise à jour du fait que dans la calculatrice

 
Maxim Kuznetsov:

Qu'est-ce que vous n'avez pas réussi à faire exactement ? c'est-à-dire, dans vos propres mots, ce que vous vouliez faire...

un bouton est créé, quand on appuie dessus, il disparaît de l'écran (s'il n'est pas large)

pourquoi n'êtes-vous pas satisfait du résultat ?

Pourriez-vous le faire fonctionner pour les secondes et tout le reste, comme dans le terminal, et vous pouvez désactiver le bouton
parce que lorsque je désactive le bouton (je le retire de l'écran), l'heure réapparaît.

 
vebster005:

Pourriez-vous obtenir le résultat que les secondes et tout le reste fonctionne, comme dans le terminal, et vous pouvez désactiver le bouton
parce que lorsque je désactive le bouton (je le retire de l'écran), l'heure réapparaît.

Il y a beaucoup de gens ici qui peuvent obtenir presque tous les résultats.

Il est important que vous essayiez vous-même de les atteindre, plutôt que de supplier les autres de le faire pour vous. Ils sont toujours prêts à aider, mais pour aider, pas pour faire à votre place.