[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 776

 
vasya_vasya:
en créant un objet errow où vous sélectionnez le code du symbole ou en utilisant un objet label.

Merci) Eh, c'est dommage qu'il n'y ait pas de points(
 
FoxUA:
Je ne suis pas un travailleur, mais j'essaie d'écrire un conseiller expert pour la semaine sur laquelle je travaille. J'essaie d'écrire une évaluation environnementale pour un emploi, mais j'ai appris plus que son nom et son application il y a seulement une semaine, Je ne sais pas à quoi ça sert, mais j'ai trouvé difficile de démonter des choses sans savoir à quoi elles servent, alors j'ai décidé d'essayer de faire quelque chose de nouveau, mais bien sûr on ne peut pas tout voir, j'ai juste fait la seule chose que je voulais faire : j'ai pris la COMMANDE REMARQUÉE au prix REMARQUÉ et ce n'était pas grave. MAIS MERCI POUR VOTRE TEMPS,

Sans vouloir vous offenser. Votre code est compliqué pour un débutant. Vous devez passer du simple au complexe. Il doit y avoir une approche systématique de l'apprentissage, sinon cela ne servira à rien.
 
Puis-je utiliser mql4 pour trouver le numéro de la barre ou tout autre paramètre de prix de cette barre qui n'est pas sur la période actuelle du graphique, si l'heure de son ouverture (de cette barre) est connue ?
 
drknn:

Ne soyez pas offensé. Votre code est compliqué pour un débutant. Vous devez passer du simple au complexe. Vous devez avoir une approche systématique de l'apprentissage, sinon cela ne servira à rien.

Je ne suis pas d'accord avec vous là, vous devez avoir un objectif en tête et le reste suivra, mais vous avez besoin d'aide. Quant à la complexité, qu'est-ce qui n'est pas compliqué et simple avec l'exemple de robot de trading ? Je ne fais pas un gros EA avec des calculs compliqués mais un simple qui ouvre le marché et attend, puis modifie et supprime tout le tableau pour apprendre le fonctionnement et les méthodes pour affecter l'autre !
 
FoxUA:

Je ne suis pas d'accord avec vous là, il faut avoir un but, tout le reste suivra, mais, bien sûr, on ne peut pas faire sans aide. Quant à la complexité, qu'est-ce que vous pensez être simple et facile à construire ? Je ne fais pas un gros EA avec des calculs et des indicateurs complexes mais un simple qui ouvre le marché un, puis modifie et supprime tout le tableau pour apprendre le principe de fonctionnement et les méthodes d'action sur l'autre !


Changez la logique de la construction du code et la logique de la dénomination des variables. C'est la première chose que vous devez faire. Il n'y a pas de problème si le nom d'une variable comporte plus de 5 caractères. Dans la lutte pour la clarté du code, la clarté des noms, la délimitation des blocs avec des espaces, les signes de paragraphe et les commentaires sont sacrément importants. Plus vous apprenez un langage (et pas seulement MQL), plus votre code devient compliqué. Si vous ne prenez pas l'habitude de donner des noms de variables faciles à lire, et si vous ne prenez pas l'habitude d'organiser le code en blocs (avec des explications), tôt ou tard vous créerez du code où vous aurez du mal à trouver l'erreur logique, en vous maudissant d'avoir rendu votre code si illisible.

Si le code que vous avez montré ne vous semble pas compliqué en tant que débutant, c'est un plus pour vous.

 
FoxUA:
que recommandez-vous ? je serais très intéressé par votre opinion !

Voici un exemple de code organisé en blocs et où les noms des variables ne suscitent pas de doutes quant à la raison pour laquelle une variable particulière est appliquée - regardez leurs noms, les commentaires sur les blocs...

 
RekkeR:
Bonsoir à tous et bonne semaine à venir. Je suppose que je suis stupide avec la chaleur, en fait la question est comment déterminer la distance entre les lignes en pips ?

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Distance=(Prix1-Prix2)/Point ;

Ceci si l'on veut déterminer la distance entre deux lignes à l'heure actuelle.

 
drknn:

Voici un exemple de code organisé en blocs et dans lequel les noms des variables ne suscitent pas de doutes quant à la raison pour laquelle telle ou telle variable est appliquée - regardez leurs noms, les commentaires des blocs...

Je suis d'accord avec le fait que parfois il faut se souvenir de ce qu'on voulait écrire là et qu'on ne s'en souvient pas, mais c'est plus une méthode de travail, mais pas une étude, c'est pour ainsi dire le pinceau dans les mains d'un artiste, et je suis intéressé par le choix des couleurs et des techniques pour écrire un simple petit tableau, car j'ai déjà un paysage et il est clairement dessiné, donc je me demandais s'il est possible d'avoir en main un livre intéressant décrivant la technique d'écriture pour en tout la même sur internet et dans le manuel, seulement en d'autres mots et ce que vous avez écrit sur l'exemple des racines, c'est une technique de robotique donc je serais heureux de lire si les exemples et les images !

 
tara:

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

Distance=(Prix1-Prix2)/Point ;

Ceci si l'on veut déterminer la distance entre deux lignes à l'heure actuelle.

Il y a plusieurs lignes horizontales, je dois déterminer les quotas entre elles dans différentes combinaisons, en principe, à ce stade je suis assez satisfait de la détermination entre les deux lignes, le reste je le ferai manuellement. Peut-être existe-t-il un script prêt à l'emploi ou un tel indicateur ? Merci pour vos commentaires.
 
FoxUA:

...

C'est le genre de choses que j'aimerais lire avec des exemples et des photos !

Eh bien, faisons une expérience ! Écrivons deux scripts. L'un d'eux contiendra une description correcte de la fonction. L'autre contiendra le mauvais. Donc, c'est le bon script :

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы правильного скрипта                 |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("---- Правильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

Et c'est le mauvais scénario :

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы неправильного скрипта               |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("----НЕправильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue=36){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

C'est incorrect car la ligne double MyKoren(double MyValue=36){ initialise la variable MyValue avec la valeur = 36. Cela n'a aucun sens car nous passons la valeur = à la variable DlyaKornya dans la sous-routine .

Maintenant nous lançons les deux scripts séquentiellement sur le graphique. Voici ce que nous voyons :

Hélas, les deux scripts ont produit le même résultat.

Le deuxième script (incorrect) aurait dû produire la valeur = 6. Le compilateur a très probablement intégré une fonction infaillible puisque la ligne double MyKoren(double MyValue=36){ n'a aucun sens. L'initialisation de la variable qu'elle contient avec la valeur =36 ne fonctionnera probablement que si la fonction est appelée sans spécifier de paramètres. Dans notre cas, la chose suivante a dû se produire - lors de l'appel de la sous-routine, la variable double MyValue a été déclarée en premier, puis on lui a attribué la valeur = 36 et seulement après on lui a attribué la valeur stockée dans la variable DlyaKornya. Je ne vois pas d'autre explication.

Quoi qu'il en soit, il est préférable de ne pas utiliser des constructions comme double MyKoren(double MyValue=36){ mais de l'écrire comme il se doit - double MyKoren(double MyValue){, sinon vous vous demanderez pourquoi le sous-programme ne fonctionne pas comme il le devrait.

Raison: