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

 
Roni Iron:

Bonjour à tous !


Question : quel est le moyen le plus simple de déterminer les temps forts et faibles d'une barre ?

L'heure d'ouverture/de fermeture du bar n'est pas intéressante.

Sur MT4.

Merci !

a fait ça

publié dans KBhttps://www.mql5.com/ru/code/25897

 

S'il vous plaît dites-moi, dans MT4 il y avait une variable prédéfinie double Ask, et comme je comprends, à l'intérieur de void OnTick() sans forcé

RereshRates sa valeur ne changerait PAS.

Dans MT5, Ask est remplacé par MqlTick last_tick ; SymbolInfoTick(_Symbol,last_tick) ; double Ask=last_tick.ask ; sa valeur est toujours mise à jour par un nouveau tick.

Mon problème est que j'ai besoin de définir la coordonnée de la ligne par la valeur de Ask + X mais je ne peux pas le faire dans MT5 parce que la ligne change ses coordonnées après le changement de valeur.

Ask=last_tick.ask. Quel est votre conseil ?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

S'il vous plaît dites-moi, dans MT4 il y avait une variable prédéfinie double Ask, et comme je comprends, à l'intérieur de void OnTick() sans forcé

RereshRates sa valeur ne changerait PAS.

Dans MT5, Ask est remplacé par MqlTick last_tick ; SymbolInfoTick(_Symbol,last_tick) ; double Ask=last_tick.ask ; sa valeur est toujours mise à jour par un nouveau tick.

Mon problème est que j'ai besoin de définir la coordonnée de la ligne par la valeur de Ask + X mais je ne peux pas le faire dans MT5 parce que la ligne change ses coordonnées après le changement de valeur.

Ask=last_tick.ask. Quel est votre conseil ?

Comment cela n'a pas changé ? Il changeait à chaque tic. Mais dans la boucle, ça n'a pas changé. Peut-être vous êtes-vous un peu embrouillé avec elle ?

Mais dans mql5, vous pouvez déterminer le prix actuel avant la boucle et il ne changera pas jusqu'à ce que vous sortiez de la boucle.

 
Les amis, désolé pour la question stupide. Dans le terminal mt4, il montre le profit y compris les commissions, les swaps, etc. Dans mt5 il montre "nu". Je ne le trouve pas, y a-t-il un réglage pour que mt5 l'affiche comme mt4 ? Ou bien il n'est pas en mesure de le faire ?
 

Existe-t-il un moyen de mesurer la largeur en pixels du texte écrit dans OBJ_TEXT?

 
Alexey Viktorov:

Comment n'a-t-il pas changé ? Il changeait à chaque tic. Mais dans le cycle, oui, ça n'a pas marché. Peut-être que tu t'es un peu embrouillé avec celui-là ?

Mais dans mql5, vous pouvez déterminer le prix actuel avant la boucle et il ne changera pas jusqu'à ce que vous sortiez de la boucle.

Oui, merci, mon hypothèse s'est avérée fausse, mais la question est un peu différente. J'ai un code, le mêmepour MT4 et MT5:

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

La question est la suivante : dans MT4, la ligne créée sera fixée au prix auquel elle a été créée, mais dans MT5, à chaque nouveau tick, la ligne sera tracée à une nouvelle valeur de LastAsk et sa position changera en même temps que le prix. Comment puis-je l'éviter dans MT5 ?

 
WinProject:

Oui, merci, mon hypothèse s'est avérée fausse, mais la question est un peu différente. Il existe un code,le même pour MT4 et MT5:

La question est que dans MT4, la ligne créée sera stationnaire au prix auquel elle a été créée, mais dans MT5, à chaque nouveau tick, la ligne sera dessinée à une nouvelle valeur de LastAsk et sa position changera en même temps que le prix. Comment puis-je l'éviter dans MT5 ?

Vérifiez la disponibilité de la ligne par nom. S'il n'y en a pas, créez-en un. Voici les principes de base en général
 
Artyom Trishkin:
Recherchez une ligne par son nom. S'il n'y a pas de ligne, créez-en une. C'est l'essentiel en général.

Merci, que puis-je lire d'autre sur ces bases de la logique de programmation ? Cela semble élémentaire, mais c'est difficile à comprendre en partant de zéro.

 if(ObjectFind(0,"hLine"))

J'ai ajouté une condition et tout a fonctionné.

 
WinProject:

Merci, que puis-je lire d'autre sur ces bases de la logique de programmation ? Cela semble élémentaire, mais c'est difficile à comprendre en partant de zéro.

J'ai ajouté une condition et tout a fonctionné.

Soudainement (comme d'habitude) ObjectGetInteger(0,objectName,OBJPROP_TYPE) fonctionne plus rapidement.

ObjectFind est une commande synchrone, c'est-à-dire qu'elle attend la mise à jour complète (et la disponibilité) des objets du graphique.

Si vous travaillez avec vos propres objets (c'est-à-dire créés dans votre propre stock), vous ne devriez pas utiliser ObjectFind - vous savez déjà dans quelle fenêtre l'objet a été créé et qu'il existe très probablement et qu'il est du bon type.
Le pire qui puisse arriver est que l'utilisateur supprime l'objet ou modifie la propriété.

 
WinProject:

Oui, merci, mon hypothèse était fausse, mais la question est un peu différente. Il existe un code,le même pour MT4 et MT5:

La question est que dans MT4, la ligne créée sera stationnaire au prix auquel elle a été créée, mais dans MT5, à chaque nouveau tick, la ligne sera dessinée à une nouvelle valeur de LastAsk et sa position changera en même temps que le prix. Comment puis-je l'éviter dans MT5 ?

Je ne m'en souviens pas, je dois vérifier mais je ne veux pas. Peut-être qu'en mql4, lorsqu'on essayait de créer un objet nommé après un objet déjà existant, une erreur était simplement renvoyée, alors qu'en mql5, ce n'est pas une erreur mais une modification des paramètres, si les coordonnées sont différentes.

Comme Artem l'a dit, vérifiez l'existence de l'objet.

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );
Raison: