Questions des débutants MQL5 MT5 MetaTrader 5 - page 188

 
Vikon:

Bonjour !

Je n'arrive pas à trouver l'intervalle pour afficher un objet graphique.

sur tous les horizons temporels.

Merci.

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
Est-ce que quelqu'un sait si le compilateur a une clé pour obtenir des messages sur les fonctions et les variables inutilisées, comme c'est le cas dans MQL4 ?

Comment cela se fait-il dans mql4 ?

Interrogé sur le fait de ne pas afficher les avertissements concernant les fonctions inutilisées, M. Renat a répondu par la négative. En ce qui concerne l'utilisation des bibliothèques enfichables. C'était dans l'ancienne version. Maintenant, ça ne l'est plus. Il est très peu pratique de rechercher dans le corps de l'EA les fonctions qui ne sont pas utilisées. Il ne parle des variables inutilisées que s'il les trouve dans le corps d'une fonction, pas dans start() ou OnTick().

 
artmedia70:

Comment cela se passe-t-il dans mql4 ?

Interrogé sur le fait de ne pas afficher les avertissements concernant les fonctions inutilisées, M. Renat a répondu par la négative. En raison de l'utilisation de bibliothèques de plugins. C'était dans l'ancienne version. Maintenant, ce n'est plus le cas. Il est très peu pratique de rechercher dans le corps de l'EA les fonctions qui ne sont pas utilisées. Il ne parle des variables inutilisées que s'il les trouve dans le corps d'une fonction, et non dans start() ou OnTick().

Parce qu'en POO, ce ne sont pas des fonctions, mais des méthodes. Chaque bibliothèque peut avoir un tas de classes avec de nombreuses méthodes, dont certaines ne sont pas utilisées. En outre, les classes font également référence à d'autres bibliothèques, dont certaines méthodes ne sont pas non plus utilisées. Cela peut donner lieu à un énorme gâchis de méthodes inutilisées.

À en juger par la quantité de code compilé, le compilateur élimine automatiquement les méthodes inutilisées. C'est-à-dire qu'il est inutile de les rechercher par vous-même, car ce travail est effectué par le compilateur.

 
Reshetov:

Parce qu'en POO, pas de fonctions, mais des méthodes. Chaque bibliothèque peut avoir un tas de classes avec de nombreuses méthodes, dont certaines ne sont pas utilisées. En outre, les classes font également référence à d'autres bibliothèques, dont certaines méthodes sont également inutilisées. Cela peut donner lieu à une énorme pile de méthodes inutilisées.

A en juger par la taille du code compilé, le compilateur élimine automatiquement les méthodes inutilisées. C'est-à-dire qu'il est inutile de les rechercher par vous-même, car le compilateur fait ce travail.

Ce n'est pas le problème. Le problème est justement de trouver des méthodes inutilisées dans vos classes. J'ai plus de cinq cents méthodes à moi. Les interrelations sont très complexes. Le code d'exécution est inévitable. Il pourrait être très utile de jeter un coup d'œil rapide à ce qui n'est plus utilisé.
 
Reshetov:

Parce qu'en POO, pas de fonctions, mais des méthodes. Chaque bibliothèque peut avoir un tas de classes avec de nombreuses méthodes, dont certaines ne sont pas utilisées. En outre, les classes font également référence à d'autres bibliothèques, dont certaines méthodes sont également inutilisées. Cela peut donner lieu à une énorme pile de méthodes inutilisées.

A en juger par la taille du code compilé, le compilateur élimine automatiquement les méthodes inutilisées. C'est-à-dire qu'il est inutile de les rechercher par vous-même car le compilateur fait ce travail.

Yuri, c'est naturel. Mais quand vous donnez le code source à un client, vous voulez le nettoyer. Et c'est ainsi que commence le processus tortueux. Il n'y a pas beaucoup de modèles - plusieurs pour certaines classes de CT. Je dois nettoyer les fonctions qui ne sont pas impliquées dans ce cas. J'aimerais avoir un "bouton magique" qui pointerait vers des fonctions et des variables inutilisées uniquement dans le corps de l'EA.
 

J'espère que la discussion de la question précédente est terminée. Il est difficile de savoir quand le sujet est clos et qu'il est approprié de poser votre question. Pouvez-vous me donner un indice ? Je n'arrive pas à trouver comment remplir un tableau 2D avec les résultats des calculs deSt_handle etMA_handle, je ne peux que les passer dans un tableau unidimensionnel.

/+------------------------------------------------------------------+
//|                                                           11.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      Input1=0;
input int      Input2=0;

//--- indicator buffers
double         Label1Buffer[];
double      MA[10000][400];  
int         St_handle; 
int         MA_handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   
//---
   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[])
  {
//---
   int Kp     =51; // с Kp начанается К% на Kp_end заканчивается
   int Kp_end =400;// с Kp начанается К% на Kp_end заканчивается
   int MAp    =2;  // с MAp начанается D% на MAp_end заканчивается
   int MAp_end=31// с MAp начанается D% на MA_end заканчивается
   ENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High    1 Close/Close


   St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);  
  
   for(MAp=2;MAp<MAp_end;MAp++)
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
   }
    
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
C-4:
Ce n'est pas le problème. Le problème est justement de trouver des méthodes inutilisées dans vos classes.

Que voulez-vous dire : méthodes inutilisées dans vos classes ? Ce n'est pas la pratique dans la POO. Un programmeur OOP normal, contrairement à la programmation algorithmique, crée des classes avec tous les champs et méthodes nécessaires, comme on dit, pour toutes les occasions, car la même classe peut être utilisée ultérieurement dans d'autres applications ou faire partie d'une bibliothèque de classes. Sans parler du fait que, même au sein d'un même projet, il est préférable de créer des classes complètes, et non dépouillées, afin de ne pas avoir à chercher dans le code source et à ajouter les champs et méthodes nécessaires ultérieurement.

En POO, toute économie, à laquelle de nombreuses personnes s'habituent dans la programmation algorithmique, peut s'avérer préjudiciable par la suite. Tout ce qui n'est pas utilisé doit être exclu du code par le compilateur et non par le programmeur.

Bien sûr, la POO donne lieu à un code source plus important que la programmation algorithmique. Mais ce n'est pas un inconvénient, mais un avantage, car une grande partie du code "supplémentaire" de ce projet peut être réutilisé dans d'autres projets.

C-4:


J'ai plus de cinq cents méthodes à moi. Les interrelations sont très complexes. Un code rudimentaire est inévitable. Il est très utile de voir rapidement ce qui n'est plus utilisé.

Il ne faut pas essayer de faire une énigme, c'est-à-dire de tout faire entrer dans une seule classe. Vous devez créer des bibliothèques de classes, c'est-à-dire décomposer la fonctionnalité en classes distinctes et ne pas oublier d'inclure des commentaires sur ces éléments, et tout s'arrangera. Au départ, lorsque j'ai commencé à apprendre Java après Pascal, j'ai aussi essayé de tout faire en un seul morceau, c'est-à-dire qu'au lieu d'utiliser la POO, j'ai créé une classe avec tout ce dont j'avais besoin pour une certaine tâche, tout comme dans la programmation algorithmique. Le résultat était un désordre non universel impossible à appliquer partout par la suite, sans compter qu'il était difficile de comprendre un tel code.
 
Andrei-1:

Pouvez-vous me donner un indice ? Je n'arrive pas à trouver comment remplir un tableau 2D avec les résultats des calculs deSt_handle etMA_handle, je ne peux que les passer dans un tableau unidimensionnel.

Quel est l'intérêt ? Par exemple, pourquoi faire une bosse au lieu d'utiliser le rasoir d'Occam ? Par exemple, quel est l'avantage d'un tableau à deux dimensions par rapport à deux tableaux à une dimension ? Après tout, il faut d'abord pousser quelque chose de deux unidimensionnels créés par des indicateurs par défaut dans un bidimensionnel, puis en sortir quelque chose. Vous faites un travail inutile et essayez d'y entraîner les autres.

Si les tableaux unidimensionnels posaient un problème, cela en vaudrait la peine.

 
Après avoir farfouillé sur le forum, je suis tombé sur la quantité de mémoire que cela va prendre, beaucoup ! J'ai décidé de remplir un tableau unidimensionnel, d'y chercher un signal, de l'écraser et de chercher à nouveau un signal. Je veux toujours 10K cycles. Comme ça. Une ou deux recherches par heure me suffisent.
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика 
  
   for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний 
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастика
    CopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастика
    if(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
    
   }
 

Désolé si c'est hors sujet ...

aide qui peut ...

dans la procédure dll de delphi 7...

procédure test1(var data : tableau de Double) ; stdcall ;
begin
ShowMessage('Entered ') ;

fin ;

dans mt4 :

#import "gayss.dll"
void test1( double &data[] ) ;
#import

ArrayResize(data, 6) ;
data[0]= 2 ;
data[1]= 4 ;
data[2]= 8 ;
data[3]= 16 ;
data[4]= 21 ;

données[5]= 3 ;

test1(données) ;

et une erreur s'affiche... 2014.02.06 17:39:04.241 pile endommagée, vérifier l'appel de fonction DLL dans 'SOG_2014.mq4' (80,7)

Qui sait comment le faire correctement...
Raison: