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

 
Artyom Trishkin #:

Dans votre code, si une position est ouverte, une autre position ne s'ouvrira pas sur le signal opposé. C'est-à-dire que, tout d'abord, lorsque le signal arrive, vous devez vérifier s'il existe une position opposée et la fermer.

Mais là encore, tout cela limite considérablement les possibilités d'améliorer les stratégies.

Nous devons éviter de nous lier à la présence/absence d'ordres (surtout en quatre - ordres en attente (ce qui est correct) et positions (ce qui est faux)).

Non, il est correct et nécessaire d'avoir à portée de main le nombre d'ordres et de positions selon leurs types. Mais il est erroné de se baser sur l'absence d'ordres uniquement pour les signaux.

En général, la bonne méthode consiste à disposer de fonctions pour calculer les ordres et les positions (une fonction qui remplit la structure lorsque le nombre d'ordres et de positions change), de fonctions pour ouvrir/fermer les positions, de fonctions pour définir les ordres et de fonctions d'alarme. De plus, la possibilité de comparer les données de position (ouverte ou fermée) avec n'importe quelle valeur.

Toute stratégie peut être construite à partir de cet ensemble.

Artem, la stratégie est la suivante : il y a un ordre sur le marché jusqu'à ce qu'il ferme au niveau du TP ou du SL.
 
MakarFX #:

Votre code

(Un bar ouvert et aucune commande)

J'ai vérifié le signal - pas de signal

... Attendez la prochaine barre.

Vous avez répété la même erreur que la dernière fois

P.S.

c'est

doit être effectuée après l'ouverture de la commande

En fait, mon code a été conçu pour autre chose. Pour un robot qui ne négocie qu'aux prix d'ouverture. Je l'ai simplement pris sur moi et l'ai ajouté au code d'un utilisateurcitoyen respectueux des lois et l'ai modifié en fonction des commentaires. Toutes les nuances ne peuvent être envisagées en même temps. Vous ne les voyez que pendant les tests du robot.

Mais il y a une chose. Vous semblez également avoir tout pris en considération. Un signal a été reçu et la fonction bSignalSell oubSignalBuy a envoyé une commande pour ouvrir un ordre et a retourné vrai (le premier point). Le deuxième point est qu'aucune commande n'a encore été ouverte (la commande attend son tour dans le terminal). Ensuite, lorsque la file d'attente des commandes se présente, elle est envoyée au serveur (c'est encore du temps). Sur le serveur, il est exécuté. Ou le serveur refuse de l'exécuter pour l'une des nombreuses raisons possibles (voir la documentation pour plus de détails). Ou bien il n'y parvient pas (interférences, mauvaise connexion et autres problèmes de réseau). Et votre robot pense qu'il a ouvert un ordre et met à jour l'heure d'ouverture de la barre. C'est bien. Mais cet ordre n'est pas apparu dans la liste des ordres ouverts. Ainsi, imaginez que vous avez 0 ordre dans la liste et que le robot "pense" : "C'est bon, je suis entré sur le marché. Parconséquent, il y a un signal pendant une barre entière après une entrée infructueuse, mais le conseiller expert ne le "voit" pas et ne fait rien. Une telle situation est-elle possible ? C'est possible ! Donc, votre code n'est pas très bon. Tu ferais mieux de penser mieux. Ou laissez le citoyen respectueux de la loi réfléchir. Malheureusement, je ne peux pas en ce moment. Je travaille sur un projet très intéressant. Et la création d'un véritable EA entièrement fonctionnel avec tous ses mécanismes n'a de sens que pour un bon système de trading rentable. Le robot peut être simplement exécuté dans le testeur de stratégie et voir s'il s'agit d'une autre de mes versions ou de celle que vous avez développée. Cela ne fait aucune différence.

 
законопослушный гражданин #:

Je viens juste de le remarquer.

bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
      return(true);

   return(false);
  }
Open[1] и Close[1]

Index 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0);

Alors que vous avez le MA avec un indice de 0 ! C'est-à-dire qu'il se promène dans toute la barre et peut aller au-delà de l'ouverture et de la fermeture. Par conséquent, il est préférable d'indexer MA par 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 1);

Ensuite, tous les signaux seront pris exceptionnellement sur la barre formée et le robot sera totalement cohérent avec le système de trading avec des signaux sur les prix ouverts. Par conséquent, le robot n'aura qu'à suivre l'ouverture de la barre (j'ai déjà ajouté ce code) et à entrer sur la barre nouvellement formée. Il sera plus fiable. Et il n'y aura pas besoin de se tordre, comme Makar a dû le faire à cause de l'algorithme d'entrée initialement erroné.

 
Mihail Matkovskij #:

Je viens juste de le remarquer.

Index 1.

Alors que vous avez le MA avec un indice de 0 ! C'est-à-dire qu'il se promène dans toute la barre et peut aller au-delà de l'ouverture et de la fermeture. Par conséquent, il est préférable d'indexer MA par 1.

Ensuite, tous les signaux seront pris exceptionnellement sur la barre formée et le robot sera totalement cohérent avec le système de trading avec des signaux sur les prix ouverts.

C'est l'essence même du signal.

La MA actuelle va dans le corps de la bougie précédente et selon la bougie (UP/DN) donne le même signal.

 
MakarFX #:

C'est l'essence même du signal.

La MA actuelle entre dans le corps d'une bougie précédente et selon la bougie (UP/DN), il s'agira du même signal.

Dans ce cas, la MA doit être dessinée avec l'indice 1 dans le cadre temporel inférieur. Il ne sera alors pas nécessaire d'appliquer des modifications. Dans l'ouverture et la fermeture du cadre temporel supérieur, il y aura plusieurs (ou beaucoup) de barres sur le cadre inférieur. Vous savez pourquoi les délais ont été inventés, n'est-ce pas ? Si ce n'est pas le cas, commencez à étudier cette question à partir de l'histoire des chandeliers japonais. En bref, il s'agit de simplifier l'analyse technique. Et avec l'avènement de l'ère numérique, elle a également simplifié la discrétisation des systèmes de négociation.

 
Mihail Matkovskij #:

Dans ce cas, la MA doit être prise avec l'indice 1 sur le cadre temporel inférieur. Alors, il n'y aura pas besoin d'être tordu. Il y aura plusieurs (ou beaucoup) de barres entre l'ouverture et la fermeture de l'unité de temps supérieure sur l'unité de temps inférieure. Vous savez pourquoi les délais ont été inventés, n'est-ce pas ? Si non, commencez à étudier cette question à partir de l'histoire des chandeliers japonais. En bref, il s'agit de simplifier l'analyse technique. Et avec l'avènement de l'ère numérique, elle simplifie également la discrétisation des systèmes de négociation.

Je ne comprends pas pourquoi tu es en colère contre moi. L'homme écrit sa stratégie comme il la voit, et cet homme n'est pas moi.

J'ai seulement répondu à sa question : "Comment éviter les ouvertures multiples sur le même bar ?"

Ce que j'apprends, je le sais moi-même, et si je ne sais pas, je demande. Pour l'instant, je n'ai rien demandé à personne.

 
MakarFX #:

Je ne comprends pas pourquoi tu t'en prends à moi. L'homme écrit sa stratégie comme il la voit et cet homme n'est pas moi.

Je n'ai fait que répondre à sa question : "Comment éviter les ouvertures multiples sur un même bar ?".

Ce que j'apprends, je le sais moi-même, et si je ne sais pas, je demande. Maintenant, je n'ai rien demandé à personne.

Étrange. J'essaie d'aller au fond d'un problème et vous parlez d'une sorte de clarification de la relation. Je communique uniquement sur le sujet de la programmation. Si vous êtes offensé par quelque chose, ne soyez pas offensé. J'écris des logiciels depuis 15 ans. Vous dites que mon code ne fonctionnepas correctement selon vous. Je ne me vexe pas, j'essaie de vous expliquer comment les systèmes de trading automatisés fonctionnent en réalité. C'est une conversation purement technique. Et vous me parlez d'une sorte d'insulte... :)

 
Mihail Matkovskij #:

C'est bizarre. J'essaie d'aller au fond d'un problème et vous parlez d'une sorte de relation. Je communique uniquement sur le sujet de la programmation. Si vous êtes offensé par quelque chose, ne soyez pas offensé. J'écris des logiciels depuis 15 ans. Vous dites que mon code ne fonctionnepas correctement selon vous. Je ne me vexe pas, j'essaie de vous expliquer comment les systèmes de trading automatisés fonctionnent en réalité. C'est une conversation purement technique. Et vous me parlez d'une sorte d'insulte... :)

Donc je vous ai aussi expliqué ce que votre code est faux (dans ce cas), et vous dites que vous devez refaire l'EA)
 
Mihail Matkovskij #:

J'écris des programmes depuis 15 ans.

J'ai une suggestion. Donnez-moi votre télégramme en privé.

 
MakarFX #:
Donc je vous ai aussi expliqué ce que votre code est faux (dans ce cas), et vous dites que vous devez refaire l'EA)

Dans ce cas, il faut le retravailler pour qu'il ne se torde pas. Parce que le code que j'ai ajouté est conçu pour un robot avec des signaux de prix d'ouverture, comme je l'ai déjà dit. J'ai pensé : "C'est étrange. Et puis j'ai trouvé la raison. Si vous vous y prenez bien dès le début, vous n'aurez aucun problème à l'avenir. Il faut donc toujours chercher la cause et ne pas lutter contre la conséquence.

Raison: