[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 680

 
boris.45:
Comment puis-je prendre contact avec vous ? J'ai beaucoup de questions et j'aimerais avoir des conseils.
Lorsque vous posez une question à quelqu'un, cliquez sur "répondre" dans le coin inférieur droit du message de la personne à laquelle vous vous adressez. Sinon, les gens se demanderont à qui s'adresse votre question... :)
 
Pouvez-vous me dire s'il est possible d'envoyer une commande de déconnexion à l'EA depuis le script ?
 
granit77:
Je remplacerais un interrupteur par un tableau prêt à l'emploi, pourquoi attribuer des valeurs prédéfinies à chaque fois ?

Merci, mais pouvez-vous être plus précis ? Parce que les valeurs prédéfinies ici sont des délais, mais le code suivant les cas pour les différents indicateurs sera différent... Probablement, c'est plus facile d'exposer un peu plus de code... :) En général, je suis très lent aujourd'hui - je n'ai pas pu dormir la nuit dernière et je suis toujours dans les limbes...

int AnaliseFunc (string sy, int tf)
{
   
   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
         
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB_1  =iCustom(sy,tf,"BB_MA",13,1,1,1),
   BB_2  =iCustom(sy,tf,"BB_MA",13,1,1,2),
   BB_3  =iCustom(sy,tf,"BB_MA",13,1,1,3),
   AO1   =iAO(sy,tf,1),
   AO2   =iAO(sy,tf,2),
   AO3   =iAO(sy,tf,3),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8)*1000,
   AC2   =NormalizeDouble(iAC(sy,tf,2),8)*1000,
   AC3   =NormalizeDouble(iAC(sy,tf,3),8)*1000,
   AC4   =NormalizeDouble(iAC(sy,tf,4),8)*1000,
   AC5   =NormalizeDouble(iAC(sy,tf,5),8)*1000,
   SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
   SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
   DeM_1 =iDeMarker(sy,tf,14,1),
   DeM_2 =iDeMarker(sy,tf,14,2),
   Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
   Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
   Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
   
//---------------- Проверка на разворот BB_MA -------------------------------------------------------   
   
   if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0)                               // Найден разворот BB вверх
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =true;  TrBBTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrBBTurnUP_M5 =true;  TrBBTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrBBTurnUP_M15=true;  TrBBTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrBBTurnUP_M30=true;  TrBBTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrBBTurnUP_H1 =true;  TrBBTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrBBTurnUP_H4 =true;  TrBBTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrBBTurnUP_D1 =true;  TrBBTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrBBTurnUP_W1 =true;  TrBBTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrBBTurnUP_MN =true;  TrBBTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
   if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0)                               // Найден разворот BB вниз
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =false;  TrBBTurnDN_M1=true;      // Флаг разворота вниз на М1
            case 5:     TrBBTurnUP_M5 =false;  TrBBTurnDN_M5=true;      // Флаг разворота вниз на М5
            case 15:    TrBBTurnUP_M15=false;  TrBBTurnDN_M15=true;     // Флаг разворота вниз на М15 
            case 30:    TrBBTurnUP_M30=false;  TrBBTurnDN_M30=true;     // Флаг разворота вниз на М30 
            case 60:    TrBBTurnUP_H1 =false;  TrBBTurnDN_H1=true;      // Флаг разворота вниз на H1
            case 240:   TrBBTurnUP_H4 =false;  TrBBTurnDN_H4=true;      // Флаг разворота вниз на H4
            case 1440:  TrBBTurnUP_D1 =false;  TrBBTurnDN_D1=true;      // Флаг разворота вниз на D1
            case 10080: TrBBTurnUP_W1 =false;  TrBBTurnDN_W1=true;      // Флаг разворота вниз на W1
            case 43200: TrBBTurnUP_MN =false;  TrBBTurnDN_MN=true;      // Флаг разворота вниз на MN
         }
      }
//---------------------- Проверка на разворот Momentum -----------------------------------------------
   
   if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =true;  TrMomTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =true;  TrMomTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=true;  TrMomTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=true;  TrMomTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =true;  TrMomTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =true;  TrMomTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =true;  TrMomTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =true;  TrMomTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =true;  TrMomTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
      
   if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =false;  TrMomTurnDN_M1=true;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =false;  TrMomTurnDN_M5=true;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=false;  TrMomTurnDN_M15=true;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=false;  TrMomTurnDN_M30=true;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =false;  TrMomTurnDN_H1=true;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =false;  TrMomTurnDN_H4=true;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =false;  TrMomTurnDN_D1=true;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =false;  TrMomTurnDN_W1=true;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =false;  TrMomTurnDN_MN=true;      // Флаг разворота вверх на MN
         }
      }
//---------------------- Проверка DeMarker на перепроданность/перекупленность ---------
Vous voyez - il y a un code absolument identique en cours, mais il vérifie déjà les critères de négociation d'autres indicateurs... Je veux juste rassembler toutes les vérifications de tous les indices utilisés dans l'EA dans un seul bloc analytique, afin qu'il calcule leurs valeurs une fois par tick, les mette dans des variables et utilise ensuite les valeurs des variables pour les décisions de trading. Je ne sais pas comment l'organiser en utilisant un tableau de valeurs prédéfinies...
 
artmedia70:

Merci, mais pouvez-vous être plus précis ? Parce que les valeurs prédéfinies ici sont des délais, mais le code suivant les cas pour les différents indicateurs sera différent... Probablement, c'est plus facile d'étaler un peu plus de code... :) Je n'ai pas les idées claires aujourd'hui - je n'ai pas pu dormir la nuit dernière et je suis toujours dans les limbes...

Vous voyez - il y a un code absolument identique, mais il vérifie déjà les critères commerciaux d'autres indicateurs... Je veux juste rassembler toutes les vérifications de tous les indices utilisés dans l'EA dans un bloc analytique et ensuite calculer leurs valeurs une fois par tick, les mettre dans des variables et utiliser les valeurs des variables pour les décisions de trading. Je ne sais pas comment l'organiser en utilisant un tableau de valeurs prédéfinies...




Peut-être avez-vous simplement besoin de sélectionner une priorité de calcul, c'est-à-dire qu'il semble que vous ayez

Si (BB_1<0 ) est la première condition obligatoire après laquelle il n'est pas nécessaire de calculer d'autres BB_, eh bien, faites un if composé et faites les calculs de BB_ nécessaires dans le second if, étant donné que le premier if a été rempli, et si .... autre est plutôt efficace, alors que vous n'avez que si

Je suis d'accord, le code peut devenir plus gros et moins lisible, mais les performances augmenteront.

 
IgorM:


peut-être que vous avez juste besoin de prendre la priorité de calcul, c'est à dire comme vous avez

Si (BB_1<0 ) est la première condition obligatoire, après laquelle il n'est pas nécessaire de calculer d'autres BB_, alors faites un if composé et effectuez les calculs de BB_ nécessaires dans le second if, à condition que le premier if ait été rempli, et si . autre est plutôt efficace, alors que vous n'avez que si

Je conviens que le code peut devenir plus grand en nombre de lignes et moins lisible, mais les performances augmenteront.

Merci, Igor, je vais voir ce qui se passe. Ce n'est pas ce que j'avais en tête... Je me souviens qu'au début de l'informatisation, en 1991-94, je ne me souviens pas exactement... Je faisais de la programmation en langage assembleur pour le ZX Spectrum... qui était terriblement lent et limité à 64Kb de mémoire... Il y a donc eu une commande au processeur pour travailler avec la zone de mémoire de l'écran afin de sortir rapidement 16386Kb dans cette zone. La commande CPU documentée était la plus rapide de toutes, travaillant avec un grand ensemble de données. On ne peut pas y faire grand-chose, mais... ils ont trouvé un moyen de quadrupler la vitesse de sortie. Il y avait des commandes pour travailler avec la pile et elles étaient exécutées beaucoup plus rapidement. Voici comment ils ont procédé : ils ont déplacé la pile vers une zone de mémoire inutilisée qui se trouve juste après l'écran, ils ont rempli cette zone avec des données graphiques et ensuite, après avoir déplacé la pile vers l'écran, ils ont rapidement fait sauter l'écran préparé en mémoire vers la zone de l'écran avec une commande qui a rempli la pile... Juste un miracle pour l'époque, mais pour Spectrum, c'était magique...

Là aussi, je m'intéresse aux méthodes de travail non conventionnelles... Vous savez, comme voir quelles commandes sont exécutées en combien de cycles d'horloge et construire quelque chose de similaire... Qu'est-ce qui pourrait remplacer les commandes de comparaison logique, peut-être la soustraction ou quelque chose d'autre dans la même veine.....

 
artmedia70:

Et là, je m'intéresse aux méthodes de travail non conventionnelles... Comme chercher quelles commandes sont exécutées en combien de cycles d'horloge et construire quelque chose de similaire... Qu'est-ce qui pourrait remplacer les commandes de comparaison logique, peut-être la soustraction ou quelque chose comme ça.....


je pense que vous ne le trouverez pas dans mql - les principes de mql sont très similaires à ceux de java avec la syntaxe C, essayez de voir lequel est le plus rapide pour exécuter case ou if, je me souviens avoir vu dans turbopascal que if est plus rapide
 
artmedia70:
Bienvenue ici.
 
Oper:
Savez-vous si vous pouvez envoyer une commande pour désactiver l'EA à partir du script ?

Vous pouvez. Par exemple, je contrôle mon EA avec des scripts qui placent les variables globales dans un certain état. Les états de ces variables

ils sont analysés dans le conseiller expert et les commandes nécessaires sont exécutées.

 
Bon après-midi.
 
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,241); 
Pouvez-vous me dire comment définir correctement la taille de la flèche, et pourquoi sa taille augmente lorsque vous réinitialisez les paramètres de couleur mais diminue lorsque vous recompilez ?