Cette tâche peut-elle être résolue en principe dans MQL4 ? - page 2

 

Donne-moi le code, on trouvera une solution d'ici ce soir.

Vous pouvez l'écrire en personne :)

 
tara:
Donnez-moi le code, on trouvera une solution d'ici ce soir.

#property copyright "Copyright 2013, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"

//#include <WinUser32.mqh>
//int whwnd ;
//#include <stdlib.mqh> // Bibliothèque standard
double b ;
double pour cent ;
double maxpercent = 0 ;
int timetoresume = 10 ;
int selecttime = 1 ;
string status,status1 ;
int total ;
int magic[100] ;
int kol=0 ;
int tempkol =0 ;
//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{

retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert |
//+------------------------------------------------------------------+
int start()
{
// while(!IsStopped()) // jusqu'à ce que l'utilisateur.
/// { // ...n'arrête pas l'exécution du programme
// RefreshRates() ;
b = AccountBalance()/100 ;
pourcentage = AccountProfit()/b ;
if (maxpercent > percent) maxpercent = percent ;
Timetoresume = TimeLocal() ;
si (pourcentage*(-1) > 1) status = "Gel actif" ;
sinon status = "Running" ;
total=OrdersTotal() ;
kol = 0 ;
for (int i=total ; i>0 ; i--) { //attribuer à chaque élément du tableau la valeur de chaque commande ouverte
OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES) ;
magic[i] = OrderMagicNumber () ;
// Imprimez ("Magie " + i+" " +magie[i] ;
}
for (int k = 1 ; k <= 1 ; k++){ // comparer la magie du premier ordre ouvert avec les suivants
tempkol = magic [k] ;
for ( int l = 1 ; l <=total;l++){
si (tempkol != magic[l]) kol++ ;
}
}
if(kol >= 2){ // si plus de 2 EAs sont déjà entrés dans la transaction
GlobalVariableSet ("Freeze1",200) ; // les autres EA doivent écouter ces variables globales.
GlobalVariableSet ("Freeze2",200) ; // et de ne pas entrer dans les transactions, alors que les autres ont le temps d'ouvrir des ordres.
status1="test2" ; // conseiller GlobalVariableSet ("Freeze1",200) fait, ayant attendu son tour
} //attendant son tour dans le terminal
Commentaire ( AccountProfit()
,"\n"
, "DrawDown " , NormalizeDouble (percent,1)*(-1), " % ", " MaxDrawDown " , NormalizeDouble (maxpercent,1)*(-1), " % ".
, Timetoresume
,"\n"
",status," ",percent*(-1)
,"\n"
, "total de la commande ",total
,"\n"
, "OrderSymbol()," Magic ",OrderMagicNumber()," ",kol
,"\n"," ",status1
) ;
retour ;
}

//+------------------------------------------------------------------+

Ne jugez pas, la dernière fois que j'ai écrit un programme en Sinclair, c'était en Basic quand j'étais à l'école .....


 
Zakyza:


Est-il possible de définir un système de priorités dans MQL4, de sorte que le code de l'EA de gestion soit d'abord exécuté, puis toutes les autres EA ?


Bien sûr, c'est possible.

Organiser le travail des AE selon le schéma "maître-esclave".

 
avtomat:


Bien sûr que vous pouvez.

Organiser les conseillers pour qu'ils travaillent de manière "maître-esclave".


Les conseillers experts en trading ne peuvent être influencés qu'en changeant la variable globale et ils écoutent cette variable GlobalVariableSet ("Freeze1",200) quand mon "manager" daigne attendre son tour et y écrire 200
 
Zakyza:

Les conseillers-experts de trading ne peuvent être influencés que par la modification de la valeur d'une variable globale et ils écoutent cette variable GlobalVariableSet ("Freeze1",200) lorsque mon "manager" daigne, en attendant son tour, écrire 200 à cet endroit.

Pourquoi votre responsable, s'il est le responsable, attend-il une sorte de tour ?

Ce sont les esclaves qui doivent attendre le leur : le manager a écrit une interdiction de commerce dans GV - ils s'assoient, restent silencieux (l'esclave a vérifié le drapeau global au premier tic, si 'sit no bleep' - dit JawolGerGeneral, et retourne(0))...

Pourquoi votre manager attend-il son tour pour accéder au drapeau GV ?

 
Tout est fait par un seul conseiller expert )))). Vous pouvez y mettre 100 paires ))))
 
artikul:
Tout est fait par un seul conseiller expert )))). Vous pouvez y mettre jusqu'à 100 paires )))).

Eh bien, ce n'est pas ce dont nous parlons...
 

maître

//+------------------------------------------------------------------+
int deinit()
  {
      GlobalVariableSet(work,0);   // запрещение работы ведомым
   return(0);
  }
//+------------------------------------------------------------------+
.....

int start()
   .....

   work=GlobalVariableGet(work);

   if( work==0 && всё_хорошо )   GlobalVariableSet(work,1);   // разрешение работы ведомым

   if( work==1 && всё_плохо )    GlobalVariableSet(work,0);   // запрещение работы ведомым

// можно организовать систему запретов/разрешений любой сложности   

   .....

esclave

.....

int start()


   work=GlobalVariableGet(work);

   if( work==0 )   { стоп } ;    // здесь возможны некоторые действия для завершения текущих процессов

   if( work==1 )   { работа };   // ведомым разрешена работа -- можно работать в нормальном режиме

.....

J'espère que j'ai été clair.

 
avtomat:

maître

esclave

J'espère que j'ai été clair.


Tout est clair, merci.

J'ai essayé de cette manière (c'est-à-dire d'interdire et d'autoriser en fonction de la situation), mais cela fonctionne de la manière suivante pour moi :

Après cette initialisation du maître : int deinit().... // l'interdiction du travail des esclaves est silencieuse, mais dès que l'assistant se détend ( if (nombre de mages identiques <=2) ) et écrit dans GlobalVariableSet(work,1) ; // l'activation des esclaves , et il y a 8 esclaves sur 8 paires différentes, réussissent à ouvrir en 4 - 6 paires au lieu de 2 comme spécifié dans la condition du maître.Ils s'ouvrent AVANT que le maître ne "comprenne" que le "nombre de majuscules identiques" est significativement supérieur à 2. Après cela, bien sûr, les autres esclaves sont silencieux, mais ce n'est plus ouvert 2 copies comme souhaité, mais 4 - 6.

Si je comprends bien, le contrôle est donné aux EAs esclaves int start ( ) après que j'ai exécuté le code int start() et cela dépend de int start( )des EAs esclaves et du nombre de copies de chaque paire qui seront ouvertes avant le début de l'assistant et un global devient prohibitif. Veuillez me corriger si j'ai mal compris l'algorithme du terminal et l'essence du problème. En gros, si un maître et un esclave ont toutes les chances de fonctionner correctement, mais que les esclaves en ont 8-10 !

C'est pourquoi j'ai écrit, j'ai essayé de démarrer master en boucle et de le faire rester allumé pour toujours, mais mon terminal s'est bloqué.

artmedia70: " pourquoi votre manager, si c'est un manager, attend-il une sorte de file d'attente ? " C 'est ce que j'aimerais savoir.

 

Et pourquoi et pourquoi fabrique-t-on deux magiciens identiques ?

Des variables globales peuvent être utilisées pour attribuer des zones magiques non chevauchantes aux EE incluses. Les contrôles et affectations correspondants sont effectués dans init().

En outre, nous pouvons limiter le nombre d'ordres ouverts pour chaque symbole en le spécifiant explicitement ou en assignant un maître, en fonction de la situation générale actuelle que le maître doit contrôler.

Cela signifie que si l'esclave fait une action, il doit en rendre compte au maître. Le maître, à son tour, doit donner son résumé, dont dépendent les actions (ou inactions) ultérieures de l'esclave.