[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 604

 
rigonich:


Ce n'est pas le temps en soi qui compte, mais le fait que quelque chose ait été fait dans un certain laps de temps, c'est ce que vous devez vérifier.

P.S. Et vous n'avez pas besoin de définir N, il suffit de faire votre vérificationif(TimeCurrent() >= iTime(Symbol(),1440,0) ) jusqu'à ce que l'action que vous voulez soit faite (établir un ordre).


Mais si tu le mets comme ça :

if(TimeCurrent() >= iTime(Symbol(),1440,0)

De cette façon, le signal sera valide tout le temps après l'ouverture de la barre et . A l'infini. Pourquoi en ai-je besoin ? L'essentiel est d'ouvrir un ordre à l'ouverture d'une barre, pas d'un pack.

 
hoz:

Mais si tu le dis comme ça :

De cette façon, le signal sera valide en permanence après l'ouverture de la barre et ... Jusqu'à l'infini. Pourquoi en ai-je besoin ? L'essentiel est d'ouvrir un ordre à l'ouverture du bar au lieu du pack.


И ... À l'infini - il s'agit d'un cas particulier, si votre condition nécessaire - l'établissement de la commande - ne sera pas remplie aujourd'hui ou demain...

Et pour éviter l'ouverture d'un paquet, il suffit de vérifier avant chaque ouverture soit l'existence d'un ordre ouvert, soit si l'ouverture a eu lieu dans la période voulue.

 
rigonich:


Vous devez d'abord sélectionner l'ordre, puis faire quelque chose avec lui (afficher les informations relatives à l'ordre, envoyer un ordre de transaction au serveur pour le modifier ou le clôturer). Il existe deux façons de sélectionner les ordres dans le terminal, par ticket, qui est le numéro attribué à l'ordre sur le serveur et qui ne change pas pour un ordre particulier, ou par le numéro d'ordre (index) sous lequel l'ordre est stocké dans le terminal. Ce nombre peut changer à chaque tick, en fonction de la nature et du nombre d'ordres ouverts, fixés, fermés ou supprimés.

Pour travailler avec les commandes, des cycles d'évaluation des commandes sont mis en œuvre.


Je sais comment démarrer une telle boucle.

for(int i=0 ; i<total ; i++)

{

si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Comment puis-je faire en sorte qu'une variable donne VRAI lorsque les deux dernières transactions sont perdantes, et FAUX lorsqu'elles sont profitables ?

Ou de cette façon.

lorsque les transactions sont fermées par un stop - quelque part, la case à cocher counter.... devrait être activée. mais comment attraper le moment de la fermeture ?

 
rigonich:


Il s'agit de l'index qui définit la position de l'ordre dans le tableau où sont stockées les données sur les ordres présents dans le terminal.

C'est-à-direce qui est souligné (sous SELECT_BY_POS) bool OrderSelect(int index, int select, int pool=MODE_TRADES)



Je comprends correctement que le dernier ordre que j'ai clôturé aura l'index 1. Et après avoir fermé la suivante, l'indice 2... et ainsi de suite avec chaque nouvelle position fermée? Qu'en est-il des totaux quotidiens ? Les transactions d'hier sont-elles prises en compte ? ou faut-il recommencer tous les jours ?
 
lottamer:


Je sais comment démarrer une telle boucle...

for(int i=0 ; i<total ; i++)

{

si (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Comment puis-je faire en sorte qu'une variable donne VRAI lorsque les deux dernières transactions sont perdantes, et FAUX lorsqu'elles sont profitables ?

Ou de cette façon.

lorsque les transactions sont fermées par un stop, la case à cocher counter.... doit être activée quelque part. mais comment attraper le moment de la fermeture ?


Il y a quelques solutions à ces problèmes. La plus simple est de passer en revue tous les ordres dans la boucle, en cherchant celui qui a été fermé en dernier, voir si votre ordre a été fermé sur un stop ou un profit, choisir son ticket, recommencer la boucle, si l'ordre avec le ticket que vous avez sauvé a été sauvé, le sauter, trouver celui qui a été fermé en dernier avant un...

P.S. Et non pasMODE_TRADES, mais MODE_HISTOIRE.

 
mais une autre question ...la fonctionSecondsAfterOpenLastPos() . si l'EA a été désactivé, cette fonction renverra-t-elle la valeur de la dernière transaction FERMÉE hier ? (Impossible de le vérifier - le marché est stagnant)
 
rigonich:


Il existe plusieurs solutions à ces problèmes, la plus simple étant probablement la suivante : parcourir tous les ordres de la boucle, rechercher celui qui a été clôturé en dernier, utiliser le stop ou le profit pour trouver l'ordre, sauvegarder son ticket, redémarrer la boucle, si l'ordre avec le ticket que vous avez sauvegardé a été sélectionné, le sauter,trouver celui qui a été clôturé en dernier avant un...

P.S. Et non pasMODE_TRADES, mais MODE_HISTOIRE.


la logique est claire.... mais pour moi c'est impossible de l'écrire dans mon code... c'est trop compliqué... je n'ai jamais travaillé avec des boucles de force brute... je n'en ai pas eu besoin... donc c'est une forêt sombre :)))) et les boucles que j'ai vues ne sont pas très claires pour moi... il est clair qu'ils essaient quelque chose... et c'est tout.

Pourriez-vous me donner l'exemple le plus simple... mais avec des explications, afin que je comprenne ce qui se passe dans la boucle et où ?

 
lottamer:

vous pouvez peut-être refaire les deux options à partir d'ici https://forum.mql4.com/ru/38949/page5#434244

Fonction TimeOpenLastPos().

Cette fonction renvoie l'heure de la dernière position ouverte.

Nous avons besoin d'un temps ouvert du dernier poste FERMÉ.

ou

Fonction SecondsAfterOpenLastPos().

Cette fonction renvoie le nombre de secondes écoulées depuis la dernière position ouverte.

Et il DOIT être exprimé en heures.... au lieu de secondes.

Celui-ci est plus proche.

Lapremière option peut être utilisée avec des changements minimes (recherchez l'historique et ce dont vous avez besoin). Voulez-vous qu'il n'ouvre pas plus d'une transaction par jour ?
 
lottamer:
Mais une autre question ... la fonctionSecondsAfterOpenLastPos() . si l'EA a été désactivé, cette fonction renverra-t-elle la valeur de la dernière transaction FERMÉE hier ? (Impossible de le vérifier - le marché est stagnant)


Il le fera.

Plus précisément, elle sera, non pas fermée, mais ouverte.

 
rigonich:


Vous devez d'abord sélectionner un ordre, puis faire quelque chose avec lui (afficher les informations sur l'ordre, envoyer un ordre au serveur pour le modifier ou le clôturer). Il existe deux façons de sélectionner les ordres dans le terminal, par ticket, qui est le numéro attribué à l'ordre sur le serveur et qui ne change pas pour un ordre particulier, ou par le numéro d'ordre (index) où l'ordre est stocké dans le terminal. Ce nombre peut changer à chaque tick, en fonction de la nature et du nombre d'ordres ouverts, fixés, fermés ou supprimés.

Pour travailler avec les commandes, il existe des cycles d'évaluation des commandes.


Eh bien, par exemple, j'ai un ordre limite à l'ouverture de D1. TP et SL peuvent ne pas fonctionner pendant quelques jours, si nous vérifions une commande, elle sera disponible et nous n'en ouvrirons pas une nouvelle. Donc ce n'est pas bon. Ainsi, des transactions potentielles seront manquées.
Raison: