[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 176

 
eddy:
Comment définissez-vous la dernière commande ? Par le temps. Eh bien, regardez dans le code pour voir quelle commande est la plus récente par le temps


Je l'ai déjà compris par moi-même. Mais je ne comprends toujours pas votre dernier conseil. Est-il possible d'extraire toutes les commandes et de voir laquelle est la plus récente ? Vous voulez donc extraire tous les ordres et comparer les heures de clôture de tous les ordres ? Montrez-moi le code qui permet de faire ça.

J'ai résolu le problème de cette façon :

int z ;
int _bar ;

int start()

{

z=OrdersHistoryTotal()-1 ;
OrderSelect(z,SELECT_BY_POS,MODE_HISTORY) ;
if(TimeCurrent() - OrderCloseTime() > 1& TimeCurrent() - OrderCloseTime() < 7)
{
if(OrderProfit()> 0)
PlaySound("profit.wav") ;
if(OrderProfit()== 0)
PlaySound("zero.wav") ;
if(OrderProfit()< 0)
PlaySound("loss.wav") ;
}

Il s'avère que si l'on remplace z par 1, la commande la plus ancienne sera sélectionnée, ce qui est logiquement la plus récente. J'ai donc pris OrdersHistoryTotal() (qui renvoie le nombre de commandes dans l'historique) et je l'ai substitué à l'indice. Cependant, il s'avère que OrdersHistoryTotal() renvoie 1 de plus qu'en réalité. Mon historique a eu 6 commandes, mais OrdersHistoryTotal() renvoie 7 commandes. J'ai donc écrit z=OrdersHistoryTotal()-1 ;. Mais je ne savais pas auparavant ce qu'il fallait utiliser dans l'index pour sélectionner le dernier. J'ai dû le découvrir moi-même parce que personne ne m'a rien dit.

 
Reaktiv:

if(TimeCurrent() - OrderCloseTime() > 1& TimeCurrent() - OrderCloseTime() < 7)

C'est fondamentalement faux et cela ne fonctionnera pas toujours, même dans le testeur.
 
sergeev:
est fondamentalement erronée, et ne fonctionnera pas toujours, même dans un testeur.

Alors s'il te plaît, montre-moi comment le faire correctement. Tu sais, il y a beaucoup d'exemples dans le manuel qui n'existent pas.
 
Reaktiv:

Montrez-moi donc comment le faire correctement, car vous savez que le manuel ne contient pas beaucoup d'exemples.

toute solution dépend des objectifs fixés.

Si vous voulez trouver le dernier ordre dans l'historique, c'est une chose, mais si vous voulez déterminer comment le dernier ordre de votre EA a été clôturé, c'est une autre chose.

 
sergeev:

toute solution dépend des objectifs que vous vous fixez.

Si vous voulez trouver le dernier ordre dans l'historique, c'est une chose, mais si vous voulez simplement savoir comment le dernier ordre de votre EA a été clôturé, c'en est une autre.


Je veux que la musique commence à jouer après la clôture de l'ordre et en fonction du bénéfice, la musique jouera. Dans mon exemple, je voulais qu'il joue si 1 à 7 secondes se sont écoulées depuis la fermeture de la commande.
 

alors le schéma devrait être le suivant

1. Lors d'un OrderSend réussi, vous devez vous souvenir du ticket de commande(GlobalVariableSet).

2. A chaque tick, vérifier le ticket de cet ordre mémorisé(GlobalVariableGet) pour la fermeture(OrderCloseTime)

Si l'ordre est fermé, alors donnez un son approprié pour le profit et supprimez le ticket mémorisé(GlobalVariableDel).

4. Si vous souhaitez toujours vérifier les 1 à 7 secondes, cette vérification peut être incluse dans l'analyse, mais vous devez vous rappeler que les ticks peuvent arriver avec un retard de 10 secondes ou plus, et vous manquerez le signal.

 
sergeev:

alors le schéma devrait être le suivant

1. Lors d'un OrderSend réussi, vous devez vous souvenir du ticket de commande(GlobalVariableSet).

2. A chaque tick, vérifier le ticket de cet ordre mémorisé(GlobalVariableGet) pour la fermeture(OrderCloseTime)

Si l'ordre est fermé, alors donnez un son approprié pour le profit et supprimez le ticket mémorisé(GlobalVariableDel).

4. Si vous souhaitez toujours vérifier les 1 à 7 secondes, cette vérification peut être incluse dans l'analyse, mais vous devez vous rappeler que les ticks peuvent arriver avec un retard de 10 secondes ou plus, et vous manquerez le signal.



L'OrderSend doit-il être envoyé par le conseiller expert ou cela ne fait-il aucune différence ? Le système est basé sur le fait que j'ouvre moi-même les transactions manuellement. L'Expert Advisor modifie l'ordre après son ouverture (pose des stops) et joue ensuite la musique lorsqu'il ferme une position. Quant au fait que les ticks puissent être retardés de 10 secondes, je le comprends. Je ne vais pas utiliser l'EA à un moment tel que maintenant. J'utilise mon EA sur EUROBAX de 9h à 18h où un tel délai est peu probable.
 
Reaktiv:

Et le conseiller lui-même modifie l'ordre (met des stops) lorsque la transaction est ouverte.

Dans votre cas, ce point sera donc le point où le ticket de commande est pris.
 
sergeev:
alors dans votre cas, c'est le moment où le ticket de commande est pris.

merci
 
Reaktiv:
Je voulais que la musique soit jouée si 1 à 7 secondes se sont écoulées depuis la clôture de la commande.
Pourquoi ? Vous pouvez juste jouer de la musique une fois que la commande a été fermée.