Question sur le conseiller multi-devises - page 7

 
Ok ! Je vais m'en occuper maintenant. Mais le testeur ne sait pas à quel instrument l'EA est attaché.
 

datetime iTime( string symbol, int timeframe, int shift)

Retourne la valeur temporelle de la barre ouverte à partir du graphique correspondant (symbole, timeframe). En cas d'erreur, la fonction renvoie 0. Pour plus d'informations sur l'erreur, appelez GetLastError(). Pour le graphique actuel, les informations sur l'heure d'ouverture de chaque barre se trouvent dans le tableau prédéfini Time[]. Paramètres : symbol - nom du symbole de l'instrument. NULL signifie symbole actuel. timeframe - Période. Peut être l'une des périodes du graphique. 0 signifie la période du graphique actuel. shift - Index de la valeur de la période (décalage relatif à la barre actuelle d'un nombre spécifié de périodes en arrière).

---------------------------------------------------------------------------------------------------------------------

D'après ce que je comprends, vous devez d'abord définir, par exemple :

statique int prevtimeEURUSD = 0 ;

puis l'insérer dans le code de la paire nécessaire

double TTTTTT=iTime("EURUSD",60,0); 
if(TTTTTT == prevtimeEURUSD) 
       return(0);
   prevtimeEURUSD = TTTTTT
 
rid:

...

D'après ce que j'ai compris, vous devez d'abord définir, par exemple :

statique int prevtimeEURUSD = 0 ;

puis l'insérer dans le code de la paire dont nous avons besoin

double TTTTTT=iTime("EURUSD",60,0); 
if(TTTTTT == prevtimeEURUSD) 
       return(0);
   prevtimeEURUSD = TTTTTT

Oui. Voyez comment c'est fait dans ProtoType (Rosh). J'ai essayé d'insérer un lien, quelque chose n'est pas passé (trouvez-le en cherchant dans CodeBase). La fonction isNewBar() dispose d'un tableau à deux dimensions pour cela - la commande est une grande puissance !
 
Merci ! J'ai cet expert. Je vais y jeter un coup d'oeil maintenant.
 
Cher Klerk !
Je veux créer un indicateur multi-devises, par exemple deux paires. Tout d'abord, il faut ramener les cotations de ces paires à une seule forme (par exemple, les convertir en pourcentage de changement, c'est-à-dire (Close[i]-Close[i+1])/100% - c'est bien ça ?), et ensuite, si je veux voir la dynamique de la différence entre elles, les entrer dans l'indicateur. Comment faire ?
 

Si vous voulez connaître la dynamique de la différence, vous n'avez pas besoin de la convertir en pourcentage, vous pouvez le faire comme ceci :

int start(){
 
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
     Comment("MACD "+MacdBuffer[0]);         
 
return(0);
}
 
Merci beaucoup, Xeon !!!! Je vais essayer !
 
Xeon ! Si cela ne vous dérange pas de déposer ce dont vous avez besoin sur le dessus de start..... Parce que, je suis toujours une idiote ! !!
 
nido:
Xeon ! Si vous n'êtes pas dur, déposez ce dont vous avez besoin depuis le haut du départ... Parce que je suis toujours une idiote ! !!


En fait, ceci a été écrit en quelques minutes dans un script de test (pour tester des blocs de code).

J'ai dû dessiner un indicateur pour vous :-)

//+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, xeon"
#property link      "xeon@nm.ru"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,MacdBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   IndicatorShortName("MultyMACD");
     
 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
 
   if(IsOptimization()==true || IsTesting()==true){Comment("В тестере будет ошибка деления на 0. описано - в справке по MarketInfo");return(0);}
//----
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
 
 for(int i=9;i>=0;i--){
     SignalBuffer[0]=iMAOnArray(MacdBuffer,0,9,0,MODE_SMA,i);
 }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

J'espère que vous trouverez la solution

p.s. Gardez à l'esprit que cet indicateur ne fonctionnera qu'en ligne, sur l'historique vous devrez créer une boucle

 
xeon:
nido:
Xeon ! Si vous n'êtes pas dur, déposez ce dont vous avez besoin depuis le haut du départ... Parce que je suis toujours une idiote ! !!


En fait, ceci a été écrit en quelques minutes dans un script de test (pour tester des blocs de code).

J'ai dû dessiner un indicateur pour vous :-)

//+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, xeon"
#property link      "xeon@nm.ru"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,MacdBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   IndicatorShortName("MultyMACD");
     
 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
 
   if(IsOptimization()==true || IsTesting()==true){Comment("В тестере будет ошибка деления на 0. описано - в справке по MarketInfo");return(0);}
//----
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
 
 for(int i=9;i>=0;i--){
     SignalBuffer[0]=iMAOnArray(MacdBuffer,0,9,0,MODE_SMA,i);
 }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

J'espère que vous trouverez la solution

p.s. gardez à l'esprit que cet indicateur ne fonctionnera qu'en ligne, sur l'historique vous devrez créer une boucle

MERCI, Xeon ! !! Puis-je vous écrire un message privé concernant l'idée d'une EA ? Mon adresse électronique : ni_do@mail.ru.
Raison: