Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1207

 

pourquoi cette boucle ne se termine pas quand ... (J'ai ajouté la deuxième condition pour i < 2000 quand j'ai réalisé que la boucle est infinie) MQL4

cv * tvp * (double)stop < ml


double tvp  = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE_PROFIT),
          vm   = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),
          vs   = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),
          ml   = AccountEquity() * (risk / 100.0),
          cv   = -1.0;
   
   for(int i = 0; cv * tvp * (double)stop < ml && i < 2000; i++)
     {
      if( (vm + vs * (double)i) * tvp * (double)stop < ml ) { cv = vm + vs * (double)i; Print(i," ",cv,"/",ml); };
     };


 
Alexandr Sokolov:

pourquoi cette boucle ne se termine pas quand ... (J'ai ajouté la deuxième condition pour i < 2000 quand j'ai réalisé que la boucle est infinie)



La boucle ne se terminera pas avant que

cv * tvp * (double)stop < ml

Pour que la boucle se termine lorsque cette condition est remplie, nous pouvons écrire ce qui suit dans le corps de la boucle

for(int i = 0; i < 2000; i++)
{
  if(cv * tvp * (double)stop < ml)
    break
  ...
}

ou

for(int i = 0; cv * tvp * (double)stop >= ml; i++)
{
  if(i >= 2000)
    break;
  ...
}
 
Mihail Matkovskij:

Dans MQL4 seulement de cette façon :

Résultat :


Merci encore pour votre aide. Je vous serais très reconnaissant si vous pouviez également me dire comment faire ce qui suit...
Quelle fonction ou construction de langage peut être utilisée pour calculer la valeur d'index d'un élément de tableau qui avait l'index avant le tri.

Ici, j'ai le tableau A[] avant le tri (la ligne supérieure) et le même tableau après le tri. Un élément ayant la valeur 5 avant le tri était à l'indice 9
, et un élément ayant la valeur 5 après le tri est à l'indice 3.

La fonction trouve une cellule avec la valeur 5 dans le tableau trié et enregistre le numéro d'index de cette cellule dans le tableau trié à W, qui est égal à l'index 3.

ArraySort(А,10,0,MODE_ASCEND) ;

W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND) ;

QUESTION : Après ArrayBsearch(), comment peut-on stocker la valeur de l'index d'une cellule avec la valeur 5 dans une variable qui a un tableau non trié.

C'est-à-dire, sauvegarder la valeur de 9.
Merci de votre aide.

 
 

Bonjour à tous. Qui sait comment définir une valeur négative dans un indicateur personnalisé et faire en sorte que cela fonctionne ? c'est-à-dire "décaler l'indicateur par rapport au graphique des prix".

Exemple : si vous mettez une valeur de -4 dans l'indicateur de moyenne mobile, il se décale par rapport au graphique vers la gauche - et fonctionne.

Mais si vous mettez cette valeur dans le code de l'indicateur - alors l'indicateur cesse de fonctionner. et montre toutes les valeurs TF en rouge.

Dossiers :
 
ANDREY:

Merci encore pour votre aide. Je vous serais très reconnaissant si vous pouviez également me dire comment faire ce qui suit...
Quelle fonction ou construction de langage peut être utilisée pour calculer la valeur de l'indice d'un élément de tableau, que cet élément avait avant le tri.

Ici, j'ai le tableau A[] avant le tri (la ligne supérieure) et le même tableau après le tri. Un élément ayant la valeur 5 avant le tri était à l'indice 9
, et un élément ayant la valeur 5 après le tri est à l'indice 3.

La fonction trouve une cellule avec la valeur 5 dans le tableau trié et enregistre le numéro d'index de cette cellule dans le tableau trié à W, qui est égal à l'index 3.

ArraySort(А,10,0,MODE_ASCEND) ;

W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND) ;

QUESTION : Après ArrayBsearch(), comment peut-on stocker la valeur de l'index d'une cellule avec la valeur 5 dans une variable qui a un tableau non trié.

C'est-à-dire, sauvegarder la valeur de 9.
Merci pour votre aide.

mais ne triez pas les données au hasard et sans but global.

Dans le projet actuel : prenez un tableau (court), la sortie sera les indices des éléments dans le bon ordre :

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


pour les tableaux plus grands, nous devons changer l'algorithme de tri (le bullage ne fonctionne pas pour les tableaux plus grands) - changez-le.

Le message principal est le suivant : ne touchez pas aux données sources. Opérer soit avec des références, soit, encore mieux, avec des indices de tableaux. Sinon, on perd des informations qui seront très utiles par la suite.

 
ANDREY:

Merci encore pour votre aide. Je vous serais très reconnaissant si vous pouviez également me dire comment faire ce qui suit...
Quelle fonction ou construction de langage peut être utilisée pour calculer la valeur de l'indice d'un élément de tableau, que cet élément avait avant le tri.

Ici, j'ai le tableau A[] avant le tri (la ligne supérieure) et le même tableau après le tri. Un élément ayant la valeur 5 avant le tri était à l'indice 9
, et un élément ayant la valeur 5 après le tri est à l'indice 3.

