Aide au codage - page 775

 

Veuillez m'aider à résoudre ce problème.

Ci-dessous se trouve une alerte croisée MA, mais j'ai reçu trop de messages pour une même notification.

Je veux juste recevoir une notification pour 2 barres consécutives, ce qui signifie quelenombre de barres à sauter avant l'alerte suivante est de 2.

Comment puis-je faire, aidez-moi s'il vous plaît. Merci beaucoup.



//+------------------------------------------------------------------+

//|                MA Cross Arrows.mq4                               |

//|                Copyright © 2006  Scorpion@fxfisherman.com        |

//+------------------------------------------------------------------+

#property copyright "FxFisherman.com"

#property link      "http://www.fxfisherman.com"



#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 Blue

#property indicator_color2 White

#property indicator_color3 Red



extern int Crossed_Pips = 0;

extern int MA_Period = 21;

extern int MA_Type = MODE_SMA;

extern int Shift_Bars=0;

extern int Bars_Count= 1000;

int state;

  

//---- buffers

double v1[];

double v2[];

double v3[];

  





int start()

 {

  double ma;

  int previous;

  int i;

  int shift;

  bool crossed_up, crossed_down;

  int totalBars = Bars - (MA_Period * 2);

  

  if (Bars_Count > 0 && Bars_Count <= totalBars)

  {

    i = Bars_Count;

  }else if(totalBars <= 0 ) {

    return(0);

  }else{

    i = totalBars;

  }

  

  while(i>=0)

   {

    shift = i + Shift_Bars;

    ma = iMA(Symbol(), Period(), MA_Period, 0, MA_Type, PRICE_CLOSE, shift);

    crossed_up = High[shift] >= (ma + (Crossed_Pips * Point));

    crossed_down = Low[shift] <= (ma - (Crossed_Pips * Point));



    v1[i] = NULL;

    v2[i] = NULL;    

    v3[i] = ma;

    if (crossed_up && previous != 1) {

      v1[i] = ma + (Crossed_Pips * Point);

      previous = 1;

    }else if(crossed_down && previous != 2){

      v2[i] = ma - (Crossed_Pips * Point);

      previous = 2;

    }

 

    i--;

   }

   

   ma = iMA(Symbol(), Period(), MA_Period, 0, MA_Type, PRICE_CLOSE, 0);

   if (Close[0] >= ma + (Crossed_Pips * Point) && state != 1) { 

      state = 1;

      SendNotification(Symbol() + "M"+_Period + " Price crossed UP EMA21.");

   }else if (Close[0] <= ma - (Crossed_Pips * Point) && state != -1) {

      state = -1;

      SendNotification(Symbol() + "M"+_Period + " Price cross DOWN the EMA21.");

   }



   return(0);

 }
 

Lorsque je déclare une variable externe, j'obtiens un message d'erreur "extern-unexpected token".

Veuillez m'aider

Dossiers :
error1.zip  116 kb
 
Ricardo Schuller:

Lorsque je déclare une variable externe, j'obtiens un message d'erreur "extern-unexpected token".

Veuillez m'aider

vous ne pouvez pas utiliser extern à l'intérieur d'une méthode ou d'une fonction.

 

comment corriger l'erreur ?

 
Mo3tasemovic:

comment corriger l'erreur ?

" GBPUSD"

 
Keith Watford:

" GBPUSD"

merci

 
pivboll:

Besoin d'aide pour modifier un indicateur

J'essaie de modifier un indicateur MACD pour le transformer en un indicateur de poussée de tendance comme décrit dans le livre de Buff Dormeier intitulé Investing with volume analysis.

J'ai des problèmes avec la variable et je n'arrive pas à obtenir un résultat décent. Je joins le volWMA et le VW MACD qui fonctionnent.

Voici la description

Indicateur de poussée de tendance

L'indicateur de poussée de tendance (Tti), une version améliorée de l'indicateur de convergence/divergence de la moyenne mobile pondérée par le volume (VW-Macd), a été présenté dans mon livre Investing With Volume Analysis. Le Tti utilise un multiplicateur de volume de manière unique pour exagérer l'impact du volume sur les moyennes mobiles pondérées en fonction du volume. Comme le VW-Macd, le Tti utilise des moyennes mobiles pondérées par le volume, par opposition aux moyennes mobiles exponentielles. Les moyennes pondérées en fonction du volume pèsent les prix de clôture proportionnellement au volume échangé au cours de chaque période de temps, de sorte que le Tti accorde plus d'importance aux tendances de prix avec un volume plus important et moins d'importance aux périodes de temps avec un volume plus faible. Dans le numéro de février 2001 de Stocks & Commodities, j'ai montré que les moyennes mobiles pondérées en fonction du volume (moyennes Buff, ou Vwmas) améliorent la réactivité tout en augmentant la fiabilité des moyennes mobiles simples.

Comme les Macd et VW-Macd, la Tti calcule un écart en soustrayant la moyenne courte (rapide) de la moyenne longue (lente). Cet écart, combiné à un multiplicateur de volume, crée l'écart Buff.

Le calcul est le suivant

multiplicateur de volume = VolWMA rapide / VolWMA lent

le multiplicateur de volume est porté à la deuxième puissance, puis multiplié par le VolWMA rapide pour obtenir le volume amélioré de la moyenne rapide.

le multiplicateur de volume est porté à la deuxième puissance et ensuite multiplié par le SLOW VolWMA pour obtenir le Volume enhance slow average.

TTi = améliorer la moyenne rapide - améliorer la moyenne lente

Merci pour votre aide

Lien de l'indicateur : https://www.sendspace.com/file/rfy2dv

Bonjour mon ami. Avez-vous réussi à résoudre le problème du TTI ? Pouvez-vous partager ici ou m'envoyer par PM ? Merci

 
Hi
Pourriez-vous m'aider à résoudre ce problème ?
J'ai besoin d'un EA quienvoie une notification push chaque fois que la différence entre le prix de l'offre et le kinjun sen (dans ichimoku) est supérieure à 3 pips (30 points) dans un intervalle de temps de 1 minute.
 

hai,


veuillez ajouter l'option d'alerte sonore, d'alerte par message et de notification par téléphone portable pour cet indicateur.

Merci

Dossiers :
 

Bonjour

J'ai trouvé des sujets comme "iCustom renvoie des valeurs erronées" mais ceci est un peu différent.

J'essaie de créer un indicateur qui compare la taille de barres de type identique (type bull/bear) dans une séquence.

et montre les valeurs maximales de la comparaison dans l'histogramme.

comme ceci.

valeur max.

//-----------------------------

avec ArrayMaximum le résultat est plus rapide. mais il y a un problème avec mon code.exemple :

iCustom_diff

voici le code qui compare les valeurs iCustom et renvoie des valeurs erronées :

#property indicator_separate_window
#property indicator_buffers 4


#property indicator_color1 DeepSkyBlue
#property indicator_width1 10


#property indicator_color2 Red
#property indicator_width2 10



#property indicator_color3 DodgerBlue
#property indicator_width3 4


#property indicator_color4 Crimson
#property indicator_width4 4


#property indicator_level1 0
#property indicator_levelcolor White
#property indicator_levelstyle 0


string LF = "\n";  // use this in custom or utility blocks where you need line feeds
int ObjCount = 0;  // count of all objects created on the chart, allows creation of objects with unique names
int current = 0; // variable points to current bar


double Buffer1[];
double Buffer2[];

double Buffer3[];
double Buffer4[];


double bar_0;
double bar_1;
double bar_2;
double bar_3;
double bar_4;
double bar_5;
double bar_6;
double bar_7;
double bar_8;
double bar_9;
double bar_10;
double bar_11;


//+------------------------------------------------------------------+
int init()
{
    if (false) ObjectsDeleteAll();      // clear the chart

    IndicatorDigits(Digits-5);
    IndicatorBuffers(4);
    
    SetIndexBuffer(0, Buffer1);
    SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID);
    
    SetIndexBuffer(1, Buffer2);
    SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID);
    
    
    
    
    SetIndexBuffer(2, Buffer3);
    SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID);
    
    SetIndexBuffer(3, Buffer4);
    SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID);
    
    
    return(0);
}


//+------------------------------------------------------------------+
int deinit()
{
if (false) ObjectsDeleteAll();

return(0);
}


//+------------------------------------------------------------------+
int start()
{
OnEveryTick1();

return(0);
}
//+------------------------------------------------------------------+
void OnEveryTick1()
{
    
    int i;
    int counted_bars = IndicatorCounted();
    if(counted_bars < 0) return(-1);
    if(counted_bars > 0) counted_bars--;
    i = Bars - counted_bars - 1;
    // main calculation loop
    while (i >= 0)
    
{
current = i;
        
//current  >0
//current+1=0
TechnicalAnalysis00();

//current  >0
//current+1>0
//current+2=0
TechnicalAnalysis01();

//current  >0
//current+1>0
//current+2>0
//current+3=0
TechnicalAnalysis02();


i--;
}
}

//-----------------------------------------------------
//---------bar_0-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis00()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);

if
(
bar_0 > 0
&&
bar_1 == 0
)

{
Histogram00();
}

}

void Histogram00()
{
Buffer1[current]= bar_0;
}
//-----------------------------------------------------
//---------bar_1-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis01()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);
bar_2 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+2);

if
(
bar_0 > 0
&&
bar_1 > 0
&&
bar_2 == 0
)

{
Histogram01();
}

}

void Histogram01()
{
int x_up_01[] = {0,0};

x_up_01[0] = bar_0;
x_up_01[1] = bar_1;

int maxValue_01 = ArrayMaximum(x_up_01);

Buffer1[current]= x_up_01[maxValue_01];
}
//-----------------------------------------------------
//---------bar_2-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis02()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);
bar_2 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+2);
bar_3 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+3);

if
(
bar_0 > 0
&&
bar_1 > 0
&&
bar_2 > 0
&&
bar_3 == 0
)

{
Histogram02();
}

}

void Histogram02()
{
int x_up_02[] = {0,0,0};

x_up_02[0] = bar_0;
x_up_02[1] = bar_1;
x_up_02[2] = bar_2;

int maxValue_02 = ArrayMaximum(x_up_02);

Buffer1[current]= x_up_02[maxValue_02];
}
//-----------------------------------------------------
//---------bar_3--------and so on-----------------------
//-----------------------------------------------------

où est mon erreur ? comment puis-je la réparer ?
J'ai essayé d'appeler iCustom avec tous les paramètres externes - même résultat erroné. J'ai essayé d'appeler iCustom sans paramètre externe - même résultat erroné.

Merci pour votre aide

code principal (premier histogramme) et deuxième code (deuxième histogramme) basé sur celui-ci :