Indicateurs multitemporels - page 1204

 
greenpar :

Merci encore une fois pour votre aide. J'ai intégré les modifications que vous avez indiquées, mais je rencontre toujours des problèmes/erreurs (voir le fichier joint). Ce serait formidable si je pouvais obtenir des conseils supplémentaires.

Je vous remercie.

J'ai téléchargé un programme corrigé et un échantillon complet.
Dossiers :
 
Naguisa Unada:
J'ai téléchargé un programme fixe et un échantillon complet.

Merci encore pour votre aide, j'ai mis en place les changements comme suggéré (voir fichier joint et code ci-dessous). Je continue à obtenir de nombreuses erreurs lors de la compilation (voir l'image ci-jointe des erreurs de compilation), je soupçonne que cela a à voir avec les lignes en surbrillance dans le code ci-dessous.

Gardez à l'esprit que je cherche à incorporer d'autres horizons temporels, des paires de devises, et aussi d'autres indicateurs à terme (comme l'ADX), dans ce fichier indicateur.

Toute aide supplémentaire serait grandement appréciée.

#property description   "Indicator alerts when candle size is larger than CandlePoint value for specified period"
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0


//+------------------------------------------------------------------+
//| Declaring Constants                                         |
//+------------------------------------------------------------------+
#define  RESET 0

//+------------------------------------------------------------------+
//| Enumeration for the indication of operation                                         |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Input parameters of the indicator                                           |
//+------------------------------------------------------------------+
//--- Candle point size
input uint CandlePointM1 = 5;                   // Minimum candle points for Period M1
input uint CandlePointM5 = 5;                   // Minimum candle points for Period M5
int timeFrame[] = {PERIOD_M1, PERIOD_M5, PERIOD_H1};
string currencyPairs[] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"}

//+------------------------------------------------------------------+
//| Custom indicator initialisation function                                            |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Deinitialisation                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Custom iteration function                                           |
//+------------------------------------------------------------------+
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[])


//+------------------------------------------------------------------+
//| Candle size indicator                                               |
//+------------------------------------------------------------------+
{
int range;
static datetime alertBar[] = {0, 0, 0}; // used for one alert/bar
datetime candleTime[3];

for(int i=0; i<3; i++)
        {
        for (int j=0 ;j<3 ;j++)
                {
                double candleLow, candleHigh;
                candleLow = iLow(currencyPairs[i],timeFrame[j],0);
                candleHigh = iHigh(currencyPairs[i],timeFrame[j],0);
                range = int((candleHigh-candleLow)/_Point);
                candleTime[j] = iTime(currencyPairs[i],timeFrame[j],0);

if (alertBar[j] != candleTime[j])
        {
        if (timeFrame[j] == PERIOD_M1 && range>int(CandlePointM1))
                {
                        Alert(currencyPairs[i], "PERIOD_M1", "candle >", CandlePointM1, "points");
                        alertBar[j] = candleTime[j];
                }
                if (timeFrame[j] == PERIOD_M5 && range>int(CandlePointM5))
                        {
                        Alert(currencyPairs[i], "PERIOD_M5", "candle >", CandlePointM5, "points");
                        alertBar[j] = candleTime[j];
                        }
                }
        }
}


Dossiers :
 
greenpar :

Merci encore pour votre aide, j'ai mis en place les changements comme suggéré (voir fichier joint et code ci-dessous). Je continue à obtenir de nombreuses erreurs lors de la compilation (voir l'image ci-jointe des erreurs de compilation), je soupçonne que cela a à voir avec les lignes en surbrillance dans le code ci-dessous.

Gardez à l'esprit que je cherche à incorporer d'autres horizons temporels, des paires de devises, et aussi d'autres indicateurs à terme (comme l'ADX), dans ce fichier indicateur.

Toute aide supplémentaire serait grandement appréciée.


1. A la fin de la ligne, il manquait ;.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"} ;

2. Les lignes suivantes étaient manquantes.

Retour (taux_total) ;
}

3. J'ai mal placé la dimension du tableau. Elle a été modifiée comme suit et déplacée dans la zone globale.

datetime alert_bar [3] [3] ;
datetime candleTime [3] [3] ;

Dossiers :
 
Naguisa Unada:

1. A la fin de la ligne, il manquait ;.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"} ;

2. Les lignes suivantes sont manquantes.

Retourner (taux_total) ;
}

3. J'ai mal placé la dimension du tableau. Il a été modifié comme suit et déplacé dans la zone globale.

datetime alert_bar [3] [3] ;
datetime candleTime [3] [3] ;


Encore une fois, merci beaucoup. Il émet maintenant des alertes sur toutes les périodes et paires de devises indiquées.

Cependant, il n'alerte plus une fois par barre, il alerte pour chaque augmentation de points de bougie au-dessus de la taille minimale des points de bougie. Les lignes 78, 84 et 90 du fichier 'Sample.mq4' que vous aviez joint à votre message précédent ne garantissent pas que l'alerte ne soit émise qu'une fois par bougie. J'ai essayé de changer les valeurs dans les '[]' mais cela n'a pas réglé le problème. Comment résoudre ce problème ?

Comme toujours, toute aide supplémentaire serait grandement appréciée. Je vous remercie.

 
greenpar :

Cependant, il n'alerte plus une fois par barre, il alerte pour chaque augmentation de points de bougie au-dessus de la taille minimale des points de bougie. Les lignes 78, 84 et 90 du fichier 'Sample.mq4' que vous avez joint à votre message précédent ne garantissent pas qu'il n'y ait qu'une seule alerte par bougie. J'ai essayé de changer les valeurs dans les '[]' mais cela n'a pas réglé le problème. Comment peut-on résoudre ce problème ?

Bien sûr. Je devrais écrire les lignes suivantes dans "OnInit".

 //ArrayResize(candleTime, CPNO); 
 //ArrayResize(alert_bar,  CPNO); 
 //ArrayInitialize(alert_bar, 0); 
int OnInit ()
{
         //--- indicator buffers mapping 
        TFNO = ArraySize (timeFrame);
        CPNO = ArraySize (currencyPairs);
        
         ArrayResize (candleTime, CPNO);
         ArrayResize (alert_bar,  CPNO);
         ArrayInitialize (alert_bar, 0 );
        
         if ( StringLen ( Symbol ()) > 6 )
        {
                sufix = StringSubstr ( Symbol (), 6 , 0 );
                 for ( int i = 0 ; i < CPNO; i++)
                        currencyPairs[i] += sufix;
        }
         //--- 
         return ( INIT_SUCCEEDED );
}

Les nombres dans [ ] sont ajustés avec "ArrayResize" ci-dessus. Même si le nombre de paires de devises augmente, il sera ajusté automatiquement ici, mais si vous voulez ajouter un autre cadre temporel, vous devez modifier le programme directement. C'est parce que c'est la spécification de MQL4.

 
Naguisa Unada:

Bien sûr que si. Je devrais écrire les lignes suivantes dans "OnInit".

Les nombres dans [ ] sont ajustés avec "ArrayResize" ci-dessus. Même si le nombre de paires de devises augmente, il sera ajusté automatiquement ici, mais si vous voulez ajouter un autre cadre temporel, vous devez modifier le programme directement. C'est parce que c'est la spécification de MQL4.


Merci encore une fois. J'ai ajouté le code.

L'alerte continue de s'afficher pour chaque augmentation de points de bougie au-dessus de la taille minimale des points de bougie, même après avoir supprimé l'indicateur du graphique, recompilé, quitté MT, etc. Comment puis-je résoudre ce problème ?

Comme toujours, toute aide supplémentaire serait grandement appréciée. Merci.

 
greenpar :

L'alerte est toujours émise pour chaque augmentation de points de bougie au-dessus de la taille minimale des points de bougie, même après avoir supprimé l'indicateur du graphique, recompilé, quitté MT, etc. Comment puis-je résoudre ce problème ?

Sur mon PC, il fonctionne normalement sans aucun problème. Je pense qu'il y a un problème, mais je ne sais pas lequel.

 
Naguisa Unada:

Sur mon PC, il fonctionne normalement sans aucun problème. Je pense que quelque chose ne va pas, mais je ne sais pas ce que c'est.


J'exécute MT4 build 1090. Je ne sais pas quel est le problème. Peut-être que quelqu'un d'autre peut m'aider ?

Je vous remercie.

 

quelqu'un peut-il modifier cet indicateur, quand les stochs se croisent les flèches s'affichent sur la deuxième bougie mais j'ai besoin que la flèche s'affiche sur la bougie actuelle, immédiatement à chaque fois que les stochs se croisent.


merci

 
fxprogramer:

quelqu'un peut-il modifier cet indicateur, lorsque les stochs se croisent les flèches s'affichent sur la deuxième bougie mais j'ai besoin que la flèche s'affiche sur la bougie actuelle, immédiatement à chaque fois que les stochs se croisent.

//for(i=1; i<=limit; i++) 
  for(i=0; i<=limit; i++) 

C'est très simple. Corriger i = 1 à i = 0 sur la ligne 77.