Je trouve une cellule avec la valeur 5 dans le tableau trié et la fonction enregistre le numéro d'index de cette cellule dans le tableau trié à W, qui est égal à l'index 3.

ArraySort(А,10,0,MODE_ASCEND) ;

W = ArrayBsearch( A,5,WHOLE_ARRAY,0,MODE_ASCEND) ;

QUESTION : Après ArrayBsearch(), comment peut-on stocker la valeur de l'index d'une cellule avec la valeur 5 dans une variable qui a un tableau non trié.

C'est pour sauvegarder la valeur de 9.
Merci de votre aide.

Pour cela, vous devez répondre à deux questions :que ferez-vous si.. :

1. Il y aura plusieurs valeurs de 5, dans différentes cellules du tableau.

2. La valeur 5 ne sera pas dans le tableau.

Parce que la fonctionArrayBsearch (pour des données triées), dans le premier cas, donnera le premier index trouvé où la valeur de la cellule est 5, dans le second cas, elle donnera un élément proche de la valeur 5. Je ne vois pas comment vous pourriez traiter un tableau non trié.

 
sla100:

Bonjour à tous. Qui sait comment définir une valeur négative dans un indicateur personnalisé et faire en sorte que cela fonctionne ? c'est-à-dire "décaler l'indicateur par rapport au graphique des prix".

Exemple : si vous mettez une valeur de -4 dans l'indicateur de moyenne mobile, il se décale par rapport au graphique vers la gauche - et fonctionne.

Mais si vous mettez cette valeur dans le code de l'indicateur, l'indicateur cesse de fonctionner. et montre des valeurs rouges pour tous les TFs.

SetIndexShift.

Le décalage est également spécifié dans iMA :

iMA

Renvoie la valeur de l'indicateurtechnique de la moyenne mobile.

doubleiMA(
symbole de chaîne de caractères,// nom du symbole
inttimeframe,// cadre temporel
intma_period,// période
intma_shift,// décalage de la moyenne
intma_method,// méthode de calcul de la moyenne
intapplied_price,//type de prix
intshift// shift
);

Paramètres

symbole

[Nom du symbole dont les données seront utilisées pour calculer l'indicateur.NULL signifie le symbole actuel.

cadre temporel

Période [en]. Peut être une des valeurs de l'énumérationENUM_TIMEFRAMES. 0 signifie la période du graphique actuel.

ma_période

[Période de calcul de la moyenne pour le calcul de l'indicateur.

ma_shift

[Décalage de l'indicateur par rapport au graphique des prix.

ma_méthode

[Méthode de calcul de la moyenne. Peut être l'une des valeurs de l'énumérationENUM_MA_METHOD.

prix appliqué

[Prix appliqué. Peut être toute valeur de l'énumérationENUM_APPLIED_PRICE.

équipe

[Index de la valeur obtenue à partir du tampon de l'indicateur (décalage par rapport à la barre actuelle d'un nombre spécifié de périodes en arrière).

Valeur retournée

Valeurde l'indicateur technique de la moyenne mobile.

Exemple :

AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

https://docs.mql4.com/ru/indicators/ima

Voici un exemple tout fait, mais en MQL5 : https://www.mql5.com/ru/docs/indicators/ima ,

qui peut être facilement traduit en MQL4.

SetIndexShift - Пользовательские индикаторы - Справочник MQL4
SetIndexShift - Пользовательские индикаторы - Справочник MQL4
  • docs.mql4.com
При положительном значении изображение линии смещается вправо, при отрицательном - влево. Значение, рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего бара.
 

Il n'y a pas de changement dans les paramètres de l'indicateur. Je suis allé dans le code et j'ai mis shift -4 dans le code et l'indicateur a cessé de fonctionner - il montre tous les TFs sont rouges. Je suis assis ici et je me demande pourquoi.

Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Mihail Matkovskij:

Pour ce faire, vous devez répondre à deux questions :que ferez-vous si

1. Il y aura plusieurs valeurs de 5, dans différentes cellules du tableau.

2. La valeur 5 ne sera pas dans le tableau.

Parce que la fonctionArrayBsearch (pour des données triées), dans le premier cas, donnera le premier index trouvé où la valeur de la cellule est 5, dans le second cas, elle donnera un élément proche de la valeur 5. Je ne vois pas comment vous pourriez traiter un tableau non trié.

Merci beaucoup pour votre réponse rapide. Dans mon cas, chaque valeur d'un élément de tableau est unique et existe dans une seule instance. C'est-à-dire que la valeur 5, comme les autres valeurs, ne se répète pas.

Dans mon cas, la valeur 5 peut ne pas exister dans un tableau non trié. Cela signifie que certaines cellules du tableau non trié peuvent être vides.
Mais si la valeur 5 n'est pas dans le tableau non trié, alors je ne peux pas spécifier la valeur 5 comme second paramètre dans la fonction ArrayBsearch(). Seules les valeurs qui existent nécessairement dans le tableau non trié entrent dans cette fonction.
Merci pour votre aide

Raison: