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

 
Chiripaha:
On ne sait pas très bien à quelles fins on utilise plusieurs EA identiques sur plusieurs graphiques.

L'Expert Advisor n'analyse que la paire sur laquelle il plane. Sur quelle paire un signal apparaît en premier, il ouvre un ordre. Mais il arrive qu'un signal apparaisse sur deux paires en même temps. Et, aussi étrange que cela puisse paraître, 2 ordres sont ouverts, bien qu'il y ait une vérification dans le Conseiller Expert pour chaque ordre ouvert et qu'il ne devrait pas ouvrir le second. C'est nécessaire parce que nous n'avons pas assez d'argent sur le dépôt.

Tant que le 1er n'a pas fini de travailler, le 2ème ne traitera pas les données.

Oui, mais lorsque le 1er a terminé son travail et a ouvert une commande, le 2e, qui a commencé à travailler, ne voit pas pendant un court instant qu'il y a déjà une commande. Soit il se met au travail avant l'ouverture de la commande.
--

Une dernière chose : lorsque le 1er EA est Sleep(1000), le second EA attend ou commence à travailler ?

 

Bonjour à tous !

Codé l'idée suivante

Condition N1 ..Si High[1] dépasse un certain maximum X

et en même temps

Condition N2. La différence entre le High[1] et le Low de la première des 150 bougies suivantes >= 150 p.

------------------------------------------------------------------

Action N1 . Supprimer la commande précédente

Action N2 ..Placer un ordre en attente

Action N3 . Attribuer des valeurs aux variables.

PROBLÈME. Malgré le fait que l'ordre en attente ne devrait être placé que s' il n'y a pas d'ordres sur le marché, ou si le dernier ordre n'est pas placé sur la barre actuelle. si (ot==0|| last_order_bar>0)

Lorsque la condition N1 et la condition N2 sont remplies, PLUSIEURS ordres en attente sont placés simultanément.

Je veux placer seulement UN ordre en attente.

-----------------------------------------------

Les valeurs ot et last_order_bar sont calculées ci-dessus dans ce code

                                                                                                                        
                                                                                                                
int last_order_bar = 0;                                                                                                                 
int ot = OrdersTotal();                                                                                                                 
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер                                                                                                                      
      if ( OrderType ()==OP_SELLSTOP) //проверили тип
        last_order_bar = iBarShift (Symbol (),0,T ); //запомнили, на каком  баре открыт последний ордер (если он есть)                                                                                                                  
 }                                                                                                                      
if(High[1] > X )
 {
   
   for(int i=1;i<150;i++)
     {
      if((High[1]-Low[i])>=1500*Point)//
      break;         //
             {
     if (ot>0) 
         {
           bool R = OrderDelete(OrderTicket());  
         }
if(R==0)                      //если последний выставленный SELLSTOP удален
         {
if (ot==0 || last_order_bar>0)        
int Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1500*Point,1,iHigh( Symbol (), 0,1),iHigh( Symbol (), 0,1)-1610*Point,"jfh",123 );//выставить новый SELLSTOP       
if (Ticket>0)                // если SELLSTOP выставлен
 N = (OrderTicket());        //запомнить в глобальную переменную N тикета данного SELLSTOP .
 T = Time [0];               //запомнить в глобальную переменную время выставления данного SELLSTOP
 X=iHigh( Symbol (), 0,1);   //запомнить в глобальную переменную High свечи N1 после которой был выставлен данный SELLSTOP
   
 }
 }
 }
 }
}
 }   
                        
return(0);
 
Arles:

L'Expert Advisor n'analyse que la paire sur laquelle il plane. Sur quelle paire le signal apparaît en premier, il ouvre un ordre. Mais il arrive qu'un signal apparaisse sur deux paires en même temps. Et, aussi étrange que cela puisse paraître, 2 ordres sont ouverts, bien que le Conseiller Expert ait une vérification pour tout ordre ouvert et qu'il ne devrait pas ouvrir le second. C'est nécessaire parce que nous n'avons pas assez d'argent sur le dépôt.

Oui, mais lorsque le 1er a terminé son travail et ouvert une commande, le 2ème, ayant commencé à travailler, ne voit pas pendant un court instant que la commande existe déjà. Ou il se met au travail avant l'ouverture de la commande.
--

Une dernière chose : lorsque le premier EA est Sleep(1000), le second EA attend-il ou commence-t-il à travailler ?

Concernant la première question : j'ai stipulé que si les EA sont écrits correctement... Bien sûr, cela peut se produire de la manière que vous avez décrite, s'il n'y a pas de contrôle dans l'EA pour un ordre placé (ouvert) et pour le calcul du money management - tout cela dépend du niveau (et de la paresse) du programmeur - s'il a pensé à ces choses et les a prescrites dans l'EA ou non. Si tout est mis en œuvre correctement, aucune de vos préoccupations ne se produira. - Le signal, oui, peut apparaître sur 2 paires simultanément, mais (voir le post précédent), les Expert Advisors travaillent de manière séquentielle. Par conséquent, tant que le premier EA n'a pas traité les cotations, le suivant ne commencera pas à travailler. - Je pense que c'est la raison pour laquelle nous avons décidé d'utiliser l'ordre séquentiel (même s'il était possible de traiter les citations en parallèle, ce serait un autre sujet de discussion).

Cela dépend également du niveau de l'EA. Puisque toutes les choses que vous avez demandées sont assez pénibles à prescrire - ce n'est pas un petit travail, qui exige des connaissances en matière de finances. C'est pourquoi les EA ont tendance à être "simples", et sont orientés vers l'obtention de l'ensemble du compte pour la devise actuelle. En général, une seule devise est échangée. En effet, pour négocier plusieurs devises, par exemple, vous devez disposer d'un type de dépôt assez différent, et des systèmes aussi simples ne sont pas vraiment applicables dans ce cas. La seule exception à cela serait les opérations (j'ai oublié le terme exact, je vais le reformuler autrement) de couverture, lorsqu'on ouvre à un prix et qu'on rouvre immédiatement à un autre (ou même plusieurs) - la différence est pour soi. Mais il s'agit d'un autre type d'EA et tout y sera comptabilisé (tout en un). - Et en général, à mon avis, s'il n'y a pas plus d'argent que de liquidité sur une paire, alors trader sur toutes les paires à la fois est de mauvais ton. (mais c'est mon opinion personnelle) Portefeuilles, etc. - Il ne s'agit pas d'une opération spéculative. Pour une raison quelconque, les gens ne tiennent pas du tout compte de cela. - Si vous n'êtes pas une entreprise qui produit ou fait du commerce international, vous n'avez pas du tout besoin de beaucoup de devises. - C'est là où je veux en venir - pourquoi ne mettent-ils pas en place de tels blocs pour comptabiliser les différentes devises dans les EA - parce qu'ils ne sont pas pertinents.

Et pour la deuxième question: franchement, j'ai moi-même cette question en suspens - je ne sais pas trop comment le terminal réagit à la fonction Sleep(1000) - je fais appel à ceux qui s'y connaissent pour me donner des conseils. Idéalement, le terminal ne traitera pour l'instant que les prix en continu, c'est-à-dire qu'il recevra les cotations et tracera des graphiques et des indicateurs. Mais pendant que cet EA est "en attente", il ne passera son tour à personne d'autre. - Mais c'est mon hypothèse, dont je ne suis pas tout à fait sûr. Une autre exception à cette "file d'attente" est peut-être constituée par les scripts qui peuvent être lancés pour être exécutés pendant que l'EA attend. - Je me pose la même question.

Cependant, je sors de cette ignorance en construisant mes Expert Advisors sur la base de l'exactitude du premier point.

 
solnce600:

Bonjour à tous !

Codé l'idée suivante

Condition N1 ...Si High[1] dépasse un certain maximum X

et en même temps

Condition N2. La différence entre le High[1] et le Low de la première des 150 bougies suivantes >= 150 p.

------------------------------------------------------------------

Action N1 . Supprimer la commande précédente

Action N2 ..Placer un ordre en attente

Action N3 . Attribuer des valeurs aux variables.

PROBLÈME. Malgré le fait que l'ordre en attente ne devrait être placé que s' il n'y a pas d'ordres sur le marché, ou si le dernier ordre n'est pas placé sur la barre actuelle. si (ot==0 || last_order_bar>0)

Lorsque la condition N1 et la condition N2 sont remplies, PLUSIEURS ordres en attente sont placés simultanément.

J'ai besoin qu'un seul ordre en attente soit placé.

: )) Andrey, vous posez des questions qui sont déjà expliquées dans le manuel. Regardez l'exemple du terminal dans le tutoriel, où les principes et la logique de la prise en compte des ordres sont décrits en détail. - La plupart de vos questions disparaîtront alors d'elles-mêmes. En général, le tutoriel est construit sur le fait que la structure de TOUT conseiller expert compétent est entièrement présentée à titre d'exemple. - C'est là toute la beauté de la chose. + les concepts théoriques de base de la programmation sont donnés. Mais il y a un hic - il n'est pas destiné au lecteur paresseux - il découle de la structure de ce qui est écrit. En d'autres termes, pour éliminer les questions sur des points spécifiques, vous devez lire le manuel en entier. Mais peu d'entre eux accepteront de le relire (le manuel).

Vous construisez des piles sur la comptabilité des commandes. - Vous avez besoin d'une approche plus simple. L'ordre est là ou pas - et peu importe sur quelle barre (dans vos conditions) il est ouvert. - En raison de ces complexités, nous sommes confus dans l'examen des ordres et des conditions. - D'où les erreurs algorithmiques, que tout programmeur devrait rechercher. Changez la logique d'écriture du programme et les erreurs algorithmiques disparaîtront (d'elles-mêmes).

 
OK. Merci.
 
Arles:

L'Expert Advisor n'analyse que la paire sur laquelle il plane. Sur quelle paire le signal apparaît en premier, il ouvre un ordre. Mais il arrive qu'un signal apparaisse sur deux paires en même temps. Et, aussi étrange que cela puisse paraître, 2 ordres sont ouverts, bien qu'il y ait une vérification dans le Conseiller Expert pour chaque ordre ouvert et qu'il ne devrait pas ouvrir le second. C'est nécessaire parce que nous n'avons pas assez d'argent sur le dépôt.

C'est tout à fait élémentaire ! Le premier conseiller expert ouvre un ordre. Si l'EA qui a ouvert l'ordre n'a pas d'importance... alors créez une condition dans les deux. Créez une fonction booléenne qui trouve la dernière commande ouverte, et extrait respectivement l'heure de son ouverture. Sice temps d'ouverture estégal à l'ouverture de la barre actuelle, nous quittons la fonction avec TRU. Placez la fonction au début dudépart et si le mode est TRU, alors sortez du départ.
 
Chiripaha:

Quant à la deuxième question: pour être honnête, j'ai moi-même cette question en suspens - je ne suis pas encore tout à fait sûr de la façon dont le terminal réagit à la fonction Sleep(1000) - je me tourne également vers ceux qui savent - pour me donner une réponse. Idéalement, le terminal ne traitera pour l'instant que les prix en continu, c'est-à-dire qu'il recevra les cotations et tracera des graphiques et des indicateurs. Mais pendant que cet EA est "en attente", il ne passera son tour à personne d'autre. - Mais c'est mon hypothèse, dont je ne suis pas tout à fait sûr. Peut-être qu'une autre exception à cette "file d'attente" sont les scripts qui peuvent être lancés pour être exécutés pendant que l'EA attend. - Je me pose la même question.

Cependant, j'essaie de sortir de cette ignorance en construisant mes Expert Advisors sur la base de l'exactitude du premier point.



D'après ce que j'ai compris, après Sleep(), le conseiller expert s'endort simplement, c'est-à-dire que son travail est mis en pause et qu'à ce moment-là, il reçoit des cotations et ne réagit à rien. En conséquence, le terminal passe la "file d'attente" à un autre.

Si quelqu'un n'est pas d'accord, merci de me corriger !

 
hoz:


D'après ce que j'ai compris, lorsque la fonction Sleep() a été exécutée, le conseiller expert s'endort simplement, c'est-à-dire que son travail est suspendu et qu'à ce moment-là, le conseiller expert reçoit des cotations et ne réagit à rien du tout. En conséquence, le terminal passe la "file d'attente" à un autre.

Si quelqu'un n'est pas d'accord, merci de me corriger !

Je ne suis pas prêt à accepter. - En effet, à partir de cette position, la logique du travail correct et du calcul de l'argent et des positions par les conseillers experts est perdue. - C'en est une. Deuxièmement. - Si mon EA est en sommeil, par exemple, pendant 100 millisecondes, et qu'un autre commence à travailler en même temps, alors que se passera-t-il, que dès que ces 100 millisecondes seront passées, l'autre devra arrêter son travail... et le repasser à celui-là au milieu et ainsi de suite indéfiniment... D'un autre côté. J'ai vu (ce qui n'est pas rare) des EA se mettre en "veille" pendant des minutes et plusieurs fois à chaque bloc d'exécution. - Ensuite, si tous les autres hiboux ne travaillent pas pendant cette période, c'est également une erreur. - La question est donc tout à fait pertinente. J'aimerais comprendre la logique du fonctionnement à ce stade. Mais je n'ai pas trouvé d'explication détaillée dans les documents officiels.

Mais entre deux maux, je choisirais le second. Dans ce cas, je laisserais simplement la chouette dont je suis sûr. Sinon, tant pis : au moins l'exactitude des recalculs est préservée, bien que leur travail soit ralenti.

Le problème n'est pas aussi trivial qu'il n'y paraît. - Mes expériences ont montré que si la case"Autoriser les EA à négocier" n'est pas cochée, le travail de l'EA ne s'arrête pas - tous les calculs sont effectués de la même manière à chaque tick. Les seules transactions de l'EA ne sont pas envoyées au serveur. Mais, si ces calculs sont remplis de ces "erreurs" (pas tout à fait correctement), alors s'il y a 5-10 de ces EA, alors ils peuvent spécifiquement ralentir l'exécution de l'EA réel qui est en train de trader.

Oui, certains programmeurs contrôlent les autorisations d'échange et sautent le travail de la chouette sur cette base. Mais cela ne se fait pas plus souvent. Et si le code est fermé, on ne peut absolument pas comprendre si l'opération est un freinage ou non (et quel hibou exactement). - Maintenant, je vais fouiller dans ce sujet sur le forum de recherche. Quelque chose s'est ralenti.

Merci à Arles pour la question, pour m'avoir rappelé et mis à jour. Je n'étais pas assez expérimenté pour comprendre ce qui était écrit sur le sujet. Je vais le refaire maintenant.

 
Arles:

L'Expert Advisor n'analyse que la paire sur laquelle il plane. Sur quelle paire un signal apparaît en premier, il ouvre un ordre. Mais il arrive qu'un signal apparaisse sur deux paires en même temps. Et, aussi étrange que cela puisse paraître, 2 ordres sont ouverts, bien qu'il y ait une vérification dans le Conseiller Expert pour chaque ordre ouvert et qu'il ne devrait pas ouvrir le second. C'est nécessaire parce que nous n'avons pas assez d'argent sur le dépôt.

Oui, mais lorsque le 1er a terminé son travail et ouvert une commande, le 2ème, ayant commencé à travailler, ne voit pas pendant un court instant que la commande existe déjà. Ou il se met au travail avant l'ouverture de la commande.
--

Une dernière chose : lorsque le premier EA Sleep(1000) le second attend ou commence à travailler ?

Avec un petit dépôt, on ne négocie pas sur plusieurs paires (conseil mondain).

Techniquement, pour que les différents EAs prennent en compte le nombre total de commandes, nous pouvons essayer ce schéma :

    int li_total - OrdersTotal();
    if (li_total == 0) Sleep (1000);
    li_total - OrdersTotal();
    if (li_total == 0) OrderSend();

Je ne sais pas si cela fonctionnera bien (cela devrait fonctionner avec 2). Il serait plus sûr de le faire par le biais de variables globales du terminal en organisant des "sémaphores" fonctionnant séquentiellement. Le nombre de conseillers experts travaillant en parallèle n'a alors aucune importance.

 
Chiripaha:

Je ne suis pas prêt à accepter. - En effet, à partir d'une telle position, la logique du fonctionnement des EA et du calcul correct de l'argent et des positions est perdue. - C'en est une. Deuxièmement. - Si mon EA est en sommeil, par exemple, pendant 100 millisecondes, et qu'un autre commence à travailler au même moment, que se passera-t-il, dès que ces 100 millisecondes seront passées, l'autre devra arrêter son travail... et le repasser à celui-là au milieu et ainsi de suite indéfiniment... D'un autre côté. J'ai vu (pas rarement) dans les EAs quand ils envoient en "sommeil" pendant des minutes et plusieurs fois à chaque bloc d'exécution. - Ensuite, si tous les autres hiboux ne travaillent pas pendant ce temps, c'est aussi quelque chose de faux. - La question est donc tout à fait pertinente. J'aimerais comprendre la logique du fonctionnement à ce stade. Mais je n'ai pas trouvé d'explication détaillée dans les documents officiels.

Mais je suis prêt à accepter. À l'origine, lorsque mql4 est apparu, personne n'avait jamais pensé à la multidevise, ni à des meutes de hiboux dans un même terminal. Il y a donc une possibilité que ce soit normal.

Chiripaha:

Mais entre deux maux, je choisirais le second. Dans ce cas, je laisserais la chouette, j'en suis sûr. Si vous ne le faites pas, c'est pareil : au moins l'exactitude des recalculs est préservée, bien que leur travail soit ralenti.

Il est plus judicieux d'utiliser plusieurs signaux, c'est-à-dire un signal différent pour chaque symbole. Ensuite, nous rassemblons autant de signaux que nécessaire dans le tableau, et tout est négocié par un seul EA. Puisque la logique est la même, pourquoi avons-nous besoin de plusieurs EA ?

Chiripaha:

Le problème n'est pas aussi trivial qu'il n'y paraît. - Le fait est que mes expériences ont montré que lorsque la case "Autoriser les EA à négocier" est décochée, le travail de l'EA ne s'arrête pas - tous les calculs sont effectués à chaque tick. Les seules transactions de l'EA ne sont pas envoyées au serveur. Mais, si ces calculs sont remplis de ces "erreurs" (pas tout à fait correctement), alors s'il y a 5 à 10 EA de ce type, ils peuvent spécifiquement ralentir l'exécution de l'EA réel qui est en train de négocier.

Oui, certains programmeurs placent un contrôle sur les autorisations d'échanges et laissent le hibou travailler sur cette base. Mais cela ne se fait pas plus souvent. Et si le code est fermé, on ne peut absolument pas comprendre si l'opération est un freinage ou non (et quel hibou exactement). - Maintenant, je vais fouiller dans ce sujet sur le forum de recherche. Quelque chose s'est ralenti.

Apparemment oui, ce bouton"Allow EA to trade" ne fonctionne comme prévu que si le code de l'EA le prévoit.
Raison: