[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 - 5. - page 128

 

Messieurs les programmeurs,


Aidez-moi à comprendre.

J'ai inséré ce code https://www.mql5.com/ru/code/8811 pour le trading virtuel comme une fonction dans mon indicateur.

Il fonctionne en temps réel et réalise des transactions virtuelles de toute complexité.

Puis-je l'utiliser comme un déclencheur sur la barre d'historique de marche ou dois-je écrire un nouveau code ?


Mes remerciements.

 
abdul1:

Messieurs les programmeurs,

Aidez-moi à comprendre.

J'ai inséré ce code https://www.mql5.com/ru/code/8811 pour le trading virtuel comme une fonction dans mon indicateur.

Il fonctionne en temps réel et réalise des transactions virtuelles de toute complexité.

Puis-je l'utiliser comme un déclencheur sur la barre d'historique de marche ou dois-je écrire un nouveau code ?

Mes remerciements.

Il est préférable de demander la base de code de l'auteur où vous l'avez téléchargé.
 

borilunad, vous avez, par exemple, si la fonction a à la fois B.U. et TPAAL, le cycle et la sélection des ordres, si je comprends bien, est dans le début de la fonction et est déclenché sur le ticking ?

J'essaie de comprendre comment combiner tout cela et mon cerveau a déjà commencé à me surcharger. J'ai besoin que le B.T. ne fonctionne que lorsque le prix du stop est inférieur au seuil minimum, c'est-à-dire le prix ouvert+ la prise minimum. J'ai cette variable priceBU. Et puis le traal est passé à autre chose. J'essaie tout de suite une fonction séparée pour m'entraîner, c'est plus facile à comprendre pour moi. Je m'occuperai du vôtre dès que tout fonctionnera.

Au début, je l'ai écrit :

int start()
{
   int g;
   for (g = OrdersTotal() - 1; g >= 0; g--)
   {
       if (!OrderSelect(g,SELECT_BY_POS)) continue;
       if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
       if (OrderSymbol() != Symbol()) continue;
       
      if (OrderStopLoss() <= priceBU)
      {
          MovingStopLossToBU();
      }
      {
          ticket = OrderTicket();
          TrailingStop("", -1, -1);
      }
   }

Ai-je bien fait les choses, ou devrais-je les faire différemment ? Tout semble fonctionner correctement, mais d'une certaine manière, c'est écrit simplement, sans aucune condition...

 
hoz:

borilunad, vous avez, par exemple, si la fonction a à la fois B.U. et TPAAL, le cycle et la sélection des ordres, si je comprends bien, est dans le démarrage de la fonction et est déclenché par un tic-tac ?

J'essaie de comprendre comment combiner tout cela et mon cerveau a déjà commencé à me surcharger. J'ai besoin que le B.T. ne fonctionne que lorsque le prix du stop est inférieur au seuil minimum, c'est-à-dire le prix ouvert + la prise minimum. J'ai cette variable priceBU. Et puis le traal est passé à autre chose. J'essaie tout de suite une fonction séparée pour m'entraîner, c'est plus facile à comprendre pour moi. Je m'occuperai du vôtre dès que tout fonctionnera.

Au début, je l'ai écrit :

Ai-je bien fait les choses, ou devrais-je les faire différemment ? Tout semble fonctionner correctement, mais d'une certaine manière, c'est écrit simplement, sans aucune condition...

Exactement, la fonction doit être appelée lorsque les conditions sont remplies, et les conditions doivent être adaptées au marché, respecter les distances par rapport au prix et avoir toujours la variation nécessaire par rapport au spread, etc. (j'ai prévenu), ce qui protégera des violations et des erreurs dues aux mouvements spontanés des prix. Et bien sûr, le tic-tac ! Alors pourquoi appeler la fonction à chaque tic, les conditions doivent donc être prescrites au départ. Surtout sur le Real, le vôtre ne va pas "sembler", mais certainement pas fonctionner, nous aurons des erreurs les unes après les autres. Et je doute que ça marche sur Demo, aussi. Et qu'est-ce que je vois dans la démo ? regardez mon chalut, vous devez aussi traduire en B/S et définir SL et TP, et faire de même pour Sell, et mettre tout cela dans une boucle d'énumération et de sélection de position, et vous aurez un bloc qui fonctionne bien pour toutes les modifications, en appelant une seule fonction, et sans tracas. ;)
 
hoz:



J'ai donc un test pour ça :

Si l'arrêt - nouvel arrêt (en U.B.) n'est pas nul... puis nous modifions... Sinon, nous ne modifions pas. C'est pourquoi je ne comprends pas bien comment cela se passe. Après tout, je comprends que je dois vérifier l'égalité des arrêts passés et nouveaux et je l'ai fait.

if (ND(OrderStopLoss()) - ND(priceBU * pt) !.= 0.0) - nous en avons besoin comme ça, if ND(...) - c'est la normalisation.

 
borilunad:
Exactement, la fonction doit être appelée lorsque les conditions sont remplies, et les conditions doivent être adaptées au marché, respecter la distance par rapport au prix et toujours avoir l'écart nécessaire (mine prev), ce qui évite les violations et les erreurs dues aux mouvements spontanés des prix. Et bien sûr, le tic-tac ! Alors pourquoi appeler la fonction à chaque tic, les conditions doivent donc être prescrites au départ. Surtout sur le Real, le vôtre ne va pas "sembler", mais certainement pas fonctionner, nous aurons des erreurs les unes après les autres. Et je doute que ça marche sur Demo, aussi. Et qu'est-ce que je vois dans la démo ? regardez mon chalut, vous devez aussi traduire en B/S et définir SL et TP, et faire de même pour Sell, et mettre tout cela dans une boucle d'énumération et de sélection de position, et vous aurez un bloc qui fonctionne bien pour toutes les modifications, en appelant une seule fonction, et sans tracas. ;)


Wow. C'est comme si je venais de renaître. Avant, c'était plus facile, et maintenant je me demande comment faire pour que ce soit différent. J'ai fait une boucle au départ. Maintenant je vais devoir tout réécrire...

Une chose étrange. Vous dites que ça ne marchera pas. Mais d'après les experts que j'ai vus, tout est appelé par des fonctions séparées et fonctionne... Je suis d'accord pour dire que cela consomme plus de ressources, mais... pourquoi il y aura des paquets d'erreurs est un mystère pour moi.

C'est un mystère pour moi parce que j'ai vu tellement de scoops et c'est écrit de la même façon que le mien. Mais je n'ai jamais vu une boucle et un choix au départ, et ensuite tout s'enchaîne à elle... Je n'ai jamais vu...

 
hoz:


Wow. C'est comme si je renaissais. C'était plus facile avant, mais maintenant je me demande comment refaire quoi que ce soit. J'ai fait une boucle au départ. Maintenant je dois tout réécrire.

Une chose étrange. Vous dites que ça ne marchera pas. Mais d'après les experts que j'ai vus, tout est appelé avec des fonctions séparées et fonctionne... Je suis d'accord pour dire que cela consomme plus de ressources, mais... pourquoi il y aura des paquets d'erreurs, c'est un mystère pour moi.

C'est un mystère pour moi parce que j'ai vu tellement de scoops et c'est écrit de la même façon que le mien. Je n'ai jamais vu un cycle et un choix au départ, et ensuite tout s'y accroche...

Le codebase comporte beaucoup de solutions différentes et de niveaux différents. J'ai commencé par des modifications et j'en suis venu progressivement à cette construction, qui n'est pas du tout nouvelle, mais qui me convient. J'ai beaucoup de fonctions hors-démarrage sans modifications. Pour ouvrir un ordre et/ou une position, il existe également une fonction. Au lieu de cela, je fais beaucoup de vérifications avant l'ouverture, également avec des fonctions extérieures au départ. Pour clôturer une position, j'utilise de nombreuses conditions avec encore plus de fonctions pour diverses vérifications.

C'est justement cette fonction que j'utilise pour les modifications, mais les modifications sont différentes et impliquent des conditions, des contrôles et des mesures de protection différents. Je ne peux pas tout mettre dans une seule fonction et ça n'a aucun sens. J'y accède lorsque toutes les conditions sont remplies et que tout est calculé, et je ne le laisse qu'à la dernière étape. Si quelque chose ne va pas, il ne l'envoie pas, le renvoie, revérifie les données et réessaie, et seuls le prix et les données exacts sont envoyés au DC, qui les accepte et les règle immédiatement. L'essentiel est de ne pas trop déranger la société de courtage.

Une fois encore, nous recommandons d'essayer seulement deux lignes de conditions pour fixer une nouvelle valeur de SL dans le chalutage et vous comprendrez que nous devons être très minutieux ici. D'ailleurs, ce bloc, développé par mes soins, se balade d'un TS à l'autre avec de légères modifications. Tout le reste, en particulier la fermeture, doit être refait, en fonction de l'algorithme TS sélectionné. Et enfin, je n'insiste sur rien, je partage simplement ce que j'ai essayé et testé, et je n'exclus pas que quelqu'un puisse vous proposer quelque chose de plus acceptable pour vous. Donc, essayez, comprenez, vérifiez, mais ne pariez jamais sur un Real au hasard, un produit semi-fini.

Pourquoi je vous dis ça, parce que tous les débutants ici veulent faire une solution rapide et faire du "pognon". Cela devrait être un cadeau pour un travail bien fait. Et ceux qui ne sont pas encore sortis de l'enfance, n'aiment pas le travail et ne veulent que jouer, le marché ne lui pardonnera pas.

Bonne nuit ! Et demain, l'esprit clair, on se remet au travail !

 
Valerius:


Il ne semble pas y avoir d'experts qui puissent répondre à cette question très simple, juste deux programmeurs qui se réunissent dans une réunion et c'est tout... Quel est le but de ce forum, alors ?

 
Valerius:


Il ne semble pas y avoir d'experts capables de répondre à cette question très simple, juste deux programmeurs qui se réunissent dans une réunion et c'est tout... Quel est le but de ce forum, alors ?

Votre question a déjà reçu une centaine de réponses - si vous comparez deux nombres fractionnaires, normalisez-les tous les deux avant de les comparer.
 

Salutations à tous, j'ai téléchargé Owl, dans le testeur tout est normal et vend et achète, je l'ai mis sur la démo dans Alpari, seulement achète......

Peut-être que quelque chose manque ici ? Je ne sais pas comment cela fonctionnerait. ....

/* décompilé supprimé */