[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 704

 
ToLik_SRGV:

Aussi, Odysseus, dans l'exemple précédent, tu l'avais comme ça :

Et maintenant c'est comme ça :

Vous n'avez rien supprimé, ou je l'imagine ?
voici le code orinal
 IndicatorBuffers(7);
   SetIndexBuffer(0, MACDBuffer);
   SetIndexBuffer(1, SignalBuffer);
   SetIndexBuffer(2, FastEMABuffer);
   SetIndexBuffer(3, SlowEMABuffer);
   SetIndexBuffer(4, SignalEMABuffer);
   SetIndexBuffer(5, Buffer1);
   SetIndexBuffer(6, Buffer2);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_LINE,EMPTY);
  SetIndexStyle(2, DRAW_LINE,EMPTY,2 );
   SetIndexStyle(3, DRAW_NONE,EMPTY,2);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(5, DRAW_HISTOGRAM,EMPTY, 2);
   SetIndexStyle(6, DRAW_HISTOGRAM,EMPTY, 2);
   SetIndexDrawBegin(0, SlowEMA);
   SetIndexDrawBegin(1, SlowEMA);
   IndicatorShortName("ZeroLag MACD Colored(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")");
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(5, "MACD");
   SetIndexLabel(6, "MACD");
 
odiseif:
Voici le code final
Désolé, mon erreur. ..... est l'original.
//+------------------------------------------------------------------+
//|                                                 ZeroLag MACD.mq4 |
//|                                                               RD |
//|                                                 marynarz15@wp.pl |
//| Colored by SVK © 2009.                                           |
//+------------------------------------------------------------------+
#property copyright "RD"
#property link      "marynarz15@wp.pl"
//----
#property indicator_separate_window
#property  indicator_buffers 7
#property indicator_color1 Black
#property indicator_color2 Blue
#property indicator_color3 Black
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_color6 Lime
#property indicator_color7 Red

//---- input parameters
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalEMA = 9;

//---- buffers
double MACDBuffer[];
double SignalBuffer[];
double FastEMABuffer[];
double SlowEMABuffer[];
double SignalEMABuffer[];

double Buffer1[];
double Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(7);
   SetIndexBuffer(0, MACDBuffer);
   SetIndexBuffer(1, SignalBuffer);
   SetIndexBuffer(2, FastEMABuffer);
   SetIndexBuffer(3, SlowEMABuffer);
   SetIndexBuffer(4, SignalEMABuffer);
   SetIndexBuffer(5, Buffer1);
   SetIndexBuffer(6, Buffer2);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_LINE,EMPTY);
   SetIndexStyle(2, DRAW_NONE);
   SetIndexStyle(3, DRAW_NONE);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(5, DRAW_HISTOGRAM);
   SetIndexStyle(6, DRAW_HISTOGRAM);
   SetIndexDrawBegin(0, SlowEMA);
   SetIndexDrawBegin(1, SlowEMA);
   IndicatorShortName("ZeroLag MACD Colored(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")");
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(5, "MACD");
   SetIndexLabel(6, "MACD");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double prev,current;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;
   double EMA, ZeroLagEMAp, ZeroLagEMAq;
   for(int i = 0; i < limit; i++)
     {
       FastEMABuffer[i] = 100.0*iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
       SlowEMABuffer[i] = 100.0*iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
     }
   for(i = 0; i < limit; i++)
     {
        EMA = iMAOnArray(FastEMABuffer, Bars, FastEMA, 0, MODE_EMA, i);
        ZeroLagEMAp = FastEMABuffer[i] + FastEMABuffer[i] - EMA;
        EMA = iMAOnArray(SlowEMABuffer, Bars, SlowEMA, 0, MODE_EMA, i);
        ZeroLagEMAq = SlowEMABuffer[i] + SlowEMABuffer[i] - EMA;
        MACDBuffer[i] = ZeroLagEMAp - ZeroLagEMAq;
        FastEMABuffer[i] = 0.0;
        SlowEMABuffer[i] = 0.0;
     }
   for(i = 0; i < limit; i++)
       SignalEMABuffer[i] = iMAOnArray(MACDBuffer, Bars, SignalEMA, 0, MODE_EMA, i);
   for(i = 0; i < limit; i++)
     {
       EMA = iMAOnArray(SignalEMABuffer, Bars, SignalEMA, 0, MODE_EMA, i);
       SignalBuffer[i] = SignalEMABuffer[i] + SignalEMABuffer[i] - EMA;
       SignalEMABuffer[i] = 0.0;
     }
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=MACDBuffer[i];
      prev=MACDBuffer[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         Buffer2[i]=current;
         Buffer1[i]=0.0;
        }
      else
        {
         Buffer1[i]=current;
         Buffer2[i]=0.0;
        }
     }     
   return(0);
  }
//+------------------------------------------------------------------+
 
ToLik_SRGV:

Sergey, je n'ai pas bien compris ce que vous avez changé exactement, car à l'adresse que vous avez fournie, il faut s'enregistrer pour voir le code source dufiltre CCI .
Je n'ai trouvé qu'une seule erreur, iWPR n'a pas de paramètre applied_price, donc il est correct :


Tous, merci, maintenant rrrrrr fonctionne !!!

 
ToLik_SRGV:

En principe, il n'y a pas de différence.
Essayez ma fonction, c'est assez simple, passez le "medj", et le chalut désiré comme paramètres.
Cette fonction doit être appelée au départ à n'importe quel endroit, tant qu'elle démarre à chaque tic.

Il est évident que les commandes doivent avoir des curseurs différents.

Roger:
Je comprends, vous définissez une variable ro au début de la fonction, mais vous ne l'assignez nulle part, c'est-à-dire qu'elle est 0.

ToLik_SRGV, merci, ça ne fonctionne toujours pas correctement. Ça veut dire que j'ai le mauvais endroit pour cacher le problème. Merci quand même, je vais me débrouiller tout seul.Roger,
 

Comme d'habitude ici )))) Comme d'habitude aux bonnes personnes ))))

Quel est le problème, je n'arrive pas à le comprendre. Problèmes avec les variables globales. Je le fais dans le code de l'indicateur :

string Global="Global"; //имя глобальной переменной
int param; // параметр глобальной переменной
int init()
  {
  GlobalVariablesDeleteAll(NULL); 
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  { //привожу простой пример
  double bar1= iMA(Symbol(),PERIOD_M5,13,0,MODE_SMMA,PRICE_TYPICAL,0);
  double bar2= iOpen(Symbol(),PERIOD_M5,0);
   if (bar1>bar2){ param = 1; GlobalVariableSet(Global,param); }
   if (bar1<bar2){ param = 2; GlobalVariableSet(Global,param); } 

//----
   return(0);
  }

Ensuite, j'essaie d'obtenir la valeur d'une variable globale à partir d'un Expert Advisor avec ce code

string Global="Global";  
int param;

int start()
  {
  int i= GlobalVariableSet(Global,param);
  Print (i);   // Здесь он мне и выводит всякую лабуду вида : 1279217736


   return(0);
  }
Qu'est-ce que je fais de mal ? Je devais obtenir 1 ou 2 valeurs de paramètres, mais j'ai obtenu ...... Et pourquoi dois-je réécrire le nom et la variable au début du code EA ? Ils semblent exister en tant que globaux, mais la compilation ne fonctionne pas sans eux.
 

Puis-je ouvrir deux positions ACHAT/VENTE simultanément ?

J'ai essayé - j'ai écrit un code simple qui ouvre des positions BUY et SELL simultanément, connecté à EUR/USD en temps réel, elles semblent s'ouvrir.

Mais il s'agissait d'un compte de démonstration et d'un testeur de stratégie, qu'en est-il en temps réel, ma société de courtage y verra-t-elle un inconvénient ?

Je n'ai jamais essayé auparavant, je ne pense pas avoir commencé ce genre d'expérience.

 
Infinity:...
Vous avez besoin d'une autre fonction pour lire la valeur des variables globales:)))
int i= GlobalVariableGet(Global);
 
Lim1:

Puis-je ouvrir deux positions ACHAT/VENTE simultanément ?

J'ai essayé - j'ai écrit un code simple qui ouvre des positions BUY et SELL simultanément, connecté à EUR/USD en temps réel, elles semblent s'ouvrir.

Mais il s'agissait d'un compte de démonstration et d'un testeur de stratégie, qu'en est-il en temps réel, ma société de courtage y verra-t-elle un inconvénient ?

Je n'ai jamais essayé auparavant, je ne pense pas avoir commencé ce genre d'expérience.

Ouvrez... pendant qu'ils vous laissent... :)
En général - demandez à l'équipe de support de votre DC
 
ToLik_SRGV:
Afin de lire la valeur des variables globales, nous avons besoin d'une autre fonction :)))

Si clair, regarder dans le livre et ne pas voir, fonctionne merci ! Continuez) avec des questions. Il s'agit des mêmes variables globales. J'ai ajouté la condition suivante à l'indicateur :

string EUR="EURUSD"; //имя глобальной переменной
string GBP="GBPUSD"; //имя глобальной переменной
string valuta="";
int param; // параметр глобальной переменной
int init()
  {
  GlobalVariablesDeleteAll(NULL); 
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  { string symb = Symbol();  //Здесь узнаю на какой валюте стоит индикатор
    
    if (symb==EUR) {valuta=EUR;}   // здесь сравнивая ,в переменную занощу имя глобальной переменной
    if (symb==GBP) {valuta=GBP;}   // которую следует использовать
  //привожу простой пример
  double bar1= iMA(Symbol(),PERIOD_M5,13,0,MODE_SMMA,PRICE_TYPICAL,0);
  double bar2= iOpen(Symbol(),PERIOD_M5,0);
   if (bar1>bar2){ param = 1; GlobalVariableSet(valuta,param); }   // а здесь присваиваю параметр глобальной переменной
   if (bar1<bar2){ param = 2; GlobalVariableSet(valuta,param); } 
   return(0);
  }

Je veux définir quelle variable globale doit recevoir une valeur, en fonction de la devise sur laquelle l'indicateur est basé.

Je comprends que dans la variable globale GlobalVariableSet(valuta,param), le nom (valuta) doit contenir la valeur qui lui est attribuée ci-dessus

appeler à nouveau la variable globale dans le code du Conseiller Expert

chaîne de caractères valuta="valuta" ;

int i= GlobalVariableGet(valuta) ; // mais je n'obtiens pas la valeur, .... J'obtiens donc 0. Peut-être est-il impossible de changer le nom de la variable globale de cette façon ?

Je pense avoir trouvé la solution - il s'avère que je ne peux pas appeler une variable globale avec ce nom, mais si j'enregistre le nom de chaîne GlobalVariableGet("EURUSD"), cela fonctionne).

 

Tout d'abord, de l'aide

double GlobalVariableGet( string name)

Renvoie la valeur de la variable globale existante ou 0 en cas d'erreur. Appelez GetLastError() pour obtenir des informations sur les erreurs.


Vous pouvez voir le contenu du GV, mais ne pouvez pas le récupérer ?

Raison: