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

 
Roman Sharanov:

Je ne comprends pas comment écrire des indicateurs, quel est le problème ?

J'ai besoin qu'une ligne soit tracée pour montrer la différence de prix entre active_1 et active_2.

ça marche

J'ai également besoin d'une moyenne ma_period ma_period à tracer sur cette ligne, il y a un problème avec elle - elle n'est pas affichée

Vous ne vérifiez pas le résultat de la copie.

Vous copiez l'historique complet à chaque tic.

Le nombre de Bars(), et non le taux_total, doit être copié à partir d'un symbole non natif (pas le symbole actuel du graphique).

Toutes les deux minutes, vous devez demander, par exemple, l'heure actuelle de la barre pour un symbole non natif afin de maintenir à jour ses données historiques.

Utilisez SimpleMAOnBuffer() pour lisser les données du dataBuffer.

 
Artyom Trishkin:

Vous ne vérifiez pas le résultat de la copie.

Vous copiez l'historique complet sur chaque tique.

Un symbole non natif (qui n'est pas le symbole actuel du graphique) doit avoir le nombre Bars() copié, et non rates_total.

Toutes les deux minutes, vous devez demander, par exemple, l'heure actuelle du bar pour le symbole non natif afin de maintenir à jour ses données historiques.

Utiliser SimpleMAOnBuffer() pour lisser les données de dataBuffer

comme ça ? ne fonctionne plus du tout

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

Salutations.

Pourriez-vous me dire comment enregistrer certaines valeurs lorsqu'un EA ouvre un ordre, afin qu'elles fassent référence à cet ordre particulier, par exemple sur un ticket.

 
Andrey Sokolov:

Salutations.

Pourriez-vous me dire comment enregistrer certaines valeurs lorsqu'un EA ouvre un ordre ? afin qu'elles fassent référence à cet ordre particulier, par exemple sur un ticket.

Dans le commentaire

 

Je veux observer la volatilité. Dans ce but, je calcule la différence entre la fermeture et l'ouverture dans le tableau tmp1 et je l'utilise ensuite pour tracer la SMA pour une période d'intérêt.


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {


int i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


Aucune erreur ne se produit à la compilation, le terminal ne dessine pas l'indicateur, le journal indique CADJPY,H1 : array out of range in '_t1.mq4' (65,11).

C'est la ligne où la différenceMathMax-MathMin est calculée, quelle peut en être la raison ?


 
psyman:

Je veux observer la volatilité. Dans ce but, je calcule la différence entre la fermeture et l'ouverture dans le tableau tmp1 et je l'utilise ensuite pour tracer la SMA pour une période d'intérêt.



Aucune erreur ne se produit à la compilation, le terminal ne dessine pas l'indicateur, le journal indique CADJPY,H1 : array out of range in '_t1.mq4' (65,11).

C'est la ligne où la différenceMathMax-MathMin est calculée, quelle peut en être la raison ?


Je n'ai pas compris le code, mais si c'est le cas :

for(i=1; i<rates_total-1; i++)
 

Ça ne marche pas.


UPD

Chaîne simplifiée au strict minimum tmp1[i]=close[i] ; L'erreur reste la même.

 
psyman:

Je veux observer la volatilité. Dans ce but, je calcule la différence fermeture-ouverture dans le tableau tmp1 et je l'utilise ensuite pour tracer la SMA pour une période d'intérêt.



Aucune erreur ne se produit à la compilation, le terminal ne dessine pas l'indicateur, le journal indique CADJPY,H1 : array out of range in '_t1.mq4' (65,11).

C'est la ligne où est calculée la différenceMathMax-MathMin.


Le tableau tmp[] est déclaré comme un tableau dynamique et est initialement de longueur nulle. D'où l'erreur.

Vous devez déclarer ce tableau comme un tampon indicateur pour les calculs.

 
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toute question pour les débutants en MQL4, aide et discussion sur les algorithmes et les codes

Alexey Viktorov, 2018.10.16 12:31

Le tableau tmp[] est déclaré comme un tableau dynamique et est initialement de longueur nulle. D'où l'erreur.

Ce tableau doit être déclaré comme un tampon indicateur pour les calculs.


Pourquoi ne pouvons-nous pas utiliser un tableau dynamique ?

Dans ce cas, le prix de clôture est écrasé à cet endroit sans aucun calcul.

Où puis-je lire comment utiliser les tampons indicateurs ?

Raison: