mql5 - ligne verticale après un certain temps depuis la dernière transaction - page 3

 
renatmt5:
J'ai bien compris que les variables last_time et result sont les valeurs que nous recherchons. Le résultat détermine de combien de temps la ligne sera décalée (redessinée) dans le futur. Ensuite, le bloc de code "Profit pour la période" doit être placé avant le bloc "Déplacer la ligne verticale" pour déplacer la ligne en tenant compte des données obtenues lors de la dernière transaction.
Est-ce correct ou est-ce que je confonds quelque chose ?

Ce sont des variables internes de la fonction LastProfitForPeriod.

On veut obtenir la valeur du profit de la dernière transaction, non ? Ici, LastProfitForPeriod() nous donne le bénéfice de la dernière transaction. Il ne reste plus qu'à déplacer la ligne verticale en fonction de ces bénéfices.

 
Vladimir Karputov:

La touche finale consiste donc à déplacer la ligne en fonction du bénéfice réalisé.

Tu te souviens des règles de déplacement ?

Oups, désolé - juste pour clarifier :

- si le résultat de la dernière transaction est négatif et que le résultat du jour est négatif, la ligne verticale est tracée 24 heures (24 heures) dans le futur.
- si le résultat de la dernière transaction est négatif et que le résultat du jour est positif, la ligne verticale est tracée à une distance de 2 heures dans le futur.
- si le résultat de la dernière transaction est positif, la ligne verticale est tracée à une distance de 1 heure dans le futur.

 
Vladimir Karputov:

Voici une explication de la raison pour laquelle le paramètre "avant" doit être effectué à l'avenir :


Merci !

 

Les conditions exigent le résultat du jour où la dernière transaction a été effectuée (s'il y a eu plusieurs transactions ce jour-là).

 
renatmt5:

Oups, désolé - juste pour clarifier :

- si le résultat de la dernière transaction est négatif et que le résultat du jour est négatif, la ligne verticale est tracée 24 heures (un jour) dans le futur.
- si le résultat de la dernière transaction est négatif et que le résultat du jour est positif, la ligne verticale est tracée à une distance de 2 heures dans le futur.
- si le résultat de la dernière transaction est positif, la ligne verticale est tracée à une distance de 1 heure dans le futur.

Ah, donc nous devons aussi obtenir le profit pour le jour actuel séparément.


Pour apporter des corrections à LastProfitForPeriod() - nous supprimons les paramètres de temps d'entrée "from" et "to" et formons ces paramètres à l'intérieur de la fonction : formons l'heure de début de journée (ce sera "from"), et "to" nous obtenons l'heure actuelle + jour.


Par conséquent, nous passerons deux paramètres dans LastProfitForPeriod() par référence : le bénéfice du jour et le bénéfice de la dernière transaction.


Le début de la journée est obtenu en utilisantiTime

   datetime from_date=iTime(Symbol(),PERIOD_D1,0);

- c'est-à-dire l'heure d'ouverture de la barre quotidienne actuelle.

 

Compilé - génial !
Il n'y a que quelques problèmes :
1) Lors de l'imposition de l'indicateur, la valeur de la variable Profit dernier jour n'est pas attribuée au dernier jour de la dernière transaction, mais au profit final du compte en général. Toutefois, lorsque l'indicateur est recalculé (en 1 à 2 minutes environ), la valeur devient correcte (le bénéfice total du jour de la dernière transaction). Je ne juge que par le compte où la dernière transaction a eu lieu aujourd'hui.
2) Lors de la suppression de l'indicateur du graphique, le commentaire dans le coin supérieur gauche n'est pas supprimé. Lorsque l'on efface la liste des objets, ils ne sont pas non plus supprimés. Je redémarre le terminal pour faire disparaître les valeurs, ce qui n'est pas pratique, bien sûr. Comment le rendre plus facile - je ne sais pas :)

Peut-être serait-il plus raisonnable de placer les blocs avec le code de création de ligne, de déplacement de ligne et de suppression de ligne (Créer la ligne verticale, Déplacer la ligne verticale et Supprimer la ligne verticale) après le bloc de calcul de la dernière transaction (Bénéfice pour la période). Tracer la ligne en tenant compte du décalage dans le futur de n heures, calculé sur la base du profit_dernier_jour et du profit_dernier_débat.

Comme

si (profit_dernier_jour<=0 et profit_dernière_vente<=0){n=24;}

else (profit_last_day>0 and profit_last_deal<=0){n=2;}

sinon {n=1;}
//---
time = last_time + n ;
//---
puis tracez la ligne avec un décalage dans le temps par rapport à la dernière transaction, en utilisant la valeur temps calculée...

 

La version 1.002 introduit une protection : si l'heure d'ouverture de la barre du jour renvoie "0" - alors il n'y a pas de sort et nous sortons.

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod(double &profit_last_day,double &profit_last_deal)
  {
   datetime from_date=iTime(Symbol(),PERIOD_D1,0);
   if(from_date==D'1970.01.01 00:00')
      return;
   datetime to_date=TimeCurrent()+60*60*24;

   long last_time=0;


Désormais, il n'y aura plus de demande pour la durée de vie du compte de trading.

 
Vladimir, merci encore beaucoup pour votre travail !
Je vais essayer de faire le code moi-même, afin de ne pas me rendre malade de conscience et de pratique :) Je rapporterai les résultats, s'il y en a.
 
renatmt5:
Vladimir, merci encore beaucoup pour votre travail !
Je vais essayer de faire le code moi-même, afin de ne pas me rendre malade de conscience et de pratique :) Je rapporterai les résultats, s'il y en a.

Bien.

 
D'ailleurs, sur la protection que vous avez ajoutée, il y a le point suivant. Comme j'ai un délai de 1 à 2 minutes avant que la valeur correcte soit calculée, pendant lequel les variables sont égales à zéro, je passe de l'horizon temporel actuel à un autre pour une mise à jour rapide - les valeurs sont immédiatement recalculées. Il est probablement possible de créer une béquille logicielle sur ce principe ?
Raison: