Questions des débutants MQL5 MT5 MetaTrader 5 - page 66

 
mario065:

Salut,

Bien sûr que non.

S'il y a plus d'une dinde, vous devez faire autant de paires pour chaque dinde qu'elle mange.

Un seul manipulateur pour utiliser toutes les paires.

Utiliser un handle un par un, c'est-à-dire copier les buffers d'indicateurs et ensuite assigner la valeur de l'indicateur suivant au handle.

Mais je ne comprends pas pourquoi il faut économiser sur les poignées alors qu'il s'agit d'entiers élémentaires qui n'ont presque aucun effet sur les ressources ?

 
Reshetov:

Utilisez les poignées une par une, c'est-à-dire copiez les tampons des indicateurs, puis affectez la valeur de l'indicateur suivant à la poignée.

Mais je ne comprends pas pourquoi il faut sauvegarder les poignées alors qu'elles sont des entiers élémentaires et n'ont pratiquement aucun effet sur les ressources ?

Bonjour.

L'année dernière, j'ai écrit une fonction externe comme celle-ci :

void CalculatePairs(string dSymbol) {

   atrHandle1=iATR(dSymbol, TimeFrame1, ATRPeriod);
   atrHandle2=iATR(dSymbol, TimeFrame5, ATRPeriod);
   atrHandle3=iATR(dSymbol, TimeFrame15, ATRPeriod);
   atrHandle4=iATR(dSymbol, TimeFrame30, ATRPeriod);
   atrHandle5=iATR(dSymbol, TimeFrame60, ATRPeriod);
   muvHandle1=iMA(dSymbol,TimeFrame1,MAPeriod,0,MAMethod,InpPr);
   muvHandle2=iMA(dSymbol,TimeFrame5,MAPeriod,0,MAMethod,InpPr);
   muvHandle3=iMA(dSymbol,TimeFrame15,MAPeriod,0,MAMethod,InpPr);
   muvHandle4=iMA(dSymbol,TimeFrame30,MAPeriod,0,MAMethod,InpPr);
   muvHandle5=iMA(dSymbol,TimeFrame60,MAPeriod,0,MAMethod,InpPr);
   if(atrHandle1<0 || atrHandle2<0 || atrHandle3<0 || atrHandle4<0 || atrHandle5<0 ||
   muvHandle1<0 || muvHandle2<0 || muvHandle3<0 || muvHandle4<0 || muvHandle5<0 )
     {
      Alert("Error Creating Handles for indicators - error: ",GetLastError(),"!!");
     }

   double ma1[],ma2[],ma3[],ma4[],ma5[];
   double atr1[],atr2[],atr3[],atr4[],atr5[];

   ArraySetAsSeries(ma1, true);ArraySetAsSeries(ma2, true);ArraySetAsSeries(ma3, true);
   ArraySetAsSeries(ma4, true);ArraySetAsSeries(ma5, true);
   ArraySetAsSeries(atr1, true);ArraySetAsSeries(atr2, true);ArraySetAsSeries(atr3, true);
   ArraySetAsSeries(atr4, true);ArraySetAsSeries(atr5, true);

   if (NormalizeDouble(CopyBuffer(muvHandle1,0,0,1,ma1),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle2,0,0,1,ma2),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle3,0,0,1,ma3),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle4,0,0,1,ma4),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle5,0,0,1,ma5),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle1,0,0,1,atr1),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle2,0,0,1,atr2),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle3,0,0,1,atr3),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle4,0,0,1,atr4),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle5,0,0,1,atr5),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}

   Result = 0;
}
double FGroup(){
      CalculatePairs(Currency1);{
         Pair1 = Result;}

Bien sûr, jusqu'à ce qu'il fasse des calculs, il a donné l'erreur 4806, mais ensuite il fonctionne bien.

Aujourd'hui, j'ai ouvert ce code et je me suis demandé s'il y avait un autre moyen.

Une erreur est une erreur.

Combien de Handles dois-je obtenir pour 8 paires et 5 horizons temporels ?

Ce n'est pas une question de ressources, je dois faire quelque chose de mieux.

Документация по MQL5: Основы языка / Функции / Описание внешних функций
Документация по MQL5: Основы языка / Функции / Описание внешних функций
  • www.mql5.com
Основы языка / Функции / Описание внешних функций - Документация по MQL5
 
mario065:

Bonjour.

L'année dernière, j'ai écrit une fonction externe comme celle-ci :

Bien sûr, jusqu'à ce qu'il fasse les calculs, il a donné l'erreur 4806, mais ensuite il fonctionne bien.

J'ai ouvert ce code aujourd'hui et je me suis demandé s'il y avait un autre moyen.

  1. Un moyen de quoi ?
  2. Pourquoi ai-je besoin de la fonction CalculatePairs() si elle ne montre rien d'autre que des erreurs ?

Supprimez cette fonction de votre code et dormez tranquille.

 
Reshetov:
  1. La voie de quoi ?
  2. Pourquoi avez-vous besoin de la fonction CalculatePairs() si elle ne produit que des erreurs ?

Supprimez cette fonction de votre code et dormez tranquille.

Il y a quelques "grands" calculs qui ne sont pas montrés.

Ensuite, d'autres fonctions prennent la paire sélectionnée et font quelque chose de nouveau.

La méthode est simple.

Par exemple :

Nous faisons un handle de l'indicateur, il n'a pas de symbole, ni de timeframe.

Lorsque nous créons un CopyBuffer, nous indiquons le cadre temporel et la paire.

Par exemple :

int OnInit()

Cela ressemble à ceci : Handle = nom de l'indicateur

void OnTick()

Cela ressemblerait à ceci : CopyBuffer(symbole spécifié, période, copier à partir de, combien copier, où copier)

C'est juste un dialogue :) avec vous.

 
mario065:

Il y a de "grands" calculs qui n'ont pas été montrés.

Je vois. Vous avez ArraySetSeries() appliqué aux tableaux sans données, c'est-à-dire avant que les informations ne soient chargées dans ceux-ci, alors que vous en avez besoin après avoir copié les tampons.
 
Reshetov:
Je vois. Vous avez appliqué ArraySetSeries() à des tableaux sans données, c'est-à-dire avant que des informations n'y soient chargées, alors que cela devrait être fait après la copie des tampons.

Exactement.

Mais je pense que ce sera plus facile pour tout le monde si cela est fait dans CopyBuffer - c'est-à-dire que vous spécifiez quelle paire et quelle trame.

L'indicateur lui-même effectue le même calcul, si seulement il précise quelle paire et quel cadre.

Si l'architecture de MT5 elle-même permet de le faire plus facilement.

Bonne idée :) .

 
Reshetov:
Je vois. Vous avez appliqué ArraySetSeries() aux tableaux sans données, c'est-à-dire avant que les informations n'y soient chargées, alors que vous voulez qu'elle le fasse après avoir copié les tampons.
Aucune différence.
 
j'ai en quelque sorte tout configuré, tout signé, fait des réglages dans le terminal, mais je ne veux pas négocier automatiquement. lorsque j'essaie de placer un ordre en attente, il s'installe et m'écrit à propos de la synchronisation et de la suppression de tous les ordres dans le terminal, et ensuite je vois des ordres du fournisseur. que dois-je faire ?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Yedelkin:

Si l'Expert Advisor utilise MFI, alors son code doit contenir une ligne permettant de récupérer le handle de cet indicateur :"MQL5 Reference / Technical Indicators / iMFI". Ainsi, l'utilisation de l'indicateur de moyenne mobile est décrite ici :"MQL5 Reference Guide / Technical Indicators / iMA".

Essayez également de lire l'article"Indicateur par indicateur dans MQL5".

J'ai lu l'article. Cependant, il n'a pas répondu à ma question "Comment puis-je supprimer les poignées iMA situées dans la fenêtre de l'indicateur MFI et enregistrer le prix de clôture de la barre ?".

La poignée iMA que vous mentionnez ne s'applique pas à l'iMA situé dans la fenêtre de l'indicateur. Description par la méthode standard, le conseiller supprime la poignée iMA du graphique.
 
Leser: Lire l'article. Cependant, il n'a pas répondu à ma question "Comment supprimer les poignées de l'iMA situées dans la fenêtre de l'indicateur MFI et enregistrant le prix de clôture de la barre ?".

À l'origine, vous avez exposé le problème de la manière suivante : "Le conseiller expert utilise MFI ; Ma n'est pas sur le graphique (fenêtre #1), mais dans la fenêtre avec l'indicateur MFI (fenêtre #2)". J'ai répondu :"Si votre Expert Advisor utilise MFI, alors son code doit contenir une ligne avec l'obtention du handle de cet indicateur : "MQL5 Reference Guide / Technical Indicators / iMFI" .

Par conséquent, je suggère de commencer par déterminer comment votre conseiller-expert obtient l'indicateur de la "fenêtre n° 2". Et nous allons réfléchir à quelque chose là-bas.

Leser : J'ai lu l'article. Cependant, cela ne répond pas à ma question ". iMA situé dans la fenêtre de l'indicateur MFI et enregistrant le prix de clôture de la barre".
Une question de clarification : sur quelles données construisez-vous l'indicateur MA : sur les valeurs de l'indicateur MFI ou sur les prix de clôture des barres ? Rien n'a été dit auparavant sur "l'enregistrement des prix de clôture des barres". C'est pourquoi j'ai fourni un lien vers l'article "Indicateur de l'indicateur".