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

 
Vitaly Muzichenko:

limite - le nombre de barres sur le graphique, de sorte que lorsque vous faites défiler l'historique, l'indicateur sera affiché jusqu'à la fin de l'historique.


Merci beaucoup ! :)

 

Bonjour, pourriez-vous me dire comment écrire le paramètre - appliquer à - Prix médian dans l'indicateur, dans ce cas Moveng.

Je vais décrire le problème, l'indicateur a un tableau[][] il enregistre les données pour calculer le MA - les données ont été enregistrées aux prix HL/2, pas le défaut

 

Bonjour, J'essaie d'écrire un objet de la classe CDecisionForest dans un fichier bin (il provient de la bibliothèque Alglib), mais je n'arrive pas à trouver comment. J'ai essayé d'utiliser FileWriteStruct, mais le compilateur donne une erreur sur mon argument de classe :

'df' - structures containing objects are not allowed

Est-il réellement possible de l'écrire ou dois-je démonter l'objet, l'écrire en plusieurs parties puis le réassembler ?
 
Vitaly Muzichenko:

limite - nombre de barres sur le graphique, de sorte que lorsque vous faites défiler l'historique, l'indicateur sera affiché jusqu'à la fin de l'historique.


Cher Monsieur, veuillez expliquer.

Je n'ai pas réussi à utiliser les informations contenues dans votre lien.

Lorsque je déclare moi-même la valeur limite , la fenêtre "Array out of range" s'affiche.

Le débogueur indique les chaînes de caractères avec les tableaux dans la boucle for.

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

Peut-être qu'il y a une façon plus simple de faire tout ça ?
Je n'ai pas besoin du dessin.

Seulement les valeurs sur les barres actuelles et précédentes.

 
Ras al Ghul:

Cher Monsieur, pourriez-vous m'expliquer ?

En utilisant les informations de votre lien, je n'ai pas réussi.

Lorsque je déclare moi-même la valeur limite , la fenêtre "Array out of range" s'affiche.

Le débogueur indique les chaînes de caractères avec les tableaux dans la boucle for.

Peut-être peut-on le faire d'une manière plus simple ?
Je n'ai pas besoin de dessin.

Seulement les valeurs sur les barres actuelles et précédentes.

Comment calculez-vous la limite ?

En fait, la limite est calculée dans le calcul inverse de l'indicateur - du début de l'historique à sa fin (aux données actuelles) :

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
Le concept"nombre_nécessaire_de_barres_pour_le_calcul_de_fidélité" signifie le nombre minimum de barres, sur lequel l'indicateur sera correctement calculé. Pour une fractale 2X2, il y a six barres - deux à gauche, une au centre, deux à droite et une à l'extrême droite qui doivent être complètement formées pour que la fractale ne soit pas recalculée.
 

Bonjour, pourriez-vous me dire comment augmenter la taille d'un tableau unidimensionnel dans un indicateur ?

A condition qu'il ait un index de tampon pour appeler

Et la taille du tableau dépasse le nombre de barres.

 

Coincé, il me semble, dans un endroit si simple. Qu'en est-il de global int chekcount=0 ; int count=0 ; dans le cas où je veux exécuter plusieurs fonctions counter() en parallèle ?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

Coincé, il me semble, dans un endroit si simple. Que faire avec global int chekcount=0 ; int count=0 ; si je veux exécuter plusieurs fonctions counter() en parallèle ?

Utilisez simplement une classe, ou faites des copies de fonctions avec des noms différents.

 
Vitaly Muzichenko:

Utilisez uniquement une classe, ou faites des copies de fonctions avec des noms différents.

Ce n'est donc pas si simple... Merci !

 

Quelqu'un peut-il réécrire cette fonction en utilisant une classe, si ce n'est pas difficile ?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }