[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 191

 
eddy:

le mauvais prix est 1.37197000.

le prix correct est 1.37197 ou 1.3719, selon le DNS.

NormalizeDouble() est utilisé pour définir le nombre de chiffres après la virgule.


Ajouté NormalizeDouble() au prix dans OrderSend(), aucune erreur maintenant, merci !
 
artmedia70:

C'est aussi simple que ça :

Placez les fonctions elles-mêmes en dehors de la fonction start(), ou à la toute fin de l'ensemble du code.



Merci !
 
eddy:

J'ai besoin de rappeler GetTickCount sur le premier tick après le démarrage de l'indicateur, mais le code ci-dessous ne fonctionne pas - le terminal se bloque. Peut-être que RefreshRates ne fonctionne pas du tout dans init()... ?

while(true){ if(RefreshRates()) { tik=GetTickCount() ; break; } Sleep(1 ) ; }

Je voudrais le faire dans init, parce que si je mets un drapeau dans start - il sera vérifié à chaque fois.
 
eddy:
Je veux le faire dans init, car si vous créez un drapeau au départ, il sera vérifié à chaque fois.
Lorsque vous déclarezune variable globale, attribuez-lui une valeur et réinitialisez-la au démarrage. Il aura alors une valeur initiale uniquement sur le premier tick, avant l'assignation, et sur tous les ticks suivants - la valeur assignée au départ. Ensuite, toutes les actions, qui sont exécutées une fois au début de l'EA, peuvent être transférées au début.
 
eddy:

Pourriez-vous m'indiquer comment charger un indicateur sur un graphique de manière programmatique ?

Il existe la fonction bool ServiceLoadCustomIndicator(int hwndChart,...) ; //hwndChart- Descripteur système de la fenêtre graphique, où l'indicateur est chargé.

Je ne sais pas comment connaître le descripteur de la fenêtre graphique.

J'ai juste besoin de me souvenir de GetTickCount sur le premier tick après le démarrage de l'indicateur, mais le code ci-dessous ne fonctionne pas - le terminal se bloque. Peut-être que dans init() RefreshRates ne fonctionne pas du tout... ?

https://docs.mql4.com/ru/windows/WindowHandle
 
granit77:
Attribuer une valeur à la variable globale dans la déclaration et la réinitialiser au démarrage. Il aura alors la valeur d'origine uniquement sur le premier tick, avant l'assignation, et sur tous les ticks suivants - la valeur assignée au départ. Ensuite, toutes les actions, qui sont exécutées une fois au début de l'EA, peuvent être transférées au début.

Je n'ai pas besoin d'assigner quoi que ce soit à cette variable au démarrage.

J'ai décidé de créer un indicateur séparé pour mémoriser les ticks dans une variable globale, dont la valeur sera connue de l'indicateur principal au démarrage.

Zhunko, que se passe-t-il s'il y a plusieurs fenêtres avec le même TF et le même symbole ?

 
eddy:

Je n'ai pas besoin d'assigner quoi que ce soit à cette variable au démarrage, seulement une fois pour me souvenir du tick.

J'ai décidé de créer un indicateur séparé pour mémoriser les ticks dans une variable globale, dont la valeur sera évaluée par l'indicateur principal au démarrage.

Zhunko, que se passe-t-il s'il y a plusieurs fenêtres avec le même cadre temporel et le même symbole ?

Vérifié il y a longtemps (vous pouvez le faire aussi), il renvoie le dernier ou l'actif.
 
Zhunko: Renvoie le dernier ou l'actif.

c'est-à-dire que si aucun d'entre eux n'est actif, il renvoie le dernier ?

Cependant, cela n'a pas d'importance, je pense que lorsqu'on l'ajoute, celui où il doit être ajouté est toujours actif de toute façon.

 
eddy:

Cependant, cela n'a pas d'importance, je pense qu'il est toujours actif lorsque vous l'ajoutez de toute façon, où vous voulez l'ajouter

Oui. Exactement. J'ai une fonction qui renvoie les descripteurs de toutes les mêmes fenêtres de graphique dans l'ordre Z. Je ne l'ai pas inclus dans la bibliothèque. Mais ça n'aidera pas beaucoup.
 
eddy:

Je n'ai pas besoin d'assigner quoi que ce soit à cette variable au démarrage.

J'ai décidé de faire un indicateur séparé pour mémoriser les ticks dans une variable globale, dont la valeur est reconnue par l'indicateur principal au démarrage.

Ce que je voulais dire, c'est ceci :
bool FirstStart=true;

int start(){

    if(FirstStart){
      if(RefreshRates()) tik=GetTickCount();
      FirstStart=false;
    } 
}